tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParser.java
changeset 56 aa2539c91954
parent 54 a151135b0cf9
child 60 e54443a6878c
child 62 1c2bb2fc7c87
--- a/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceParser.java	Wed Sep 29 17:45:35 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,485 +0,0 @@
-/*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-* Parser for C++ source files
-*
-*/
-package com.nokia.tracecompiler.source;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Parser for C++ source files. Commented and quoted areas are located during
- * the construction of this object and those areas are excluded from the
- * searches.
- * 
- */
-public class SourceParser {
-
-	/**
-	 * Skip white spaces. Does not apply to string searches
-	 */
-	public final static int SKIP_WHITE_SPACES = 0x01; // CodForChk_Dis_Magic
-
-	/**
-	 * Skip string areas
-	 */
-	public final static int SKIP_STRINGS = 0x02; // CodForChk_Dis_Magic
-
-	/**
-	 * Search / iterate backwards
-	 */
-	public final static int BACKWARD_SEARCH = 0x04; // CodForChk_Dis_Magic
-
-	/**
-	 * Ignore character case in string searches
-	 */
-	public final static int IGNORE_CASE = 0x08; // CodForChk_Dis_Magic
-
-	/**
-	 * Skip commented areas
-	 */
-	public final static int SKIP_COMMENTS = 0x10; // CodForChk_Dis_Magic
-
-	/**
-	 * Skip preprocessor definitions
-	 */
-	public final static int SKIP_PREPROCESSOR = 0x80; // CodForChk_Dis_Magic
-
-	/**
-	 * Match beginning of word flag
-	 */
-	public final static int MATCH_WORD_BEGINNING = 0x20; // CodForChk_Dis_Magic
-
-	/**
-	 * Match end of word flag
-	 */
-	public final static int MATCH_WORD_END = 0x40; // CodForChk_Dis_Magic
-
-	/**
-	 * Match whole word flag
-	 */
-	public final static int MATCH_WHOLE_WORD = MATCH_WORD_BEGINNING
-			| MATCH_WORD_END;
-
-	/**
-	 * Ignore all special areas during search
-	 */
-	public final static int SKIP_ALL = SKIP_WHITE_SPACES | SKIP_STRINGS
-			| SKIP_COMMENTS | SKIP_PREPROCESSOR;
-
-	/**
-	 * Data to be searched.
-	 */
-	private SourceDocumentInterface source;
-
-	/**
-	 * List of source locations
-	 */
-	private ArrayList<SourceLocation> locations;
-
-	/**
-	 * Document factory for creating locations
-	 */
-	private SourceDocumentFactory documentFactory;
-
-	/**
-	 * Excluded area parser
-	 */
-	private ExcludedAreaParser excludedAreaParser;
-
-	/**
-	 * Context area parser
-	 */
-	private ContextAreaParser contextAreaParser;
-
-	/**
-	 * Function return value parser
-	 */
-	private FunctionReturnValueParser returnValueParser;
-
-	/**
-	 * Creates a new parser for given data
-	 * 
-	 * @param factory
-	 *            the document factory
-	 * @param sourceData
-	 *            the source data
-	 */
-	public SourceParser(SourceDocumentFactory factory, String sourceData) {
-		this(factory, factory.createDocument(sourceData));
-	}
-
-	/**
-	 * Creates a source parser from source document
-	 * 
-	 * @param factory
-	 *            the document factory
-	 * @param source
-	 *            the source document
-	 */
-	public SourceParser(SourceDocumentFactory factory,
-			SourceDocumentInterface source) {
-		this.documentFactory = factory;
-		this.source = source;
-		excludedAreaParser = new ExcludedAreaParser(this);
-		contextAreaParser = new ContextAreaParser(this);
-		returnValueParser = new FunctionReturnValueParser(this);
-		try {
-			findExcludedAreas();
-		} catch (SourceParserException e) {
-		}
-	}
-
-	/**
-	 * Gets the source document
-	 * 
-	 * @return the source
-	 */
-	public SourceDocumentInterface getSource() {
-		return source;
-	}
-
-	/**
-	 * Gets part of the source document data
-	 * 
-	 * @param start
-	 *            the start offset
-	 * @param length
-	 *            the data length
-	 * @return the data or null if offsets are not valid
-	 */
-	public String getData(int start, int length) {
-		String retval;
-		try {
-			retval = source.get(start, length);
-		} catch (SourceParserException e) {
-			retval = null;
-		}
-		return retval;
-	}
-
-	/**
-	 * Gets a character at given offset
-	 * 
-	 * @param offset
-	 *            the offset
-	 * @return the character
-	 */
-	public char getData(int offset) {
-		char retval;
-		try {
-			retval = source.getChar(offset);
-		} catch (SourceParserException e) {
-			retval = '\0';
-		}
-		return retval;
-	}
-
-	/**
-	 * Gets the source document length
-	 * 
-	 * @return the source length
-	 */
-	public int getDataLength() {
-		return source.getLength();
-	}
-
-	/**
-	 * Gets the line number of given offset
-	 * 
-	 * @param offset
-	 *            the offset
-	 * @return the line number or -1 if offset is not valid
-	 */
-	public int getLineNumber(int offset) {
-		int retval;
-		try {
-			retval = source.getLineOfOffset(offset) + 1;
-		} catch (SourceParserException e) {
-			retval = -1;
-		}
-		return retval;
-	}
-
-	/**
-	 * Starts a new string search from given offset
-	 * 
-	 * @param searchString
-	 *            the string to be searched
-	 * @param startOffset
-	 *            the offset to start of search
-	 * @param endOffset
-	 *            the end of search or -1 to search the whole document
-	 * @param searchFlags
-	 *            the search flags
-	 * @return the search object
-	 */
-	public SourceStringSearch startStringSearch(String searchString,
-			int startOffset, int endOffset, int searchFlags) {
-		return new SourceStringSearch(this, searchString, startOffset,
-				endOffset, searchFlags);
-	}
-
-	/**
-	 * Tokenizes the parameter list starting from next bracket. White spaces are
-	 * discarded. For example (a, b , c ) returns { "a", "b", "c" }. This method
-	 * is independent of the current string search and thus can be used during
-	 * one.
-	 * 
-	 * @param startIndex
-	 *            the index where to start
-	 * @param list
-	 *            the list where the parameters are added
-	 * @param findSeparator
-	 *            if true, the processing stops after ';' or '{' character. If
-	 *            false, processing stops after ')' at end of parameters
-	 * @return the offset at end of the parameters
-	 * @throws SourceParserException
-	 *             if parameters are not valid
-	 */
-	public int tokenizeParameters(int startIndex, List<String> list,
-			boolean findSeparator) throws SourceParserException {
-		SourceParameterTokenizer tokenizer = new SourceParameterTokenizer(this,
-				startIndex);
-		return tokenizer.tokenize(list, findSeparator);
-	}
-
-	/**
-	 * Parses the parameter list of given source context. Each entry added into
-	 * the list will be an instance of SourceParameter class. This method is
-	 * independent of the current string search and thus can be used during one.
-	 * 
-	 * @param parameterIndex
-	 *            the index where to start
-	 * @param list
-	 *            the list where the parameters are added
-	 * @return the offset at end of the parameters
-	 * @throws SourceParserException
-	 *             if context is not valid
-	 */
-	public int parseFunctionParameters(int parameterIndex, List<SourceParameter> list)
-			throws SourceParserException {
-		SourceParameterTokenizer tokenizer = new SourceParameterTokenizer(this,
-				parameterIndex);
-		return tokenizer.tokenizeTyped(list);
-	}
-
-	/**
-	 * Parses the return values of given source context
-	 * 
-	 * @param context
-	 *            the context to be parsed
-	 * @param list
-	 *            the list of return values
-	 */
-	void parseReturnValues(SourceContext context, List<SourceReturn> list) {
-		returnValueParser.parseReturnValues(context, list);
-	}
-
-	/**
-	 * Checks if the offset if within an excluded area
-	 * 
-	 * @param offset
-	 *            the offset
-	 * @return true if in excluded area
-	 */
-	public boolean isInExcludedArea(int offset) {
-		return findExcludedAreaIndex(offset) >= 0;
-	}
-
-	/**
-	 * Gets an excluded area
-	 * 
-	 * @param offset
-	 *            the data offset
-	 * @return the area or null
-	 */
-	public SourceExcludedArea getExcludedArea(int offset) {
-		return excludedAreaParser.getArea(offset);
-	}
-
-	/**
-	 * Creates a new source iterator
-	 * 
-	 * @param offset
-	 *            the offset where to start
-	 * @param iteratorFlags
-	 *            the flags for the iterator
-	 * @return the new iterator
-	 */
-	public SourceIterator createIterator(int offset, int iteratorFlags) {
-		return new SourceIterator(this, offset, iteratorFlags);
-	}
-
-	/**
-	 * Returns the context at given offset. This parses the source if it has not
-	 * been parsed before.
-	 * 
-	 * @param offset
-	 *            the offset to the source data
-	 * @return the context at the offset or null if no context exists
-	 */
-	public SourceContext getContext(int offset) {
-		SourceContext retval;
-		try {
-			retval = contextAreaParser.parseAndGet(offset);
-		} catch (SourceParserException e) {
-			retval = null;
-		}
-		return retval;
-	}
-
-	/**
-	 * Locates the start-of-line starting from given offset
-	 * 
-	 * @param offset
-	 *            the offset
-	 * @param cancelIfNotWhitespace
-	 *            flag that tells to stop processing and return the original
-	 *            value if a non-whitespace is found before start of line
-	 * @param stayInContext
-	 *            flag that tells to stay within the context offset currently
-	 *            resides. If this would come out of the context, this locates
-	 *            the start of the next line following offset
-	 * @return the start-of-line
-	 * @throws SourceParserException
-	 *             if the offset is not valid
-	 */
-	public int findStartOfLine(int offset, boolean cancelIfNotWhitespace,
-			boolean stayInContext) throws SourceParserException {
-		int retval = offset == 0 ? offset : offset - 1;
-		for (int i = retval; i >= 0; i--) {
-			char c = source.getChar(i);
-			if (source.getChar(i) == '\n') {
-				retval = i + 1;
-				i = -1;
-			} else if (cancelIfNotWhitespace && !Character.isWhitespace(c)) {
-				retval = offset;
-				i = -1;
-			}
-		}
-		if (stayInContext) {
-			SourceContext context = getContext(offset);
-			if (context != null && retval < context.getOffset()) {
-				retval = context.getOffset();
-				int end = context.getOffset() + context.getLength();
-				for (int i = retval; i < end; i++) {
-					if (source.getChar(i) == '\n') {
-						retval = i + 1;
-						i = end;
-					}
-				}
-			}
-		}
-		return retval;
-	}
-
-	/**
-	 * Finds the array index of the excluded area which contains the offset. If
-	 * none of the areas contain the offset, returns negative integer indicating
-	 * the index of the excluded area following the offset
-	 * 
-	 * @param offset
-	 *            the offset to the data
-	 * @return the excluded area index
-	 */
-	int findExcludedAreaIndex(int offset) {
-		return excludedAreaParser.find(offset);
-	}
-
-	/**
-	 * Finds the excluded source file areas. Excluded areas include comments and
-	 * quoted strings. Overwrites possible old areas.
-	 * 
-	 * @throws SourceParserException
-	 *             if parser fails
-	 */
-	public void findExcludedAreas() throws SourceParserException {
-		excludedAreaParser.parseAll();
-	}
-
-	/**
-	 * Gets the list of excluded areas
-	 * 
-	 * @return the list
-	 */
-	public List<SourceExcludedArea> getExcludedAreas() {
-		return excludedAreaParser.getAreas();
-	}
-
-	/**
-	 * Checks if the area is excluded with given flags
-	 * 
-	 * @param type
-	 *            the area type
-	 * @param flags
-	 *            the flags
-	 * @return true if skipped
-	 */
-	static boolean isExcluded(int type, int flags) {
-		boolean string = ((flags & SKIP_STRINGS) != 0)
-				&& (type == SourceExcludedArea.STRING);
-		boolean comment = ((flags & SKIP_COMMENTS) != 0)
-				&& (type == SourceExcludedArea.MULTILINE_COMMENT);
-		boolean linecomment = ((flags & SKIP_COMMENTS) != 0)
-				&& (type == SourceExcludedArea.LINE_COMMENT);
-		boolean preProcessor = ((flags & SKIP_PREPROCESSOR) != 0)
-				&& (type == SourceExcludedArea.PREPROCESSOR_DEFINITION);
-		return string || comment || linecomment || preProcessor;
-	}
-
-	/**
-	 * Adds a location to this parser
-	 * 
-	 * @param location
-	 *            the location
-	 */
-	void addLocation(SourceLocation location) {
-		if (locations == null) {
-			locations = new ArrayList<SourceLocation>();
-		}
-		locations.add(location);
-		if (source != null) {
-			source.addLocation(location.getLocation());
-		}
-	}
-
-	/**
-	 * Removes a location from this parser
-	 * 
-	 * @param location
-	 *            the location to be removed
-	 */
-	void removeLocation(SourceLocation location) {
-		if (locations != null) {
-			locations.remove(location);
-		}
-		if (source != null) {
-			source.removeLocation(location.getLocation());
-		}
-	}
-
-	/**
-	 * Gets the document framework
-	 * 
-	 * @return the document framework
-	 */
-	public SourceDocumentFactory getDocumentFramework() {
-		return documentFactory;
-	}
-
-}