mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Start of IProblem/Backtrack migration for Parser2.
This commit is contained in:
parent
4aad3e762a
commit
416db61299
22 changed files with 1047 additions and 181 deletions
|
@ -0,0 +1,463 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2004 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM - Initial API and implementation
|
||||
**********************************************************************/
|
||||
package org.eclipse.cdt.core.dom.ast;
|
||||
|
||||
import org.eclipse.cdt.internal.core.parser.ParserMessages;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
* Description of a C/C++ parse/compilation problem, as detected by the parser or some of the underlying
|
||||
* clients of the parser.
|
||||
*
|
||||
* A problem provides access to:
|
||||
* <ul>
|
||||
* <li> its location (originating source file name, source position, line number), </li>
|
||||
* <li> its message description and a predicate to check its severity (warning or error). </li>
|
||||
* <li> its ID : an number identifying the very nature of this problem. All possible IDs are listed
|
||||
* as constants on this interface. </li>
|
||||
* </ul>
|
||||
*/
|
||||
public interface IASTProblem extends IASTNode {
|
||||
/**
|
||||
* Returns the problem id
|
||||
*
|
||||
* @return the problem id
|
||||
*/
|
||||
int getID();
|
||||
|
||||
/**
|
||||
* Answer a localized, human-readable message string which describes the problem.
|
||||
*
|
||||
* @return a localized, human-readable message string which describes the problem
|
||||
*/
|
||||
String getMessage();
|
||||
|
||||
/**
|
||||
* Return to the client a map between parameter names and values.
|
||||
*
|
||||
* The keys and values are all Strings.
|
||||
*
|
||||
*
|
||||
* @return a map between parameter names and values.
|
||||
*/
|
||||
String getArguments();
|
||||
|
||||
/**
|
||||
* Checks the severity to see if the Error bit is set.
|
||||
*
|
||||
* @return true if the Error bit is set for the severity, false otherwise
|
||||
*/
|
||||
boolean isError();
|
||||
|
||||
/**
|
||||
* Checks the severity to see if the Warning bit is not set.
|
||||
*
|
||||
* @return true if the Warning bit is not set for the severity, false otherwise
|
||||
*/
|
||||
boolean isWarning();
|
||||
|
||||
/**
|
||||
* Unknown Numeric Value for line numbers and offsets; use this constant
|
||||
*/
|
||||
public final static int INT_VALUE_NOT_PROVIDED = -1;
|
||||
|
||||
/**
|
||||
* Unknown filename sentinel value
|
||||
*/
|
||||
public final static String FILENAME_NOT_PROVIDED = ParserMessages.getString("IProblem.unknownFileName"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Problem Categories
|
||||
* The high bits of a problem ID contains information about the category of a problem.
|
||||
* For example, (problemID & TypeRelated) != 0, indicates that this problem is type related.
|
||||
*
|
||||
* A problem category can help to implement custom problem filters. Indeed, when numerous problems
|
||||
* are listed, focusing on import related problems first might be relevant.
|
||||
*
|
||||
* When a problem is tagged as Internal, it means that no change other than a local source code change
|
||||
* can fix the corresponding problem.
|
||||
*/
|
||||
|
||||
/**
|
||||
* IProblem relates to a valid error on the Scanner
|
||||
*/
|
||||
public final static int SCANNER_RELATED = 0x01000000;
|
||||
|
||||
/**
|
||||
* IProblem relates to a valid error on the preprocessor
|
||||
*/
|
||||
public final static int PREPROCESSOR_RELATED = 0x02000000;
|
||||
|
||||
/**
|
||||
* IProblem relates to a valid syntax error in the parser
|
||||
*/
|
||||
public final static int SYNTAX_RELATED = 0x04000000;
|
||||
|
||||
/**
|
||||
* IProblem relates to a valid semantical error in the parser
|
||||
*/
|
||||
public final static int SEMANTICS_RELATED = 0x08000000;
|
||||
|
||||
/**
|
||||
* IProblem relates to an implementation of design limitation
|
||||
*/
|
||||
public final static int INTERNAL_RELATED = 0x10000000;
|
||||
|
||||
|
||||
/**
|
||||
* Check the parameter bitmask against an IProblem's ID to broadly segregate the
|
||||
* types of problems.
|
||||
*
|
||||
* @param bitmask
|
||||
* @return true if ( (id & bitmask ) != 0 )
|
||||
*/
|
||||
public boolean checkCategory(int bitmask);
|
||||
|
||||
/**
|
||||
* Mask to use in order to filter out the category portion of the problem ID.
|
||||
*/
|
||||
public final static int IGNORE_CATEGORIES_MASK = 0xFFFFFF;
|
||||
|
||||
/**
|
||||
* Below are listed all available problem attributes. The JavaDoc for each problem ID indicates
|
||||
* when they should be contributed to creating a problem of that type.
|
||||
*/
|
||||
|
||||
// Preprocessor IProblem attributes
|
||||
/**
|
||||
* The text that follows a #error preprocessor directive
|
||||
*/
|
||||
public final static String A_PREPROC_POUND_ERROR = ParserMessages.getString("IProblem.preproc.poundError"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* The filename that failed somehow in an preprocessor include directive
|
||||
*/
|
||||
public final static String A_PREPROC_INCLUDE_FILENAME = ParserMessages.getString("IProblem.preproc.include"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A preprocessor macro name
|
||||
*/
|
||||
public final static String A_PREPROC_MACRO_NAME = ParserMessages.getString("IProblem.preproc.macro"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A preprocessor conditional that could not be evaluated
|
||||
*
|
||||
* #if X + Y == Z <== that one, if X, Y or Z are not defined
|
||||
* #endif
|
||||
*/
|
||||
public final static String A_PREPROC_CONDITION = ParserMessages.getString("IProblem.preproc.condition"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A preprocessor directive that could not be interpretted
|
||||
*
|
||||
* e.g. #blah
|
||||
*/
|
||||
public final static String A_PREPROC_UNKNOWN_DIRECTIVE = ParserMessages.getString("IProblem.preproc.unknownDirective"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* The preprocessor conditional statement that caused an unbalanced mismatch.
|
||||
*
|
||||
* #if X
|
||||
* #else
|
||||
* #else <=== that one
|
||||
* #endif
|
||||
*/
|
||||
public final static String A_PREPROC_CONDITIONAL_MISMATCH = ParserMessages.getString("IProblem.preproc.conditionalMismatch"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* The Bad character encountered in scanner
|
||||
*/
|
||||
public static final String A_SCANNER_BADCHAR = null;
|
||||
|
||||
/**
|
||||
* A_SYMBOL_NAME - symbol name
|
||||
*/
|
||||
public static final String A_SYMBOL_NAME = ParserMessages.getString("IProblem.symbolName"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A_NAMESPACE_NAME = namespace name
|
||||
*/
|
||||
public static final String A_NAMESPACE_NAME = ParserMessages.getString("IProblem.namespaceName"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A_TYPE_NAME - type name
|
||||
*/
|
||||
public static final String A_TYPE_NAME = ParserMessages.getString("IProblem.typeName"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Below are listed all available problem IDs. Note that this list could be augmented in the future,
|
||||
* as new features are added to the C/C++ core implementation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Scanner Problems
|
||||
*/
|
||||
|
||||
/**
|
||||
* Bad character encountered by Scanner.
|
||||
* Required attributes: A_SCANNER_BADCHAR
|
||||
* @see #A_SCANNER_BADCHAR
|
||||
*/
|
||||
public final static int SCANNER_BAD_CHARACTER = SCANNER_RELATED | 0x001;
|
||||
|
||||
/**
|
||||
* Unbounded literal string encountered by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_UNBOUNDED_STRING = SCANNER_RELATED | 0x002;
|
||||
|
||||
/**
|
||||
* Invalid escape sequence encountered by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_INVALID_ESCAPECHAR = SCANNER_RELATED | 0x003;
|
||||
|
||||
/**
|
||||
* Bad floating point encountered by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_BAD_FLOATING_POINT = SCANNER_RELATED | 0x004;
|
||||
|
||||
/**
|
||||
* Bad hexidecimal encountered by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_BAD_HEX_FORMAT = SCANNER_RELATED | 0x005;
|
||||
|
||||
/**
|
||||
* Unexpected EOF encountered by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_UNEXPECTED_EOF = SCANNER_RELATED | 0x006;
|
||||
|
||||
/**
|
||||
* Bad octal encountered by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_BAD_OCTAL_FORMAT = SCANNER_RELATED | 0x007;
|
||||
|
||||
/**
|
||||
* Bad decimal encountered by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_BAD_DECIMAL_FORMAT = SCANNER_RELATED | 0x008;
|
||||
|
||||
/**
|
||||
* Assignment '=' encountered in macro by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_ASSIGNMENT_NOT_ALLOWED = SCANNER_RELATED | 0x009;
|
||||
|
||||
/**
|
||||
* Division by 0 encountered in macro by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_DIVIDE_BY_ZERO = SCANNER_RELATED | 0x00A;
|
||||
|
||||
/**
|
||||
* Missing ')' encountered in macro by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_MISSING_R_PAREN = SCANNER_RELATED | 0x00B;
|
||||
|
||||
/**
|
||||
* Expression syntax error encountered in macro by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_EXPRESSION_SYNTAX_ERROR = SCANNER_RELATED | 0x00C;
|
||||
|
||||
/**
|
||||
* Expression syntax error encountered in macro by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_ILLEGAL_IDENTIFIER = SCANNER_RELATED | 0x00D;
|
||||
|
||||
/**
|
||||
* Division by 0 encountered in macro by Scanner.
|
||||
* Required attributes: none.
|
||||
*/
|
||||
public final static int SCANNER_BAD_CONDITIONAL_EXPRESSION = SCANNER_RELATED | 0x00E;
|
||||
|
||||
|
||||
/*
|
||||
* Preprocessor Problems
|
||||
*/
|
||||
|
||||
/**
|
||||
* #error encountered by Preprocessor.
|
||||
* Required attributes: A_PREPROC_POUND_ERROR
|
||||
* @see #A_PREPROC_POUND_ERROR
|
||||
*/
|
||||
public final static int PREPROCESSOR_POUND_ERROR = PREPROCESSOR_RELATED | 0x001;
|
||||
|
||||
/**
|
||||
* Inclusion not found by Preprocessor.
|
||||
* Required attributes: A_PREPROC_INCLUDE_FILENAME
|
||||
* @see #A_PREPROC_INCLUDE_FILENAME
|
||||
*/
|
||||
public final static int PREPROCESSOR_INCLUSION_NOT_FOUND = PREPROCESSOR_RELATED | 0x002;
|
||||
|
||||
/**
|
||||
* Macro definition not found by Preprocessor.
|
||||
* Required attributes: A_PREPROC_MACRO_NAME
|
||||
* @see #A_PREPROC_MACRO_NAME
|
||||
*/
|
||||
public final static int PREPROCESSOR_DEFINITION_NOT_FOUND = PREPROCESSOR_RELATED | 0x003;
|
||||
|
||||
/**
|
||||
* Preprocessor conditionals seem unbalanced.
|
||||
* Required attributes: A_PREPROC_CONDITIONAL_MISMATCH
|
||||
* @see #A_PREPROC_CONDITIONAL_MISMATCH
|
||||
*/
|
||||
|
||||
public final static int PREPROCESSOR_UNBALANCE_CONDITION = PREPROCESSOR_RELATED | 0x004;
|
||||
|
||||
/**
|
||||
* Invalid format to Macro definition.
|
||||
* Required attributes: A_PREPROC_MACRO_NAME
|
||||
* @see #A_PREPROC_MACRO_NAME
|
||||
*/
|
||||
public final static int PREPROCESSOR_INVALID_MACRO_DEFN = PREPROCESSOR_RELATED | 0x005;
|
||||
|
||||
/**
|
||||
* Invalid or unknown preprocessor directive encountered by Preprocessor.
|
||||
* Required attributes: A_PREPROC_UNKNOWN_DIRECTIVE
|
||||
* @see #A_PREPROC_UNKNOWN_DIRECTIVE
|
||||
*/
|
||||
public final static int PREPROCESSOR_INVALID_DIRECTIVE = PREPROCESSOR_RELATED | 0x006;
|
||||
|
||||
/**
|
||||
* Invalid macro redefinition encountered by Preprocessor.
|
||||
* Required attributes: A_PREPROC_MACRO_NAME
|
||||
* @see #A_PREPROC_MACRO_NAME
|
||||
*/
|
||||
public final static int PREPROCESSOR_INVALID_MACRO_REDEFN = PREPROCESSOR_RELATED | 0x007;
|
||||
|
||||
/**
|
||||
* Preprocessor Conditional cannot not be evaluated due.
|
||||
* Required attributes: A_PREPROC_CONDITION
|
||||
* @see #A_PREPROC_CONDITION
|
||||
*/
|
||||
public final static int PREPROCESSOR_CONDITIONAL_EVAL_ERROR = PREPROCESSOR_RELATED | 0x008;
|
||||
|
||||
/**
|
||||
* Invalid macro usage encountered by Preprocessor.
|
||||
* Required attributes: A_PREPROC_MACRO_NAME
|
||||
* @see #A_PREPROC_MACRO_NAME
|
||||
*/
|
||||
public final static int PREPROCESSOR_MACRO_USAGE_ERROR = PREPROCESSOR_RELATED | 0x009;
|
||||
|
||||
/**
|
||||
* Invalid Macro Pasting encountered by Preprocessor.
|
||||
* Required attributes: A_PREPROC_MACRO_NAME
|
||||
* @see #A_PREPROC_MACRO_NAME
|
||||
*/
|
||||
public final static int PREPROCESSOR_MACRO_PASTING_ERROR = PREPROCESSOR_RELATED | 0x00A;
|
||||
|
||||
/**
|
||||
* Circular inclusion encountered by Preprocessor.
|
||||
* Required attributes: A_PREPROC_INCLUDE_FILENAME
|
||||
* @see #A_PREPROC_INCLUDE_FILENAME
|
||||
*/
|
||||
public final static int PREPROCESSOR_CIRCULAR_INCLUSION = PREPROCESSOR_RELATED | 0x00B;
|
||||
|
||||
/**
|
||||
* macro argument "..." encountered without the required ')' i.e. must be last argument if used
|
||||
* Required attributes: none
|
||||
*/
|
||||
public final static int PREPROCESSOR_MISSING_RPAREN_PARMLIST = PREPROCESSOR_RELATED | 0x00C;
|
||||
|
||||
/**
|
||||
* __VA_ARGS__ encountered in macro definition without the required '...' parameter
|
||||
* Required attributes: none
|
||||
*/
|
||||
public final static int PREPROCESSOR_INVALID_VA_ARGS = PREPROCESSOR_RELATED | 0x00D;
|
||||
|
||||
/*
|
||||
* Parser Syntactic Problems
|
||||
*/
|
||||
public final static int SYNTAX_ERROR = SYNTAX_RELATED | 0x001;
|
||||
|
||||
/*
|
||||
* Parser Semantic Problems
|
||||
*/
|
||||
|
||||
/**
|
||||
* Attempt to add a unique symbol, yet the value was already defined.
|
||||
* Require attributes: A_SYMBOL_NAME
|
||||
* @see #A_SYMBOL_NAME
|
||||
*/
|
||||
public final static int SEMANTIC_UNIQUE_NAME_PREDEFINED = SEMANTICS_RELATED | 0x001;
|
||||
|
||||
/**
|
||||
* Attempt to use a symbol that was not found.
|
||||
* Require attributes: A_SYMBOL_NAME
|
||||
* @see #A_SYMBOL_NAME
|
||||
*/
|
||||
public final static int SEMANTIC_NAME_NOT_FOUND = SEMANTICS_RELATED | 0x002;
|
||||
|
||||
/**
|
||||
* Name not provided in context that it was required.
|
||||
* Require attributes: none
|
||||
*/
|
||||
public final static int SEMANTIC_NAME_NOT_PROVIDED = SEMANTICS_RELATED | 0x003;
|
||||
|
||||
/**
|
||||
* Invalid overload of a particular name.
|
||||
* Required attributes: A_SYMBOL_NAME
|
||||
* @see #A_SYMBOL_NAME
|
||||
*/
|
||||
public static final int SEMANTIC_INVALID_OVERLOAD = SEMANTICS_RELATED | 0x004;
|
||||
|
||||
/**
|
||||
* Invalid using directive.
|
||||
* Required attributes: A_NAMESPACE_NAME
|
||||
* @see #A_NAMESPACE_NAME
|
||||
*/
|
||||
public static final int SEMANTIC_INVALID_USING = SEMANTICS_RELATED | 0x005;
|
||||
|
||||
/**
|
||||
* Ambiguous lookup for given name.
|
||||
* Required attributes: A_SYMBOL_NAME
|
||||
* @see #A_SYMBOL_NAME
|
||||
*/
|
||||
public static final int SEMANTIC_AMBIGUOUS_LOOKUP = SEMANTICS_RELATED | 0x006;
|
||||
|
||||
/**
|
||||
* Invalid type provided
|
||||
* Required attribugtes: A_TYPE_NAME
|
||||
* @see #A_TYPE_NAME
|
||||
*/
|
||||
public static final int SEMANTIC_INVALID_TYPE = SEMANTICS_RELATED | 0x007;
|
||||
|
||||
public static final int SEMANTIC_CIRCULAR_INHERITANCE = SEMANTICS_RELATED | 0x008;
|
||||
|
||||
public static final int SEMANTIC_INVALID_TEMPLATE = SEMANTICS_RELATED | 0x009;
|
||||
|
||||
public static final int SEMANTIC_BAD_VISIBILITY = SEMANTICS_RELATED | 0x00A;
|
||||
|
||||
public static final int SEMANTIC_UNABLE_TO_RESOLVE_FUNCTION = SEMANTICS_RELATED | 0x00B;
|
||||
|
||||
public static final int SEMANTIC_INVALID_TEMPLATE_ARGUMENT = SEMANTICS_RELATED | 0x00C;
|
||||
|
||||
public static final int SEMANTIC_INVALID_TEMPLATE_PARAMETER = SEMANTICS_RELATED | 0x00D;
|
||||
|
||||
public static final int SEMANTIC_REDECLARED_TEMPLATE_PARAMETER = SEMANTICS_RELATED | 0x00E;
|
||||
|
||||
public static final int SEMANTIC_INVALID_CONVERSION_TYPE = SEMANTICS_RELATED | 0x00F;
|
||||
|
||||
public static final int SEMANTIC_MALFORMED_EXPRESSION = SEMANTICS_RELATED | 0x010;
|
||||
|
||||
public static final int SEMANTIC_ILLFORMED_FRIEND = SEMANTICS_RELATED | 0x011;
|
||||
|
||||
public static final int SEMANTIC_RECURSIVE_TEMPLATE_INSTANTIATION = SEMANTICS_RELATED | 0x012;
|
||||
}
|
|
@ -18,7 +18,8 @@ package org.eclipse.cdt.core.dom.ast;
|
|||
*/
|
||||
public interface IASTTranslationUnit extends IASTNode {
|
||||
|
||||
ASTNodeProperty OWNED_DECLARATION = new ASTNodeProperty( "OWNED" ); //$NON-NLS-1$
|
||||
public static final ASTNodeProperty OWNED_DECLARATION = new ASTNodeProperty( "Owned" ); //$NON-NLS-1$
|
||||
public static final ASTNodeProperty SCANNER_PROBLEM = new ASTNodeProperty( "Scanner Problem"); //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A translation unit contains an ordered sequence of declarations.
|
||||
|
@ -64,5 +65,6 @@ public interface IASTTranslationUnit extends IASTNode {
|
|||
public IASTMacroDefinition [] getMacroDefinitions();
|
||||
public IASTPreprocessorIncludeStatement [] getIncludeDirectives();
|
||||
public IASTPreprocessorStatement [] getAllPreprocessorStatements();
|
||||
public IASTProblem [] getPreprocesorProblems();
|
||||
|
||||
}
|
||||
|
|
|
@ -28,9 +28,6 @@ import org.eclipse.cdt.internal.core.parser.ParserMessages;
|
|||
*/
|
||||
public interface IProblem
|
||||
{
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns the problem id
|
||||
*
|
||||
|
|
|
@ -0,0 +1,280 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2004 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM - Initial API and implementation
|
||||
**********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.internal.core.parser.ParserMessages;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public class ASTProblem extends ASTNode implements IASTProblem {
|
||||
|
||||
private IASTNode parent;
|
||||
private ASTNodeProperty property;
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTNode#getParent()
|
||||
*/
|
||||
public IASTNode getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTNode#setParent(org.eclipse.cdt.core.dom.ast.IASTNode)
|
||||
*/
|
||||
public void setParent(IASTNode node) {
|
||||
this.parent = node;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTNode#getPropertyInParent()
|
||||
*/
|
||||
public ASTNodeProperty getPropertyInParent() {
|
||||
return property;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTNode#setPropertyInParent(org.eclipse.cdt.core.dom.ast.ASTNodeProperty)
|
||||
*/
|
||||
public void setPropertyInParent(ASTNodeProperty property) {
|
||||
this.property = property;
|
||||
}
|
||||
|
||||
private final char[] arg;
|
||||
private final int id;
|
||||
|
||||
private final boolean isError;
|
||||
private final boolean isWarning;
|
||||
|
||||
private String message = null;
|
||||
|
||||
public ASTProblem( int id, char[] arg, boolean warn, boolean error )
|
||||
{
|
||||
this.id = id;
|
||||
this.arg = arg;
|
||||
this.isWarning = warn;
|
||||
this.isError = error;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.IProblem#getID()
|
||||
*/
|
||||
public int getID() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.IProblem#isError()
|
||||
*/
|
||||
public boolean isError() {
|
||||
return isError;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.IProblem#isWarning()
|
||||
*/
|
||||
public boolean isWarning() {
|
||||
return isWarning;
|
||||
}
|
||||
|
||||
protected static final Map errorMessages;
|
||||
static {
|
||||
errorMessages = new HashMap();
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_UNIQUE_NAME_PREDEFINED),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.uniqueNamePredefined")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_NAME_NOT_FOUND),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.nameNotFound")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_NAME_NOT_PROVIDED),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.nameNotProvided")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_INVALID_CONVERSION_TYPE ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.invalidConversionType")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_MALFORMED_EXPRESSION ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.malformedExpression")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_AMBIGUOUS_LOOKUP ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.ambiguousLookup")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_INVALID_TYPE ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.invalidType")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_CIRCULAR_INHERITANCE ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.circularInheritance")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_INVALID_OVERLOAD ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.invalidOverload")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_INVALID_TEMPLATE ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.invalidTemplate")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_INVALID_USING ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.invalidUsing")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_BAD_VISIBILITY ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.badVisibility")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_UNABLE_TO_RESOLVE_FUNCTION ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.unableToResolveFunction")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_INVALID_TEMPLATE_ARGUMENT ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.invalidTemplateArgument")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_INVALID_TEMPLATE_PARAMETER ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.invalidTemplateParameter")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_REDECLARED_TEMPLATE_PARAMETER ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.redeclaredTemplateParameter")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SEMANTIC_RECURSIVE_TEMPLATE_INSTANTIATION ),
|
||||
ParserMessages.getString("ASTProblemFactory.error.semantic.pst.recursiveTemplateInstantiation")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_POUND_ERROR),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.inclusionNotFound")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_DEFINITION_NOT_FOUND),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.definitionNotFound")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_INVALID_MACRO_DEFN),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.invalidMacroDefn")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_INVALID_MACRO_REDEFN),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.invalidMacroRedefn")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_UNBALANCE_CONDITION),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.unbalancedConditional")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_CONDITIONAL_EVAL_ERROR),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.conditionalEval")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_MACRO_USAGE_ERROR),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.macroUsage")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_CIRCULAR_INCLUSION),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.circularInclusion")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_INVALID_DIRECTIVE),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.invalidDirective")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_MACRO_PASTING_ERROR),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.macroPasting")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_MISSING_RPAREN_PARMLIST),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.missingRParen")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.PREPROCESSOR_INVALID_VA_ARGS),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.invalidVaArgs")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_INVALID_ESCAPECHAR),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.invalidEscapeChar")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_UNBOUNDED_STRING),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.unboundedString")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_BAD_FLOATING_POINT),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.badFloatingPoint")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_BAD_HEX_FORMAT),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.badHexFormat")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_BAD_OCTAL_FORMAT),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.badOctalFormat")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_BAD_DECIMAL_FORMAT),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.badDecimalFormat")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_ASSIGNMENT_NOT_ALLOWED),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.assignmentNotAllowed")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_DIVIDE_BY_ZERO),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.divideByZero")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_MISSING_R_PAREN),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.missingRParen")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_EXPRESSION_SYNTAX_ERROR),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.expressionSyntaxError")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_ILLEGAL_IDENTIFIER),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.illegalIdentifier")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_BAD_CONDITIONAL_EXPRESSION),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.badConditionalExpression")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_UNEXPECTED_EOF),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.unexpectedEOF")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer(IProblem.SCANNER_BAD_CHARACTER),
|
||||
ParserMessages.getString("ScannerProblemFactory.error.scanner.badCharacter")); //$NON-NLS-1$
|
||||
errorMessages.put(
|
||||
new Integer( IProblem.SYNTAX_ERROR ),
|
||||
ParserMessages.getString( "ParserProblemFactory.error.syntax.syntaxError")); //$NON-NLS-1$
|
||||
}
|
||||
protected final static String PROBLEM_PATTERN = "BaseProblemFactory.problemPattern"; //$NON-NLS-1$
|
||||
|
||||
public String getMessage()
|
||||
{
|
||||
if( message != null )
|
||||
return message;
|
||||
|
||||
String msg = (String) errorMessages.get( new Integer(id) );
|
||||
if( msg == null )
|
||||
msg = ""; //$NON-NLS-1$
|
||||
|
||||
if( arg != null ){
|
||||
msg = MessageFormat.format( msg, new Object [] { new String(arg) } );
|
||||
}
|
||||
|
||||
Object [] args = new Object[] { msg, new String( "" ), new Integer( 0 ) }; //$NON-NLS-1$
|
||||
message = ParserMessages.getFormattedString( PROBLEM_PATTERN, args );
|
||||
return message;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.IProblem#checkCategory(int)
|
||||
*/
|
||||
public boolean checkCategory(int bitmask) {
|
||||
return ((id & bitmask) != 0 );
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.IProblem#getArguments()
|
||||
*/
|
||||
public String getArguments() {
|
||||
return arg != null ? String.valueOf(arg) : ""; //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTNode#getTranslationUnit()
|
||||
*/
|
||||
public IASTTranslationUnit getTranslationUnit() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -49,7 +49,6 @@ import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator;
|
|||
import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTTypeIdExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTUnaryExpression;
|
||||
import org.eclipse.cdt.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.core.parser.EndOfFileException;
|
||||
import org.eclipse.cdt.core.parser.IGCCToken;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
|
@ -59,6 +58,7 @@ import org.eclipse.cdt.core.parser.IToken;
|
|||
import org.eclipse.cdt.core.parser.OffsetLimitReachedException;
|
||||
import org.eclipse.cdt.core.parser.ParseError;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.internal.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.internal.core.parser.ParserProblemFactory;
|
||||
import org.eclipse.cdt.internal.core.parser.problem.IProblemFactory;
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ public class CASTNode extends ASTNode implements IASTNode {
|
|||
public IASTTranslationUnit getTranslationUnit() {
|
||||
if( this instanceof IASTTranslationUnit ) return (IASTTranslationUnit) this;
|
||||
IASTNode node = getParent();
|
||||
while( ! (node instanceof IASTTranslationUnit ))
|
||||
while( ! (node instanceof IASTTranslationUnit ) && node != null )
|
||||
{
|
||||
node = node.getParent();
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorIncludeStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
|
@ -40,6 +41,7 @@ public class CASTTranslationUnit extends CASTNode implements IASTTranslationUnit
|
|||
private static final IASTNodeLocation[] EMPTY_PREPROCESSOR_LOCATION_ARRAY = new IASTNodeLocation[0];
|
||||
private static final IASTMacroDefinition[] EMPTY_PREPROCESSOR_MACRODEF_ARRAY = new IASTMacroDefinition[0];
|
||||
private static final IASTPreprocessorIncludeStatement[] EMPTY_PREPROCESSOR_INCLUSION_ARRAY = new IASTPreprocessorIncludeStatement[0];
|
||||
private static final IASTProblem[] EMPTY_PROBLEM_ARRAY = new IASTProblem[0];
|
||||
|
||||
public void addDeclaration( IASTDeclaration d )
|
||||
{
|
||||
|
@ -187,4 +189,20 @@ public class CASTTranslationUnit extends CASTNode implements IASTTranslationUnit
|
|||
if( resolver != null ) resolver.cleanup();
|
||||
super.finalize();
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getPreprocesorProblems()
|
||||
*/
|
||||
public IASTProblem[] getPreprocesorProblems() {
|
||||
if( resolver == null ) return EMPTY_PROBLEM_ARRAY;
|
||||
IASTProblem [] result = resolver.getScannerProblems();
|
||||
for( int i = 0; i < result.length; ++i )
|
||||
{
|
||||
IASTProblem p = result[i];
|
||||
p.setParent( this );
|
||||
p.setPropertyInParent( IASTTranslationUnit.SCANNER_PROBLEM );
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,7 +80,6 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression;
|
|||
import org.eclipse.cdt.core.dom.ast.c.ICASTTypedefNameSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTArrayRangeDesignator;
|
||||
import org.eclipse.cdt.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.core.parser.EndOfFileException;
|
||||
import org.eclipse.cdt.core.parser.IGCCToken;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
|
@ -91,6 +90,7 @@ import org.eclipse.cdt.core.parser.ParserMode;
|
|||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.AbstractGNUSourceCodeParser;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.IProblemRequestor;
|
||||
import org.eclipse.cdt.internal.core.parser.BacktrackException;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
**********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTMacroDefinition;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
|
@ -18,6 +17,8 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorIncludeStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTranslationUnit;
|
||||
|
@ -31,36 +32,52 @@ import org.eclipse.cdt.internal.core.parser.scanner2.ILocationResolver;
|
|||
*/
|
||||
public class CPPASTTranslationUnit extends CPPASTNode implements
|
||||
ICPPASTTranslationUnit, IRequiresLocationInformation {
|
||||
private IASTDeclaration [] decls = null;
|
||||
private IASTDeclaration[] decls = null;
|
||||
|
||||
private ICPPNamespace binding = null;
|
||||
|
||||
private ICPPScope scope = null;
|
||||
|
||||
private static final int DEFAULT_CHILDREN_LIST_SIZE = 8;
|
||||
|
||||
private int currentIndex = 0;
|
||||
|
||||
private ILocationResolver resolver;
|
||||
|
||||
public void addDeclaration( IASTDeclaration d )
|
||||
{
|
||||
if( decls == null )
|
||||
{
|
||||
decls = new IASTDeclaration[ DEFAULT_CHILDREN_LIST_SIZE ];
|
||||
private static final IASTNode[] EMPTY_NODE_ARRAY = new IASTNode[0];
|
||||
|
||||
private static final IASTPreprocessorStatement[] EMPTY_PREPROCESSOR_STATEMENT_ARRAY = new IASTPreprocessorStatement[0];
|
||||
|
||||
private static final IASTNodeLocation[] EMPTY_PREPROCESSOR_LOCATION_ARRAY = new IASTNodeLocation[0];
|
||||
|
||||
private static final IASTMacroDefinition[] EMPTY_PREPROCESSOR_MACRODEF_ARRAY = new IASTMacroDefinition[0];
|
||||
|
||||
private static final IASTPreprocessorIncludeStatement[] EMPTY_PREPROCESSOR_INCLUSION_ARRAY = new IASTPreprocessorIncludeStatement[0];
|
||||
|
||||
private static final IASTProblem[] EMPTY_PROBLEM_ARRAY = new IASTProblem[0];
|
||||
|
||||
public void addDeclaration(IASTDeclaration d) {
|
||||
if (decls == null) {
|
||||
decls = new IASTDeclaration[DEFAULT_CHILDREN_LIST_SIZE];
|
||||
currentIndex = 0;
|
||||
}
|
||||
if( decls.length == currentIndex )
|
||||
{
|
||||
IASTDeclaration [] old = decls;
|
||||
decls = new IASTDeclaration[ old.length * 2 ];
|
||||
for( int i = 0; i < old.length; ++i )
|
||||
if (decls.length == currentIndex) {
|
||||
IASTDeclaration[] old = decls;
|
||||
decls = new IASTDeclaration[old.length * 2];
|
||||
for (int i = 0; i < old.length; ++i)
|
||||
decls[i] = old[i];
|
||||
}
|
||||
decls[ currentIndex++ ] = d;
|
||||
decls[currentIndex++] = d;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getDeclarations()
|
||||
*/
|
||||
public IASTDeclaration[] getDeclarations() {
|
||||
if( decls == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY;
|
||||
if (decls == null)
|
||||
return IASTDeclaration.EMPTY_DECLARATION_ARRAY;
|
||||
removeNullDeclarations();
|
||||
return decls;
|
||||
}
|
||||
|
@ -70,28 +87,33 @@ public class CPPASTTranslationUnit extends CPPASTNode implements
|
|||
*/
|
||||
private void removeNullDeclarations() {
|
||||
int nullCount = 0;
|
||||
for( int i = 0; i < decls.length; ++i )
|
||||
if( decls[i] == null )
|
||||
for (int i = 0; i < decls.length; ++i)
|
||||
if (decls[i] == null)
|
||||
++nullCount;
|
||||
if( nullCount == 0 ) return;
|
||||
IASTDeclaration [] old = decls;
|
||||
if (nullCount == 0)
|
||||
return;
|
||||
IASTDeclaration[] old = decls;
|
||||
int newSize = old.length - nullCount;
|
||||
decls = new IASTDeclaration[ newSize ];
|
||||
for( int i = 0; i < newSize; ++i )
|
||||
decls = new IASTDeclaration[newSize];
|
||||
for (int i = 0; i < newSize; ++i)
|
||||
decls[i] = old[i];
|
||||
currentIndex = newSize;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getScope()
|
||||
*/
|
||||
public IScope getScope() {
|
||||
if( scope == null )
|
||||
scope = new CPPNamespaceScope( this );
|
||||
if (scope == null)
|
||||
scope = new CPPNamespaceScope(this);
|
||||
return scope;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getDeclarations(org.eclipse.cdt.core.dom.ast.IBinding)
|
||||
*/
|
||||
public IASTDeclaration[] getDeclarations(IBinding b) {
|
||||
|
@ -99,7 +121,9 @@ public class CPPASTTranslationUnit extends CPPASTNode implements
|
|||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getReferences(org.eclipse.cdt.core.dom.ast.IBinding)
|
||||
*/
|
||||
public IASTName[] getReferences(IBinding b) {
|
||||
|
@ -107,77 +131,119 @@ public class CPPASTTranslationUnit extends CPPASTNode implements
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getLocationInfo(int)
|
||||
*/
|
||||
public IASTNodeLocation getLocationInfo(int offset) {
|
||||
if (resolver == null)
|
||||
return null;
|
||||
return resolver.getLocation(offset);
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getLocationInfo(int, int)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getLocationInfo(int,
|
||||
* int)
|
||||
*/
|
||||
public IASTNodeLocation[] getLocationInfo(int offset, int length) {
|
||||
return resolver.getLocations(offset,length);
|
||||
if (resolver == null)
|
||||
return EMPTY_PREPROCESSOR_LOCATION_ARRAY;
|
||||
return resolver.getLocations(offset, length);
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getNodeForLocation(org.eclipse.cdt.core.dom.ast.IASTNodeLocation)
|
||||
*/
|
||||
public IASTNode[] selectNodesForLocation(String path, int offset, int length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getMacroDefinitions()
|
||||
*/
|
||||
public IASTMacroDefinition[] getMacroDefinitions() {
|
||||
if (resolver == null)
|
||||
return EMPTY_PREPROCESSOR_MACRODEF_ARRAY;
|
||||
return resolver.getMacroDefinitions(this);
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getIncludeDirectives()
|
||||
*/
|
||||
public IASTPreprocessorIncludeStatement[] getIncludeDirectives() {
|
||||
if (resolver == null)
|
||||
return EMPTY_PREPROCESSOR_INCLUSION_ARRAY;
|
||||
return resolver.getIncludeDirectives(this);
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getAllPreprocessorStatements()
|
||||
*/
|
||||
public IASTPreprocessorStatement[] getAllPreprocessorStatements() {
|
||||
if (resolver == null)
|
||||
return EMPTY_PREPROCESSOR_STATEMENT_ARRAY;
|
||||
return resolver.getAllPreprocessorStatements(this);
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser2.IRequiresLocationInformation#setLocationResolver(org.eclipse.cdt.internal.core.parser.scanner2.ILocationResolver)
|
||||
*/
|
||||
public void setLocationResolver(ILocationResolver resolver) {
|
||||
this.resolver = resolver;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#selectNodesForLocation(int, int)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#selectNodesForLocation(int,
|
||||
* int)
|
||||
*/
|
||||
public IASTNode[] selectNodesForLocation(int offset, int length) {
|
||||
return selectNodesForLocation( resolver.getTranslationUnitPath(), offset, length ); //$NON-NLS-1$
|
||||
if (resolver == null)
|
||||
return EMPTY_NODE_ARRAY;
|
||||
return selectNodesForLocation(resolver.getTranslationUnitPath(),
|
||||
offset, length); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTranslationUnit#resolveBinding()
|
||||
*/
|
||||
public IBinding resolveBinding() {
|
||||
if( binding == null )
|
||||
binding = new CPPNamespace( this );
|
||||
if (binding == null)
|
||||
binding = new CPPNamespace(this);
|
||||
return binding;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getPreprocesorProblems()
|
||||
*/
|
||||
public IASTProblem[] getPreprocesorProblems() {
|
||||
if (resolver == null)
|
||||
return EMPTY_PROBLEM_ARRAY;
|
||||
IASTProblem[] result = resolver.getScannerProblems();
|
||||
for (int i = 0; i < result.length; ++i) {
|
||||
IASTProblem p = result[i];
|
||||
p.setParent(this);
|
||||
p.setPropertyInParent(IASTTranslationUnit.SCANNER_PROBLEM);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -115,7 +115,6 @@ import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTExplicitTemplateInstantiation
|
|||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTSimpleDeclSpecifier;
|
||||
import org.eclipse.cdt.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.core.parser.EndOfFileException;
|
||||
import org.eclipse.cdt.core.parser.IGCCToken;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
|
@ -129,6 +128,7 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
|||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.AbstractGNUSourceCodeParser;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.IProblemRequestor;
|
||||
import org.eclipse.cdt.internal.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.internal.core.parser.SimpleDeclarationStrategy;
|
||||
import org.eclipse.cdt.internal.core.parser.TemplateParameterManager;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
|
||||
|
|
|
@ -8,7 +8,9 @@
|
|||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.core.parser;
|
||||
package org.eclipse.cdt.internal.core.parser;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
|
@ -16,7 +16,6 @@ import java.util.Iterator;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
|
||||
|
|
|
@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.core.parser;
|
|||
import java.util.Hashtable;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.core.parser.EndOfFileException;
|
||||
import org.eclipse.cdt.core.parser.Enum;
|
||||
import org.eclipse.cdt.core.parser.IGCCToken;
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation */
|
||||
package org.eclipse.cdt.internal.core.parser;
|
||||
import org.eclipse.cdt.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.core.parser.EndOfFileException;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
|
|
|
@ -17,7 +17,6 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.eclipse.cdt.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.core.parser.EndOfFileException;
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
|
|
|
@ -18,7 +18,6 @@ import java.util.ArrayList;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.core.parser.GCCKeywords;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
|
@ -36,6 +35,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
|
||||
import org.eclipse.cdt.core.parser.ast.gcc.IASTGCCExpression;
|
||||
import org.eclipse.cdt.internal.core.parser.BacktrackException;
|
||||
import org.eclipse.cdt.internal.core.parser.DeclarationWrapper;
|
||||
import org.eclipse.cdt.internal.core.parser.Declarator;
|
||||
import org.eclipse.cdt.internal.core.parser.ast.GCCASTExtension;
|
||||
|
|
|
@ -2111,21 +2111,11 @@ abstract class BaseScanner implements IScanner {
|
|||
return newToken(tokenType, image );
|
||||
}
|
||||
|
||||
protected static final ScannerProblemFactory spf = new ScannerProblemFactory();
|
||||
|
||||
/**
|
||||
* @param scanner_bad_character
|
||||
*/
|
||||
protected void handleProblem(int id, int startOffset, char [] arg ) {
|
||||
if( parserMode == ParserMode.COMPLETION_PARSE ) return;
|
||||
IProblem p = spf.createProblem( id, startOffset, bufferPos[bufferStackPos], getLineNumber( bufferPos[bufferStackPos] ), getCurrentFilename(), arg != null ? arg : EMPTY_CHAR_ARRAY, false, true );
|
||||
pushProblem(p);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param p
|
||||
*/
|
||||
protected abstract void pushProblem(IProblem p);
|
||||
protected abstract void handleProblem(int id, int startOffset, char [] arg );
|
||||
|
||||
/**
|
||||
* @param i
|
||||
|
|
|
@ -12,15 +12,16 @@ package org.eclipse.cdt.internal.core.parser.scanner2;
|
|||
|
||||
|
||||
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||
import org.eclipse.cdt.core.parser.CodeReader;
|
||||
import org.eclipse.cdt.core.parser.IMacro;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFactory;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTProblem;
|
||||
import org.eclipse.cdt.internal.core.parser.token.ImagedExpansionToken;
|
||||
import org.eclipse.cdt.internal.core.parser.token.ImagedToken;
|
||||
import org.eclipse.cdt.internal.core.parser.token.SimpleExpansionToken;
|
||||
|
@ -59,7 +60,7 @@ public class DOMScanner extends BaseScanner {
|
|||
*/
|
||||
public DOMScanner(CodeReader reader, IScannerInfo info, ParserMode parserMode, ParserLanguage language, IParserLogService log, IScannerConfiguration configuration, ICodeReaderFactory readerFactory) {
|
||||
super(reader, info, parserMode, language, log, configuration);
|
||||
this.expressionEvaluator = new ExpressionEvaluator(null, spf);
|
||||
this.expressionEvaluator = new ExpressionEvaluator(null, null);
|
||||
this.codeReaderFactory = readerFactory;
|
||||
postConstructorSetup(reader, info);
|
||||
}
|
||||
|
@ -144,13 +145,6 @@ public class DOMScanner extends BaseScanner {
|
|||
return i;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#pushProblem(org.eclipse.cdt.core.parser.IProblem)
|
||||
*/
|
||||
protected void pushProblem(IProblem p) {
|
||||
locationMap.encounterProblem(p);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#quickParsePushPopInclusion(java.lang.Object)
|
||||
*/
|
||||
|
@ -182,4 +176,12 @@ public class DOMScanner extends BaseScanner {
|
|||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#handleProblem(int, int, char[])
|
||||
*/
|
||||
protected void handleProblem(int id, int startOffset, char[] arg) {
|
||||
IASTProblem problem = new ASTProblem(id, arg, true, false );
|
||||
locationMap.encounterProblem(problem);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorIncludeStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
|
@ -28,7 +28,7 @@ public interface ILocationResolver {
|
|||
|
||||
public IASTNodeLocation [] getLocations( int offset, int length );
|
||||
public IASTNodeLocation getLocation( int offset );
|
||||
public IProblem [] getScannerProblems();
|
||||
public IASTProblem[] getScannerProblems();
|
||||
|
||||
public String getTranslationUnitPath();
|
||||
public String [] getInclusionsPaths();
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
**********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser.scanner2;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
|
@ -57,5 +57,5 @@ public interface IScannerPreprocessorLog {
|
|||
|
||||
public void encounterPoundEndIf(int startOffset, int endOffset);
|
||||
|
||||
public void encounterProblem( IProblem problem );
|
||||
public void encounterProblem( IASTProblem problem );
|
||||
}
|
|
@ -19,7 +19,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorIncludeStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
|
@ -242,14 +242,14 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.ILocationResolver#getScannerProblems()
|
||||
*/
|
||||
public IProblem[] getScannerProblems() {
|
||||
return (IProblem[]) problems.toArray( new IProblem[ problems.size() ]);
|
||||
public IASTProblem[] getScannerProblems() {
|
||||
return (IASTProblem[]) problems.toArray( new IASTProblem[ problems.size() ]);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.IScannerPreprocessorLog#encounterIProblem(org.eclipse.cdt.core.parser.IProblem)
|
||||
*/
|
||||
public void encounterProblem(IProblem problem) {
|
||||
public void encounterProblem(IASTProblem problem) {
|
||||
if( problems == Collections.EMPTY_LIST )
|
||||
problems = new ArrayList( 4 );
|
||||
problems.add(problem);
|
||||
|
|
|
@ -50,7 +50,7 @@ public class Scanner2 extends BaseScanner {
|
|||
IScannerConfiguration configuration) {
|
||||
super(reader, info, parserMode, language, log, configuration);
|
||||
this.requestor = requestor;
|
||||
this.callbackManager = new ScannerCallbackManager( requestor );
|
||||
this.callbackManager = new ScannerCallbackManager(requestor);
|
||||
this.expressionEvaluator = new ExpressionEvaluator(callbackManager, spf);
|
||||
this.workingCopies = workingCopies;
|
||||
postConstructorSetup(reader, info);
|
||||
|
@ -68,9 +68,12 @@ public class Scanner2 extends BaseScanner {
|
|||
}
|
||||
|
||||
protected IASTFactory astFactory;
|
||||
//callbacks
|
||||
|
||||
// callbacks
|
||||
protected ScannerCallbackManager callbackManager;
|
||||
|
||||
protected ISourceElementRequestor requestor;
|
||||
|
||||
protected List workingCopies;
|
||||
|
||||
public final void setASTFactory(IASTFactory f) {
|
||||
|
@ -100,106 +103,153 @@ public class Scanner2 extends BaseScanner {
|
|||
*/
|
||||
protected void processMacro(char[] name, int startingOffset,
|
||||
int startingLineNumber, int idstart, int idend, int nameLine,
|
||||
int textEnd, int endingLine, org.eclipse.cdt.core.parser.IMacro macro) {
|
||||
int textEnd, int endingLine,
|
||||
org.eclipse.cdt.core.parser.IMacro macro) {
|
||||
callbackManager.pushCallback(getASTFactory().createMacro(name,
|
||||
startingOffset, startingLineNumber, idstart, idend, nameLine,
|
||||
textEnd, endingLine, getCurrentFilename(), !isInitialized));
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#pushInclusion(java.lang.Object)
|
||||
*/
|
||||
protected void pushInclusion(Object data) {
|
||||
callbackManager.pushCallback( data );
|
||||
callbackManager.pushCallback(data);
|
||||
super.pushInclusion(data);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#popInclusion()
|
||||
*/
|
||||
protected void popInclusion(java.lang.Object data) {
|
||||
super.popInclusion(data);
|
||||
callbackManager.pushCallback( ((InclusionData) bufferData[bufferStackPos]).inclusion );
|
||||
callbackManager
|
||||
.pushCallback(((InclusionData) bufferData[bufferStackPos]).inclusion);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#beforeSecondFetchToken()
|
||||
*/
|
||||
protected void beforeSecondFetchToken() {
|
||||
if( callbackManager.hasCallbacks() )
|
||||
if (callbackManager.hasCallbacks())
|
||||
callbackManager.popCallbacks();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#pushProblem(org.eclipse.cdt.core.parser.IProblem)
|
||||
*/
|
||||
protected void pushProblem(IProblem p) {
|
||||
callbackManager.pushCallback( p );
|
||||
callbackManager.pushCallback(p);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#quickParsePushPopInclusion(java.lang.Object)
|
||||
*/
|
||||
protected void quickParsePushPopInclusion(Object inclusion) {
|
||||
callbackManager.pushCallback( new InclusionData( null, inclusion ) );
|
||||
callbackManager.pushCallback( inclusion );
|
||||
callbackManager.pushCallback(new InclusionData(null, inclusion));
|
||||
callbackManager.pushCallback(inclusion);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#createReaderDuple(java.lang.String)
|
||||
*/
|
||||
protected CodeReader createReaderDuple(String finalPath) {
|
||||
return ScannerUtility.createReaderDuple( finalPath, requestor, getWorkingCopies() );
|
||||
return ScannerUtility.createReaderDuple(finalPath, requestor,
|
||||
getWorkingCopies());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.core.parser.IScanner#getLocationResolver()
|
||||
*/
|
||||
public ILocationResolver getLocationResolver() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner.IScannerData#getWorkingCopies()
|
||||
*/
|
||||
protected Iterator getWorkingCopies() {
|
||||
if( workingCopies == null ) return EmptyIterator.EMPTY_ITERATOR;
|
||||
if (workingCopies == null)
|
||||
return EmptyIterator.EMPTY_ITERATOR;
|
||||
return workingCopies.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
protected IToken newToken( int signal ) {
|
||||
if( bufferData[bufferStackPos] instanceof MacroData )
|
||||
{
|
||||
protected IToken newToken(int signal) {
|
||||
if (bufferData[bufferStackPos] instanceof MacroData) {
|
||||
int mostRelevant;
|
||||
for( mostRelevant = bufferStackPos; mostRelevant >= 0; --mostRelevant )
|
||||
if( bufferData[mostRelevant] instanceof InclusionData || bufferData[mostRelevant] instanceof CodeReader )
|
||||
for (mostRelevant = bufferStackPos; mostRelevant >= 0; --mostRelevant)
|
||||
if (bufferData[mostRelevant] instanceof InclusionData
|
||||
|| bufferData[mostRelevant] instanceof CodeReader)
|
||||
break;
|
||||
MacroData data = (MacroData)bufferData[mostRelevant + 1];
|
||||
return new SimpleExpansionToken( signal, data.startOffset, data.endOffset - data.startOffset + 1, getCurrentFilename(), getLineNumber( bufferPos[mostRelevant] + 1));
|
||||
MacroData data = (MacroData) bufferData[mostRelevant + 1];
|
||||
return new SimpleExpansionToken(signal, data.startOffset,
|
||||
data.endOffset - data.startOffset + 1,
|
||||
getCurrentFilename(),
|
||||
getLineNumber(bufferPos[mostRelevant] + 1));
|
||||
}
|
||||
return new SimpleToken(signal, bufferPos[bufferStackPos] + 1 , getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1) );
|
||||
return new SimpleToken(signal, bufferPos[bufferStackPos] + 1,
|
||||
getCurrentFilename(),
|
||||
getLineNumber(bufferPos[bufferStackPos] + 1));
|
||||
}
|
||||
|
||||
protected IToken newToken( int signal, char [] buffer )
|
||||
{
|
||||
if( bufferData[bufferStackPos] instanceof MacroData )
|
||||
{
|
||||
protected IToken newToken(int signal, char[] buffer) {
|
||||
if (bufferData[bufferStackPos] instanceof MacroData) {
|
||||
int mostRelevant;
|
||||
for( mostRelevant = bufferStackPos; mostRelevant >= 0; --mostRelevant )
|
||||
if( bufferData[mostRelevant] instanceof InclusionData || bufferData[mostRelevant] instanceof CodeReader )
|
||||
for (mostRelevant = bufferStackPos; mostRelevant >= 0; --mostRelevant)
|
||||
if (bufferData[mostRelevant] instanceof InclusionData
|
||||
|| bufferData[mostRelevant] instanceof CodeReader)
|
||||
break;
|
||||
MacroData data = (MacroData)bufferData[mostRelevant + 1];
|
||||
return new ImagedExpansionToken( signal, buffer, data.startOffset, data.endOffset - data.startOffset + 1, getCurrentFilename(), getLineNumber( bufferPos[mostRelevant] + 1));
|
||||
MacroData data = (MacroData) bufferData[mostRelevant + 1];
|
||||
return new ImagedExpansionToken(signal, buffer, data.startOffset,
|
||||
data.endOffset - data.startOffset + 1,
|
||||
getCurrentFilename(),
|
||||
getLineNumber(bufferPos[mostRelevant] + 1));
|
||||
}
|
||||
IToken i = new ImagedToken(signal, buffer, bufferPos[bufferStackPos] + 1 , getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1));
|
||||
if( buffer != null && buffer.length == 0 && signal != IToken.tSTRING && signal != IToken.tLSTRING )
|
||||
bufferPos[bufferStackPos] += 1; //TODO - remove this hack at some point
|
||||
IToken i = new ImagedToken(signal, buffer,
|
||||
bufferPos[bufferStackPos] + 1, getCurrentFilename(),
|
||||
getLineNumber(bufferPos[bufferStackPos] + 1));
|
||||
if (buffer != null && buffer.length == 0 && signal != IToken.tSTRING
|
||||
&& signal != IToken.tLSTRING)
|
||||
bufferPos[bufferStackPos] += 1; // TODO - remove this hack at some
|
||||
// point
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
protected static final ScannerProblemFactory spf = new ScannerProblemFactory();
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#handleProblem(int,
|
||||
* int, char[])
|
||||
*/
|
||||
protected void handleProblem(int id, int startOffset, char[] arg) {
|
||||
if (parserMode == ParserMode.COMPLETION_PARSE)
|
||||
return;
|
||||
IProblem p = spf.createProblem(id, startOffset,
|
||||
bufferPos[bufferStackPos],
|
||||
getLineNumber(bufferPos[bufferStackPos]), getCurrentFilename(),
|
||||
arg != null ? arg : EMPTY_CHAR_ARRAY, false, true);
|
||||
pushProblem(p);
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue