From 9c1746c42ab2393fc7def9868ee24d3eb1cfdb59 Mon Sep 17 00:00:00 2001 From: Mike Kucera Date: Thu, 4 Dec 2008 15:13:40 +0000 Subject: [PATCH] bug 256125 - Introduce factories for AST nodes. Freeze the AST returned by the parser. --- .../tests/ast2/CompleteParser2Tests.java | 4 +- .../eclipse/cdt/core/dom/ast/IASTNode.java | 9 + .../cdt/core/dom/ast/IASTTranslationUnit.java | 18 + .../cdt/core/dom/ast/INodeFactory.java | 119 +-- .../cdt/core/dom/ast/c/ICNodeFactory.java | 58 ++ .../cdt/core/dom/ast/cpp/ICPPNodeFactory.java | 157 +++ .../core/dom/parser/ISourceCodeParser.java | 5 +- .../core/dom/parser/ASTEnumerator.java | 2 + .../cdt/internal/core/dom/parser/ASTNode.java | 22 + .../core/dom/parser/ASTTranslationUnit.java | 10 + .../parser/AbstractGNUSourceCodeParser.java | 335 ++----- .../core/dom/parser/c/CASTASMDeclaration.java | 1 + .../dom/parser/c/CASTAmbiguousDeclarator.java | 5 + .../dom/parser/c/CASTAmbiguousExpression.java | 1 + .../c/CASTAmbiguousParameterDeclaration.java | 3 + .../dom/parser/c/CASTAmbiguousStatement.java | 1 + .../dom/parser/c/CASTArrayDeclarator.java | 1 + .../dom/parser/c/CASTArrayDesignator.java | 1 + .../core/dom/parser/c/CASTArrayModifier.java | 1 + .../parser/c/CASTArrayRangeDesignator.java | 2 + .../c/CASTArraySubscriptExpression.java | 2 + .../dom/parser/c/CASTBaseDeclSpecifier.java | 5 + .../dom/parser/c/CASTBinaryExpression.java | 3 + .../core/dom/parser/c/CASTCaseStatement.java | 1 + .../core/dom/parser/c/CASTCastExpression.java | 1 + .../parser/c/CASTCompositeTypeSpecifier.java | 3 + .../dom/parser/c/CASTCompoundStatement.java | 1 + .../c/CASTCompoundStatementExpression.java | 1 + .../parser/c/CASTConditionalExpression.java | 3 + .../parser/c/CASTDeclarationStatement.java | 1 + .../core/dom/parser/c/CASTDeclarator.java | 4 + .../parser/c/CASTDesignatedInitializer.java | 6 +- .../core/dom/parser/c/CASTDoStatement.java | 2 + .../parser/c/CASTElaboratedTypeSpecifier.java | 2 + .../parser/c/CASTEnumerationSpecifier.java | 2 + .../core/dom/parser/c/CASTExpressionList.java | 1 + .../dom/parser/c/CASTExpressionStatement.java | 1 + .../dom/parser/c/CASTFieldDeclarator.java | 1 + .../dom/parser/c/CASTFieldDesignator.java | 1 + .../core/dom/parser/c/CASTFieldReference.java | 3 + .../core/dom/parser/c/CASTForStatement.java | 4 + .../parser/c/CASTFunctionCallExpression.java | 2 + .../dom/parser/c/CASTFunctionDeclarator.java | 2 + .../dom/parser/c/CASTFunctionDefinition.java | 3 + .../core/dom/parser/c/CASTGotoStatement.java | 1 + .../core/dom/parser/c/CASTIdExpression.java | 1 + .../core/dom/parser/c/CASTIfStatement.java | 3 + .../parser/c/CASTInitializerExpression.java | 1 + .../dom/parser/c/CASTInitializerList.java | 1 + .../parser/c/CASTKnRFunctionDeclarator.java | 26 +- .../core/dom/parser/c/CASTLabelStatement.java | 2 + .../dom/parser/c/CASTLiteralExpression.java | 3 + .../parser/c/CASTModifiedArrayModifier.java | 5 + .../parser/c/CASTParameterDeclaration.java | 2 + .../core/dom/parser/c/CASTPointer.java | 3 + .../core/dom/parser/c/CASTProblemOwner.java | 1 + .../dom/parser/c/CASTReturnStatement.java | 1 + .../dom/parser/c/CASTSimpleDeclSpecifier.java | 8 + .../dom/parser/c/CASTSimpleDeclaration.java | 2 + .../dom/parser/c/CASTSwitchStatement.java | 2 + .../core/dom/parser/c/CASTTypeId.java | 2 + .../dom/parser/c/CASTTypeIdExpression.java | 2 + .../c/CASTTypeIdInitializerExpression.java | 2 + .../parser/c/CASTTypedefNameSpecifier.java | 1 + .../dom/parser/c/CASTUnaryExpression.java | 2 + .../core/dom/parser/c/CASTWhileStatement.java | 2 + .../core/dom/parser/c/CNodeFactory.java | 181 ++-- .../core/dom/parser/c/GNUCSourceParser.java | 540 ++--------- .../dom/parser/cpp/CPPASTASMDeclaration.java | 1 + .../cpp/CPPASTAmbiguousDeclaration.java | 1 + .../parser/cpp/CPPASTAmbiguousDeclarator.java | 5 + .../parser/cpp/CPPASTAmbiguousExpression.java | 1 + .../parser/cpp/CPPASTAmbiguousStatement.java | 1 + .../cpp/CPPASTAmbiguousTemplateArgument.java | 2 + .../dom/parser/cpp/CPPASTArrayDeclarator.java | 1 + .../dom/parser/cpp/CPPASTArrayModifier.java | 1 + .../cpp/CPPASTArraySubscriptExpression.java | 2 + .../parser/cpp/CPPASTBaseDeclSpecifier.java | 7 + .../dom/parser/cpp/CPPASTBaseSpecifier.java | 3 + .../parser/cpp/CPPASTBinaryExpression.java | 3 + .../dom/parser/cpp/CPPASTCaseStatement.java | 1 + .../dom/parser/cpp/CPPASTCastExpression.java | 2 + .../dom/parser/cpp/CPPASTCatchHandler.java | 3 + .../cpp/CPPASTCompositeTypeSpecifier.java | 4 + .../parser/cpp/CPPASTCompoundStatement.java | 1 + .../CPPASTCompoundStatementExpression.java | 1 + .../cpp/CPPASTConditionalExpression.java | 3 + .../CPPASTConstructorChainInitializer.java | 8 +- .../cpp/CPPASTConstructorInitializer.java | 1 + .../dom/parser/cpp/CPPASTConversionName.java | 1 + .../cpp/CPPASTDeclarationStatement.java | 1 + .../core/dom/parser/cpp/CPPASTDeclarator.java | 4 + .../parser/cpp/CPPASTDeleteExpression.java | 3 + .../dom/parser/cpp/CPPASTDoStatement.java | 2 + .../cpp/CPPASTElaboratedTypeSpecifier.java | 2 + .../cpp/CPPASTEnumerationSpecifier.java | 2 + .../CPPASTExplicitTemplateInstantiation.java | 1 + .../dom/parser/cpp/CPPASTExpressionList.java | 1 + .../parser/cpp/CPPASTExpressionStatement.java | 1 + .../dom/parser/cpp/CPPASTFieldDeclarator.java | 1 + .../dom/parser/cpp/CPPASTFieldReference.java | 14 +- .../dom/parser/cpp/CPPASTForStatement.java | 5 + .../cpp/CPPASTFunctionCallExpression.java | 2 + .../parser/cpp/CPPASTFunctionDeclarator.java | 8 + .../parser/cpp/CPPASTFunctionDefinition.java | 4 + .../cpp/CPPASTFunctionWithTryBlock.java | 1 + .../dom/parser/cpp/CPPASTGotoStatement.java | 1 + .../dom/parser/cpp/CPPASTIdExpression.java | 1 + .../dom/parser/cpp/CPPASTIfStatement.java | 4 + .../cpp/CPPASTInitializerExpression.java | 1 + .../dom/parser/cpp/CPPASTInitializerList.java | 1 + .../dom/parser/cpp/CPPASTLabelStatement.java | 2 + .../cpp/CPPASTLinkageSpecification.java | 2 + .../parser/cpp/CPPASTLiteralExpression.java | 3 + .../core/dom/parser/cpp/CPPASTName.java | 1 + .../parser/cpp/CPPASTNamedTypeSpecifier.java | 5 +- .../dom/parser/cpp/CPPASTNamespaceAlias.java | 2 + .../parser/cpp/CPPASTNamespaceDefinition.java | 2 + .../dom/parser/cpp/CPPASTNewExpression.java | 6 + .../dom/parser/cpp/CPPASTOperatorName.java | 8 +- .../cpp/CPPASTParameterDeclaration.java | 2 + .../core/dom/parser/cpp/CPPASTPointer.java | 2 + .../dom/parser/cpp/CPPASTPointerToMember.java | 1 + .../parser/cpp/CPPASTProblemDeclaration.java | 11 +- .../parser/cpp/CPPASTProblemExpression.java | 11 +- .../dom/parser/cpp/CPPASTProblemOwner.java | 1 + .../parser/cpp/CPPASTProblemStatement.java | 12 +- .../dom/parser/cpp/CPPASTProblemTypeId.java | 1 + .../dom/parser/cpp/CPPASTQualifiedName.java | 3 + .../dom/parser/cpp/CPPASTReturnStatement.java | 1 + .../parser/cpp/CPPASTSimpleDeclSpecifier.java | 5 + .../parser/cpp/CPPASTSimpleDeclaration.java | 2 + ...CPPASTSimpleTypeConstructorExpression.java | 2 + .../CPPASTSimpleTypeTemplateParameter.java | 3 + .../dom/parser/cpp/CPPASTSwitchStatement.java | 3 + .../parser/cpp/CPPASTTemplateDeclaration.java | 3 + .../core/dom/parser/cpp/CPPASTTemplateId.java | 4 + .../cpp/CPPASTTemplateSpecialization.java | 3 + .../CPPASTTemplatedTypeTemplateParameter.java | 3 + .../parser/cpp/CPPASTTryBlockStatement.java | 2 + .../core/dom/parser/cpp/CPPASTTypeId.java | 2 + .../parser/cpp/CPPASTTypeIdExpression.java | 2 + .../parser/cpp/CPPASTTypenameExpression.java | 3 + .../dom/parser/cpp/CPPASTUnaryExpression.java | 2 + .../parser/cpp/CPPASTUsingDeclaration.java | 2 + .../dom/parser/cpp/CPPASTUsingDirective.java | 1 + .../dom/parser/cpp/CPPASTVisibilityLabel.java | 1 + .../dom/parser/cpp/CPPASTWhileStatement.java | 3 + .../core/dom/parser/cpp/CPPNodeFactory.java | 319 +++--- .../dom/parser/cpp/GNUCPPSourceParser.java | 906 ++++-------------- .../GPPASTExplicitTemplateInstantiation.java | 11 +- .../dom/parser/cpp/GPPASTPointerToMember.java | 11 +- .../core/dom/rewrite/ASTLiteralNode.java | 4 + .../core/pdom/dom/PDOMASTAdapter.java | 5 + .../extractfunction/ExtractExpression.java | 6 +- .../lrparser/action/BuildASTParserAction.java | 36 +- .../action/c99/C99BuildASTParserAction.java | 53 +- .../action/c99/IC99ASTNodeFactory.java | 61 -- .../action/cpp/CPPBuildASTParserAction.java | 75 +- .../action/cpp/ICPPASTNodeFactory.java | 150 --- .../core/dom/lrparser/c99/C99Language.java | 4 +- .../core/dom/lrparser/cpp/ISOCPPLanguage.java | 4 +- .../dom/lrparser/c99/C99ExpressionParser.java | 4 +- .../c99/C99NoCastExpressionParser.java | 4 +- .../core/dom/lrparser/c99/C99Parser.java | 4 +- .../c99/C99SizeofExpressionParser.java | 4 +- .../dom/lrparser/cpp/CPPExpressionParser.java | 4 +- .../cpp/CPPNoCastExpressionParser.java | 4 +- .../cpp/CPPNoFunctionDeclaratorParser.java | 4 +- .../core/dom/lrparser/cpp/CPPParser.java | 4 +- .../cpp/CPPSizeofExpressionParser.java | 4 +- .../cpp/CPPTemplateTypeParameterParser.java | 4 +- .../dom/parser/upc/UPCASTNodeFactory.java | 22 +- .../eclipse/cdt/core/dom/upc/UPCLanguage.java | 4 +- .../dom/parser/upc/UPCExpressionParser.java | 2 +- .../parser/upc/UPCNoCastExpressionParser.java | 2 +- .../core/dom/parser/upc/UPCParser.java | 2 +- .../parser/upc/UPCSizeofExpressionParser.java | 2 +- .../upc/ast/UPCASTTypedefNameSpecifier.java | 6 + 179 files changed, 1434 insertions(+), 2130 deletions(-) rename lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/IASTNodeFactory.java => core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/INodeFactory.java (52%) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java rename lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99ASTNodeFactory.java => core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java (59%) rename lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPASTNodeFactory.java => core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java (50%) delete mode 100644 lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/IC99ASTNodeFactory.java delete mode 100644 lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/ICPPASTNodeFactory.java diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java index e7f3eb5cfba..0457f584c95 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java @@ -2019,8 +2019,8 @@ public class CompleteParser2Tests extends BaseTestCase { writer.write("void foo() "); //$NON-NLS-1$ writer.write("{ "); //$NON-NLS-1$ writer.write(" if (0) { } "); //$NON-NLS-1$ - writer.write(" /* 5,000 else if's. */ "); //$NON-NLS-1$ - writer.write(" THOU THOU THOU THOU THOU "); //$NON-NLS-1$ + writer.write(" /* 3,000 else if's. */ "); //$NON-NLS-1$ + writer.write(" THOU THOU THOU "); //$NON-NLS-1$ writer.write("} "); //$NON-NLS-1$ parse( writer.toString() ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java index fef8fd81eee..64835ded59e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java @@ -184,4 +184,13 @@ public interface IASTNode { * @since 5.1 */ public IToken getTrailingSyntax() throws ExpansionOverlapsBoundaryException, UnsupportedOperationException; + + + /** + * Returns true if this node is frozen, false otherwise. + * If the node is frozen then any attempt to call a method that changes + * the node's state will result in an IllegalStateException. + * @since 5.1 + */ + public boolean isFrozen(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTranslationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTranslationUnit.java index 3f6fb9b453f..fa6d3ab262b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTranslationUnit.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTranslationUnit.java @@ -274,4 +274,22 @@ public interface IASTTranslationUnit extends IASTNode, IAdaptable { * Sets whether this ast represents a header file. */ public void setIsHeaderUnit(boolean headerUnit); + + /** + * Returns the node factory that was used to build the AST. + * + * @noreference This method is not intended to be referenced by clients. + * @since 5.1 + */ + public INodeFactory getASTNodeFactory(); + + /** + * Causes this node and all the nodes rooted at this node to become immutable. + * Once the AST is frozen any calls to set or add methods on any of the nodes + * in the AST will result in an IllegalStateException. + * + * @noreference This method is not intended to be referenced by clients. + * @since 5.1 + */ + public void freeze(); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/IASTNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/INodeFactory.java similarity index 52% rename from lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/IASTNodeFactory.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/INodeFactory.java index 4b43b75ee16..25f9fd4c58a 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/IASTNodeFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/INodeFactory.java @@ -8,78 +8,47 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.core.dom.lrparser.action; +package org.eclipse.cdt.core.dom.ast; -import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; -import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; -import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; -import org.eclipse.cdt.core.dom.ast.IASTBreakStatement; -import org.eclipse.cdt.core.dom.ast.IASTCaseStatement; -import org.eclipse.cdt.core.dom.ast.IASTCastExpression; -import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; -import org.eclipse.cdt.core.dom.ast.IASTConditionalExpression; -import org.eclipse.cdt.core.dom.ast.IASTContinueStatement; -import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; -import org.eclipse.cdt.core.dom.ast.IASTDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTDeclarationStatement; -import org.eclipse.cdt.core.dom.ast.IASTDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTDefaultStatement; -import org.eclipse.cdt.core.dom.ast.IASTDoStatement; -import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; -import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; -import org.eclipse.cdt.core.dom.ast.IASTExpression; -import org.eclipse.cdt.core.dom.ast.IASTExpressionList; -import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; -import org.eclipse.cdt.core.dom.ast.IASTFieldDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTForStatement; -import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression; -import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; -import org.eclipse.cdt.core.dom.ast.IASTGotoStatement; -import org.eclipse.cdt.core.dom.ast.IASTIdExpression; -import org.eclipse.cdt.core.dom.ast.IASTIfStatement; -import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression; -import org.eclipse.cdt.core.dom.ast.IASTInitializerList; -import org.eclipse.cdt.core.dom.ast.IASTLabelStatement; -import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNullStatement; -import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTProblem; -import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTProblemExpression; -import org.eclipse.cdt.core.dom.ast.IASTProblemStatement; -import org.eclipse.cdt.core.dom.ast.IASTReturnStatement; -import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTStatement; -import org.eclipse.cdt.core.dom.ast.IASTSwitchStatement; -import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; -import org.eclipse.cdt.core.dom.ast.IASTTypeId; -import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression; -import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; -import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement; +import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; /** - * Abstract factory interface for creating AST node objects. + * Factory for creating AST nodes. This interface contains factory methods + * for nodes that are available for both C and C++. + * + * Extending interfaces should use covariant return types where appropriate to + * allow the construction of language-specific versions of certain nodes. + * + * Most methods accept child nodes as parameters when constructing a new node. + * For convenience it is always allowed to pass null for any of these parameters. + * In this case the newly constructed node may be initialized using its + * set() and add() methods instead. + * + * Nodes created by this factory are not frozen, i.e. for any node created by this + * factory the following holds node.isFrozen() == false . + * + * None of the factory methods should return null. * * @author Mike Kucera + * @since 5.1 */ -@SuppressWarnings("restriction") -public interface IASTNodeFactory { - - public IASTName newName(char[] name); +public interface INodeFactory { + /** + * Creates a "dummy" name using an empty char array. + */ public IASTName newName(); - - // TODO this should return IASTCompletionNode - public ASTCompletionNode newCompletionNode(String prefix, IASTTranslationUnit tu); + + public IASTName newName(char[] name); + + /** + * Calling the method getASTNodeFactory() on the translation unit returned by this + * method will return the node factory that was used to create the IASTTranslationUnit. + */ + public IASTTranslationUnit newTranslationUnit(); + public IASTLiteralExpression newLiteralExpression(int kind, String rep); @@ -111,7 +80,7 @@ public interface IASTNodeFactory { public IASTCompoundStatement newCompoundStatement(); - public IASTSwitchStatement newSwitchStatment(IASTExpression controller, IASTStatement body); + public IASTSwitchStatement newSwitchStatement(IASTExpression controller, IASTStatement body); public IASTIfStatement newIfStatement(IASTExpression condition, IASTStatement then, IASTStatement elseClause); @@ -146,18 +115,16 @@ public interface IASTNodeFactory { public IASTFunctionDefinition newFunctionDefinition(IASTDeclSpecifier declSpecifier, IASTFunctionDeclarator declarator, IASTStatement bodyStatement); - - public IASTTranslationUnit newTranslationUnit(); public IASTStandardFunctionDeclarator newFunctionDeclarator(IASTName name); public IASTASMDeclaration newASMDeclaration(String assembly); - public IASTProblemDeclaration newProblemDeclaration(); + public IASTProblemDeclaration newProblemDeclaration(IASTProblem problem); - public IASTProblemStatement newProblemStatement(); + public IASTProblemStatement newProblemStatement(IASTProblem problem); - public IASTProblemExpression newProblemExpression(); + public IASTProblemExpression newProblemExpression(IASTProblem problem); public IASTProblem newProblem(int id, char[] arg, boolean error); @@ -174,11 +141,17 @@ public interface IASTNodeFactory { public IASTParameterDeclaration newParameterDeclaration(IASTDeclSpecifier declSpec, IASTDeclarator declarator); public IASTFieldDeclarator newFieldDeclarator(IASTName name, IASTExpression bitFieldSize); - - public IASTAmbiguousStatement newAmbiguousStatement(IASTStatement... statements); - - public IASTAmbiguousExpression newAmbiguousExpression(IASTExpression... expressions); - public IASTDeclSpecifier newSimpleDeclSpecifier(); + public IASTSimpleDeclSpecifier newSimpleDeclSpecifier(); + public IGNUASTCompoundStatementExpression newGNUCompoundStatementExpression(IASTCompoundStatement compoundStatement); + + public IASTPointer newPointer(); + + public IASTFieldReference newFieldReference(IASTName name, IASTExpression owner); + + public IASTNamedTypeSpecifier newTypedefNameSpecifier(IASTName name); + + public IASTCompositeTypeSpecifier newCompositeTypeSpecifier(int key, IASTName name); + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java new file mode 100644 index 00000000000..272b1c8772b --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2006, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.core.dom.ast.c; + +import org.eclipse.cdt.core.dom.ast.IASTDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.ast.IASTInitializer; +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IASTTypeId; +import org.eclipse.cdt.core.dom.ast.INodeFactory; +import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; +import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTArrayRangeDesignator; +import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTSimpleDeclSpecifier; + +/** + * Factory for AST nodes for the C programming language. + * + * @author Mike Kucera + * @since 5.1 + */ +public interface ICNodeFactory extends INodeFactory { + + public ICASTEnumerationSpecifier newEnumerationSpecifier(IASTName name); + + public ICASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name); + + public ICASTSimpleDeclSpecifier newSimpleDeclSpecifier(); + + public ICASTPointer newPointer(); + + public ICASTTypedefNameSpecifier newTypedefNameSpecifier(IASTName name); + + public ICASTCompositeTypeSpecifier newCompositeTypeSpecifier(int key, IASTName name); + + public ICASTArrayModifier newModifiedArrayModifier(IASTExpression expr); + + public ICASTTypeIdInitializerExpression newTypeIdInitializerExpression(IASTTypeId typeId, IASTInitializer initializer); + + public ICASTKnRFunctionDeclarator newKnRFunctionDeclarator(IASTName[] parameterNames, IASTDeclaration[] parameterDeclarations); + + public ICASTDesignatedInitializer newDesignatedInitializer(IASTInitializer rhs); + + public ICASTArrayDesignator newArrayDesignator(IASTExpression exp); + + public ICASTFieldDesignator newFieldDesignator(IASTName name); + + public IGCCASTArrayRangeDesignator newArrayRangeDesignatorGCC(IASTExpression floor, IASTExpression ceiling); + + public IGCCASTSimpleDeclSpecifier newSimpleDeclSpecifierGCC(IASTExpression typeofExpression); +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java new file mode 100644 index 00000000000..4eb258ccd8f --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java @@ -0,0 +1,157 @@ +/******************************************************************************* + * Copyright (c) 2006, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.core.dom.ast.cpp; + +import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; +import org.eclipse.cdt.core.dom.ast.IASTDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTDeclarator; +import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IASTProblem; +import org.eclipse.cdt.core.dom.ast.IASTProblemTypeId; +import org.eclipse.cdt.core.dom.ast.IASTStatement; +import org.eclipse.cdt.core.dom.ast.IASTTypeId; +import org.eclipse.cdt.core.dom.ast.INodeFactory; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; +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; + +/** + * Factory for AST nodes for the C++ programming language. + * + * @author Mike Kucera + * @since 5.1 + */ +public interface ICPPNodeFactory extends INodeFactory { + + public ICPPASTTranslationUnit newTranslationUnit(); + + public ICPPASTLiteralExpression newLiteralExpression(int kind, String rep); + + public ICPPASTUnaryExpression newUnaryExpression(int operator, IASTExpression operand); + + public ICPPASTCastExpression newCastExpression(int operator, IASTTypeId typeId, IASTExpression operand); + + public ICPPASTBinaryExpression newBinaryExpression(int op, IASTExpression expr1, IASTExpression expr2); + + public ICPPASTTypeIdExpression newTypeIdExpression(int operator, IASTTypeId typeId); + + public ICPPASTFunctionDefinition newFunctionDefinition(IASTDeclSpecifier declSpecifier, + IASTFunctionDeclarator declarator, IASTStatement bodyStatement); + + public ICPPASTFunctionDeclarator newFunctionDeclarator(IASTName name); + + public ICPPASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name); + + public ICPPASTParameterDeclaration newParameterDeclaration(IASTDeclSpecifier declSpec, IASTDeclarator declarator); + + public ICPPASTSimpleDeclSpecifier newSimpleDeclSpecifier(); + + public ICPPASTOperatorName newOperatorName(char[] name); + + public ICPPASTNewExpression newNewExpression(IASTExpression placement, IASTExpression initializer, IASTTypeId typeId); + + public ICPPASTFieldReference newFieldReference(IASTName name, IASTExpression owner); + + public ICPPASTTemplateId newTemplateId(IASTName templateName); + + public ICPPASTConversionName newConversionName(char[] name, IASTTypeId typeId); + + public ICPPASTQualifiedName newQualifiedName(); + + public ICPPASTSwitchStatement newSwitchStatement(IASTExpression controlloer, IASTStatement body); + + public ICPPASTSwitchStatement newSwitchStatement(IASTDeclaration controller, IASTStatement body); + + public ICPPASTSwitchStatement newSwitchStatement(); + + public ICPPASTIfStatement newIfStatement(IASTExpression condition, IASTStatement then, IASTStatement elseClause); + + public ICPPASTIfStatement newIfStatement(IASTDeclaration condition, IASTStatement then, IASTStatement elseClause); + + public ICPPASTIfStatement newIfStatement(); + + public ICPPASTForStatement newForStatement(IASTStatement init, IASTExpression condition, + IASTExpression iterationExpression, IASTStatement body); + + public ICPPASTForStatement newForStatement(IASTStatement init, IASTDeclaration condition, + IASTExpression iterationExpression, IASTStatement body); + + public ICPPASTForStatement newForStatement(); + + public ICPPASTWhileStatement newWhileStatement(IASTExpression condition, IASTStatement body); + + public ICPPASTWhileStatement newWhileStatement(IASTDeclaration condition, IASTStatement body); + + public ICPPASTWhileStatement newWhileStatement(); + + public ICPPASTDeleteExpression newDeleteExpression(IASTExpression operand); + + public IGPPASTSimpleDeclSpecifier newSimpleDeclSpecifierGPP(); + + public ICPPASTSimpleTypeConstructorExpression newSimpleTypeConstructorExpression(int type, IASTExpression expression); + + public ICPPASTTypenameExpression newTypenameExpression(IASTName qualifiedName, IASTExpression expr, boolean isTemplate); + + public ICPPASTNamespaceAlias newNamespaceAlias(IASTName alias, IASTName qualifiedName); + + public ICPPASTUsingDeclaration newUsingDeclaration(IASTName name); + + public ICPPASTUsingDirective newUsingDirective(IASTName name); + + public ICPPASTLinkageSpecification newLinkageSpecification(String literal); + + public ICPPASTNamespaceDefinition newNamespaceDefinition(IASTName name); + + public ICPPASTTemplateDeclaration newTemplateDeclaration(IASTDeclaration declaration); + + public ICPPASTExplicitTemplateInstantiation newExplicitTemplateInstantiation(IASTDeclaration declaration); + + public IGPPASTExplicitTemplateInstantiation newExplicitTemplateInstantiationGPP(IASTDeclaration declaration); + + public ICPPASTTemplateSpecialization newTemplateSpecialization(IASTDeclaration declaration); + + public ICPPASTTryBlockStatement newTryBlockStatement(IASTStatement body); + + public ICPPASTCatchHandler newCatchHandler(IASTDeclaration decl, IASTStatement body); + + public ICPPASTVisibilityLabel newVisibilityLabel(int visibility); + + public ICPPASTBaseSpecifier newBaseSpecifier(IASTName name, int visibility, boolean isVirtual); + + public ICPPASTCompositeTypeSpecifier newCompositeTypeSpecifier(int key, IASTName name); + + public ICPPASTNamedTypeSpecifier newTypedefNameSpecifier(IASTName name); + + public IGPPASTPointer newPointerGPP(); + + public ICPPASTReferenceOperator newReferenceOperator(); + + public ICPPASTPointerToMember newPointerToMember(IASTName name); + + public IGPPASTPointerToMember newPointerToMemberGPP(IASTName name); + + public ICPPASTConstructorInitializer newConstructorInitializer(IASTExpression exp); + + public ICPPASTConstructorChainInitializer newConstructorChainInitializer(IASTName memberInitializerId, IASTExpression initializerValue); + + public ICPPASTFunctionWithTryBlock newFunctionTryBlock(IASTDeclSpecifier declSpecifier, IASTFunctionDeclarator declarator, + IASTStatement bodyStatement); + + public ICPPASTSimpleTypeTemplateParameter newSimpleTypeTemplateParameter(int type, IASTName name, IASTTypeId typeId); + + public ICPPASTTemplatedTypeTemplateParameter newTemplatedTypeTemplateParameter(IASTName name, IASTExpression defaultValue); + + public IASTProblemTypeId newProblemTypeId(IASTProblem problem); +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/ISourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/ISourceCodeParser.java index f04e226e97a..d2dcd59c37b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/ISourceCodeParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/ISourceCodeParser.java @@ -32,8 +32,11 @@ public interface ISourceCodeParser { /** * Compute an abstract syntax tree (AST). - * @return the AST, should not return null * + * The returned AST is frozen, any attempt modify any of the nodes in + * the AST will result in an IllegalStateException. + * + * @return the AST, should not return null * @throws ParseError if parsing has been cancelled or for other reasons */ public IASTTranslationUnit parse(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java index 5ace2107853..5bf0a5e1a7e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java @@ -37,6 +37,7 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -49,6 +50,7 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I } public void setValue(IASTExpression expression) { + assertNotFrozen(); this.value = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java index 654cc157be7..7a9e425e827 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java @@ -40,6 +40,8 @@ public abstract class ASTNode implements IASTNode { private int length; private int offset; + private boolean frozen = false; + public IASTNode getParent() { return parent; } @@ -48,8 +50,27 @@ public abstract class ASTNode implements IASTNode { ChildCollector collector= new ChildCollector(this); return collector.getChildren(); } + + public boolean isFrozen() { + return frozen; + } + + public void freeze() { + frozen = true; + for(IASTNode child : getChildren()) { + if(child != null) { + ((ASTNode)child).freeze(); + } + } + } + protected void assertNotFrozen() throws IllegalStateException { + if(frozen) + throw new IllegalStateException("attempt to modify frozen AST node"); //$NON-NLS-1$ + } + public void setParent(IASTNode node) { + assertNotFrozen(); this.parent = node; } @@ -58,6 +79,7 @@ public abstract class ASTNode implements IASTNode { } public void setPropertyInParent(ASTNodeProperty property) { + assertNotFrozen(); this.property = property; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTranslationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTranslationUnit.java index 44ee8087166..af48519d648 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTranslationUnit.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTranslationUnit.java @@ -30,6 +30,7 @@ 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.IMacroBinding; +import org.eclipse.cdt.core.dom.ast.INodeFactory; import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.index.IIndexFile; import org.eclipse.cdt.core.index.IIndexFileSet; @@ -58,6 +59,7 @@ public abstract class ASTTranslationUnit extends ASTNode implements IASTTranslat private IIndex fIndex; private boolean fIsHeader= true; private IIndexFileSet fIndexFileSet; + private INodeFactory fNodeFactory; @Override public final IASTTranslationUnit getTranslationUnit() { @@ -280,6 +282,14 @@ public abstract class ASTTranslationUnit extends ASTNode implements IASTTranslat } } + public final INodeFactory getASTNodeFactory() { + return fNodeFactory; + } + + public final void setASTNodeFactory(INodeFactory nodeFactory) { + this.fNodeFactory = nodeFactory; + } + public final IASTComment[] getComments() { if (fLocationResolver != null) { return fLocationResolver.getComments(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java index 6147883c605..0edabcf9813 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java @@ -62,6 +62,7 @@ import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; +import org.eclipse.cdt.core.dom.ast.INodeFactory; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider; @@ -76,6 +77,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.core.parser.util.CharArrayUtils; import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor; import org.eclipse.cdt.internal.core.parser.scanner.ILocationResolver; @@ -146,9 +148,12 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { protected ASTCompletionNode completionNode; protected IASTTypeId fTypeIdForCastAmbiguity; + + private final INodeFactory nodeFactory; protected AbstractGNUSourceCodeParser(IScanner scanner, IParserLogService logService, ParserMode parserMode, + INodeFactory nodeFactory, boolean supportStatementsInExpressions, boolean supportTypeOfUnaries, boolean supportAlignOfUnaries, boolean supportKnRC, boolean supportAttributeSpecifiers, @@ -164,6 +169,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { this.supportAttributeSpecifiers = supportAttributeSpecifiers; this.supportDeclspecSpecifiers = supportDeclspecSpecifiers; this.builtinBindingsProvider= builtinBindingsProvider; + this.nodeFactory = nodeFactory; } /** @@ -436,26 +442,28 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return result; } - protected abstract IASTProblem createProblem(int signal, int offset, int length); + + protected final IASTProblem createProblem(int signal, int offset, int length) { + IASTProblem result = nodeFactory.newProblem(signal, CharArrayUtils.EMPTY, true); + ((ASTNode) result).setOffsetAndLength(offset, length); + return result; + } + protected void logThrowable(String methodName, Throwable e) { if (e != null) { if (log.isTracing()) { - StringBuffer buffer = new StringBuffer(); - buffer.append("Parser: Unexpected throwable in "); //$NON-NLS-1$ - buffer.append(methodName); - buffer.append(":"); //$NON-NLS-1$ - buffer.append(e.getClass().getName()); - buffer.append("::"); //$NON-NLS-1$ - buffer.append(e.getMessage()); - buffer.append(". w/"); //$NON-NLS-1$ - buffer.append(scanner.toString()); - log.traceLog(buffer.toString()); + String message = + String.format("Parser: Unexpected throwable in %s:%s::%s. w/%s", //$NON-NLS-1$ + methodName, e.getClass().getName(), e.getMessage(), scanner); + log.traceLog(message); } log.traceException(e); } } + + @Override public String toString() { return scanner.toString(); @@ -468,17 +476,10 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { protected void logException(String methodName, Exception e) { if (!(e instanceof EndOfFileException) && e != null) { if (log.isTracing()) { - StringBuffer buffer = new StringBuffer(); - buffer.append("Parser: Unexpected exception in "); //$NON-NLS-1$ - buffer.append(methodName); - buffer.append(":"); //$NON-NLS-1$ - buffer.append(e.getClass().getName()); - buffer.append("::"); //$NON-NLS-1$ - buffer.append(e.getMessage()); - buffer.append(". w/"); //$NON-NLS-1$ - buffer.append(scanner.toString()); - log.traceLog(buffer.toString()); - // log.errorLog(buffer.toString()); + String message = + String.format("Parser: Unexpected exception in %s:%s::%s. w/%s", //$NON-NLS-1$ + methodName, e.getClass().getName(), e.getMessage(), scanner); + log.traceLog(message); } log.traceException(e); } @@ -510,6 +511,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { ); IASTTranslationUnit result = getTranslationUnit(); nullifyTranslationUnit(); + result.freeze(); // make the AST immutable return result; } @@ -552,7 +554,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { declarationMark= null; int endOffset = skipToSemiOrClosingBrace(offset, false); IASTProblem problem= createProblem(IProblem.SYNTAX_ERROR, offset, endOffset-offset); - return createProblemDeclaration(problem); + return buildProblemDeclaration(problem); } protected IASTProblemStatement skipProblemStatement(int offset) { @@ -560,7 +562,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { declarationMark= null; int endOffset = skipToSemiOrClosingBrace(offset, false); IASTProblem problem= createProblem(IProblem.SYNTAX_ERROR, offset, endOffset-offset); - return createProblemStatement(problem); + return buildProblemStatement(problem); } private IASTProblem skipProblemEnumerator(int offset) { @@ -651,7 +653,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { endOffset= eofOffset; } IASTProblem problem= createProblem(IProblem.SYNTAX_ERROR, offset, endOffset-offset); - return createProblemExpression(problem); + return buildProblemExpression(problem); } /** @@ -659,7 +661,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { * @throws BacktrackException */ protected IASTCompoundStatement compoundStatement() throws EndOfFileException, BacktrackException { - IASTCompoundStatement result = createCompoundStatement(); + IASTCompoundStatement result = nodeFactory.newCompoundStatement(); if (LT(1) == IToken.tEOC) return result; @@ -714,27 +716,21 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return result; } - protected abstract IASTProblemStatement createProblemStatement(); - protected abstract IASTProblemDeclaration createProblemDeclaration(); - protected abstract IASTCompoundStatement createCompoundStatement(); - private IASTProblemDeclaration createProblemDeclaration(IASTProblem problem) { - IASTProblemDeclaration pd = createProblemDeclaration(); - pd.setProblem(problem); + private IASTProblemDeclaration buildProblemDeclaration(IASTProblem problem) { + IASTProblemDeclaration pd = nodeFactory.newProblemDeclaration(problem); ((ASTNode) pd).setOffsetAndLength(((ASTNode) problem)); return pd; } - private IASTProblemStatement createProblemStatement(IASTProblem problem) { - IASTProblemStatement pstmt = createProblemStatement(); - pstmt.setProblem(problem); + private IASTProblemStatement buildProblemStatement(IASTProblem problem) { + IASTProblemStatement pstmt = nodeFactory.newProblemStatement(problem); ((ASTNode) pstmt).setOffsetAndLength(((ASTNode) problem)); return pstmt; } - private IASTProblemExpression createProblemExpression(IASTProblem problem) { - IASTProblemExpression pexpr = createProblemExpression(); - pexpr.setProblem(problem); + private IASTProblemExpression buildProblemExpression(IASTProblem problem) { + IASTProblemExpression pexpr = nodeFactory.newProblemExpression(problem); ((ASTNode) pexpr).setOffsetAndLength(((ASTNode) problem)); return pexpr; } @@ -753,21 +749,16 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { compoundStatement = compoundStatement(); int lastOffset = consume(IToken.tRPAREN).getEndOffset(); - IGNUASTCompoundStatementExpression resultExpression = createCompoundStatementExpression(); + IGNUASTCompoundStatementExpression resultExpression = nodeFactory.newGNUCompoundStatementExpression(compoundStatement); ((ASTNode) resultExpression).setOffsetAndLength(startingOffset, lastOffset - startingOffset); - if (compoundStatement != null) { - resultExpression.setCompoundStatement(compoundStatement); - } - return resultExpression; } - protected abstract IGNUASTCompoundStatementExpression createCompoundStatementExpression(); protected IASTExpression possiblyEmptyExpressionList(int endToken) throws BacktrackException, EndOfFileException { IToken la1= LA(1); if (la1.getType() == endToken) { - IASTExpressionList expressionList = createExpressionList(); + IASTExpressionList expressionList = nodeFactory.newExpressionList(); ((ASTNode) expressionList).setOffsetAndLength(la1.getOffset(), 0); return expressionList; } @@ -781,7 +772,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { if (LT(1) != IToken.tCOMMA) return assignmentExpression; - IASTExpressionList expressionList = createExpressionList(); + IASTExpressionList expressionList = nodeFactory.newExpressionList(); ((ASTNode) expressionList).setOffset(startingOffset); expressionList.addExpression(assignmentExpression); @@ -796,7 +787,6 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return expressionList; } - protected abstract IASTExpressionList createExpressionList(); protected abstract IASTExpression assignmentExpression() throws BacktrackException, EndOfFileException; @@ -873,9 +863,8 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { backup(mark); try { IASTExpression expr= primaryExpression(); - IASTFunctionCallExpression fcall= createFunctionCallExpression(); - fcall.setFunctionNameExpression(expr); - IASTAmbiguousExpression ambiguity= createAmbiguousCastVsFunctionCallExpression(result, fcall); + IASTFunctionCallExpression fcall = nodeFactory.newFunctionCallExpression(expr, null); + IASTAmbiguousExpression ambiguity = createAmbiguousCastVsFunctionCallExpression(result, fcall); ((ASTNode) ambiguity).setOffsetAndLength((ASTNode) result); return ambiguity; } catch (BacktrackException bt) { @@ -898,8 +887,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { protected abstract IASTExpression unaryExpression() throws BacktrackException, EndOfFileException; protected abstract IASTExpression primaryExpression() throws BacktrackException, EndOfFileException; - protected abstract IASTExpression buildTypeIdExpression(int op, - IASTTypeId typeId, int startingOffset, int endingOffset); + protected abstract IASTExpression buildTypeIdExpression(int op, IASTTypeId typeId, int startingOffset, int endingOffset); protected abstract IASTTranslationUnit getTranslationUnit(); @@ -968,8 +956,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return conditionalExpression(); } - protected IASTExpression logicalOrExpression() throws BacktrackException, - EndOfFileException { + protected IASTExpression logicalOrExpression() throws BacktrackException, EndOfFileException { IASTExpression firstExpression = logicalAndExpression(); while (LT(1) == IToken.tOR) { consume(); @@ -981,8 +968,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return firstExpression; } - protected IASTExpression logicalAndExpression() throws BacktrackException, - EndOfFileException { + protected IASTExpression logicalAndExpression() throws BacktrackException, EndOfFileException { IASTExpression firstExpression = inclusiveOrExpression(); while (LT(1) == IToken.tAND) { consume(); @@ -994,8 +980,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return firstExpression; } - protected IASTExpression inclusiveOrExpression() throws BacktrackException, - EndOfFileException { + protected IASTExpression inclusiveOrExpression() throws BacktrackException, EndOfFileException { IASTExpression firstExpression = exclusiveOrExpression(); while (LT(1) == IToken.tBITOR) { consume(); @@ -1007,8 +992,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return firstExpression; } - protected IASTExpression exclusiveOrExpression() throws BacktrackException, - EndOfFileException { + protected IASTExpression exclusiveOrExpression() throws BacktrackException, EndOfFileException { IASTExpression firstExpression = andExpression(); while (LT(1) == IToken.tXOR) { consume(); @@ -1036,16 +1020,14 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return firstExpression; } - protected IASTExpression equalityExpression() throws EndOfFileException, - BacktrackException { + protected IASTExpression equalityExpression() throws EndOfFileException, BacktrackException { IASTExpression firstExpression = relationalExpression(); for (;;) { switch (LT(1)) { case IToken.tEQUAL: case IToken.tNOTEQUAL: IToken t = consume(); - int operator = ((t.getType() == IToken.tEQUAL) ? IASTBinaryExpression.op_equals - : IASTBinaryExpression.op_notequals); + int operator = ((t.getType() == IToken.tEQUAL) ? IASTBinaryExpression.op_equals : IASTBinaryExpression.op_notequals); IASTExpression secondExpression = relationalExpression(); firstExpression = buildBinaryExpression(operator, firstExpression, secondExpression, @@ -1057,31 +1039,21 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { } } - protected IASTExpression buildBinaryExpression(int operator, - IASTExpression firstExpression, IASTExpression secondExpression, - int lastOffset) { - IASTBinaryExpression result = createBinaryExpression(); - result.setOperator(operator); - int o = ((ASTNode) firstExpression).getOffset(); + protected IASTExpression buildBinaryExpression(int operator, IASTExpression expr1, IASTExpression expr2, int lastOffset) { + IASTBinaryExpression result = nodeFactory.newBinaryExpression(operator, expr1, expr2); + int o = ((ASTNode) expr1).getOffset(); ((ASTNode) result).setOffsetAndLength(o, lastOffset - o); - result.setOperand1(firstExpression); - result.setOperand2(secondExpression); return result; } - protected abstract IASTBinaryExpression createBinaryExpression(); - protected abstract IASTFunctionCallExpression createFunctionCallExpression(); - - protected IASTExpression shiftExpression() throws BacktrackException, - EndOfFileException { + protected IASTExpression shiftExpression() throws BacktrackException, EndOfFileException { IASTExpression firstExpression = additiveExpression(); for (;;) { switch (LT(1)) { case IToken.tSHIFTL: case IToken.tSHIFTR: IToken t = consume(); - int operator = t.getType() == IToken.tSHIFTL ? IASTBinaryExpression.op_shiftLeft - : IASTBinaryExpression.op_shiftRight; + int operator = t.getType() == IToken.tSHIFTL ? IASTBinaryExpression.op_shiftLeft : IASTBinaryExpression.op_shiftRight; IASTExpression secondExpression = additiveExpression(); firstExpression = buildBinaryExpression(operator, firstExpression, secondExpression, @@ -1113,8 +1085,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { final int offset= consume().getOffset(); final IASTTypeId typeid= fTypeIdForCastAmbiguity; fTypeIdForCastAmbiguity= null; IASTExpression secondExpression = multiplicativeExpression(); - result = buildBinaryExpression(operator, result, secondExpression, - calculateEndOffset(secondExpression)); + result = buildBinaryExpression(operator, result, secondExpression, calculateEndOffset(secondExpression)); if (typeid != null) { result = createCastVsBinaryExpressionAmbiguity((IASTBinaryExpression) result, typeid, unaryOperator, offset); } @@ -1154,17 +1125,15 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { private IASTExpression createCastVsBinaryExpressionAmbiguity(IASTBinaryExpression expr, final IASTTypeId typeid, int unaryOperator, int unaryOpOffset) { - IASTUnaryExpression unary= createUnaryExpression(); - unary.setOperator(unaryOperator); + IASTUnaryExpression unary= nodeFactory.newUnaryExpression(unaryOperator, null); ((ASTNode) unary).setOffset(unaryOpOffset); - IASTCastExpression castExpr= buildCastExpression(IASTCastExpression.op_cast, typeid, unary, 0, 0); + IASTCastExpression castExpr = buildCastExpression(IASTCastExpression.op_cast, typeid, unary, 0, 0); IASTExpression result= createAmbiguousBinaryVsCastExpression(expr, castExpr); ((ASTNode) result).setOffsetAndLength((ASTNode) expr); return result; } - protected IASTExpression conditionalExpression() throws BacktrackException, - EndOfFileException { + protected IASTExpression conditionalExpression() throws BacktrackException, EndOfFileException { IASTExpression firstExpression = logicalOrExpression(); if (LT(1) == IToken.tQUESTION) { consume(); @@ -1179,11 +1148,8 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { thirdExpression = assignmentExpression(); } - IASTConditionalExpression result = createConditionalExpression(); - result.setLogicalConditionExpression(firstExpression); - result.setPositiveResultExpression(secondExpression); + IASTConditionalExpression result = nodeFactory.newConditionalExpession(firstExpression, secondExpression, thirdExpression); if (thirdExpression != null) { - result.setNegativeResultExpression(thirdExpression); ((ASTNode) result).setOffsetAndLength(((ASTNode) firstExpression) .getOffset(), calculateEndOffset(thirdExpression) - ((ASTNode) firstExpression).getOffset()); @@ -1194,8 +1160,6 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return firstExpression; } - protected abstract IASTConditionalExpression createConditionalExpression(); - protected IASTExpression unarayExpression(int operator) throws EndOfFileException, BacktrackException { final IToken operatorToken= consume(); final IASTExpression operand= castExpression(); @@ -1216,21 +1180,18 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { } protected IASTExpression buildUnaryExpression(int operator, IASTExpression operand, int offset, int lastOffset) { - IASTUnaryExpression result = createUnaryExpression(); + IASTUnaryExpression result = nodeFactory.newUnaryExpression(operator, operand); setRange(result, offset, lastOffset); - result.setOperator(operator); - result.setOperand(operand); return result; } - protected abstract IASTUnaryExpression createUnaryExpression(); protected IASTStatement handleFunctionBody() throws BacktrackException, EndOfFileException { declarationMark= null; if (mode == ParserMode.QUICK_PARSE || mode == ParserMode.STRUCTURAL_PARSE) { IToken curr = LA(1); IToken last = skipOverCompoundStatement(); - IASTCompoundStatement cs = createCompoundStatement(); + IASTCompoundStatement cs = nodeFactory.newCompoundStatement(); ((ASTNode) cs).setOffsetAndLength(curr.getOffset(), last.getEndOffset() - curr.getOffset()); return cs; } else if (mode == ParserMode.COMPLETION_PARSE || mode == ParserMode.SELECTION_PARSE) { @@ -1238,7 +1199,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return functionBody(); IToken curr = LA(1); IToken last = skipOverCompoundStatement(); - IASTCompoundStatement cs = createCompoundStatement(); + IASTCompoundStatement cs = nodeFactory.newCompoundStatement(); ((ASTNode) cs).setOffsetAndLength(curr.getOffset(), last.getEndOffset() - curr.getOffset()); return cs; } @@ -1309,7 +1270,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { if (LT(1) == IToken.tIDENTIFIER) { name= createName(identifier()); } else { - name= createName(); + name= nodeFactory.newName(); } if (LT(1) != IToken.tLBRACE) { @@ -1317,8 +1278,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { throwBacktrack(mark); } - final IASTEnumerationSpecifier result= createEnumerationSpecifier(); - result.setName(name); + final IASTEnumerationSpecifier result= nodeFactory.newEnumerationSpecifier(name); boolean needComma= false; int endOffset= consume().getEndOffset(); // IToken.tLBRACE @@ -1348,9 +1308,8 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { if (needComma) throw backtrack; - final IASTEnumerator enumerator= createEnumerator(); final IASTName etorName= createName(identifier()); - enumerator.setName(etorName); + final IASTEnumerator enumerator= nodeFactory.newEnumerator(etorName, null); endOffset= calculateEndOffset(etorName); setRange(enumerator, problemOffset, endOffset); result.addEnumerator(enumerator); @@ -1380,12 +1339,6 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { protected abstract IASTStatement statement() throws EndOfFileException, BacktrackException; - protected abstract IASTEnumerator createEnumerator(); - - protected abstract IASTEnumerationSpecifier createEnumerationSpecifier(); - - protected abstract IASTName createName(); - protected abstract IASTName createName(IToken token); protected IASTExpression condition(boolean followedByParenthesis) throws BacktrackException, EndOfFileException { @@ -1412,51 +1365,6 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return !parsePassed; } - protected abstract IASTSimpleDeclaration createSimpleDeclaration(); - - protected abstract IASTNamedTypeSpecifier createNamedTypeSpecifier(); - - - protected abstract IASTDeclarationStatement createDeclarationStatement(); - - - protected abstract IASTExpressionStatement createExpressionStatement(); - - - protected abstract IASTFunctionDefinition createFunctionDefinition(); - - - protected abstract IASTLabelStatement createLabelStatement(); - - - protected abstract IASTNullStatement createNullStatement(); - - - protected abstract IASTGotoStatement createGoToStatement(); - - - protected abstract IASTReturnStatement createReturnStatement(); - - - protected abstract IASTContinueStatement createContinueStatement(); - - - protected abstract IASTBreakStatement createBreakStatement(); - - - protected abstract IASTDoStatement createDoStatement(); - - - protected abstract IASTWhileStatement createWhileStatement(); - - - protected abstract IASTIdExpression createIdExpression(); - - - protected abstract IASTDefaultStatement createDefaultStatement(); - - - protected abstract IASTCaseStatement createCaseStatement(); protected abstract IASTDeclaration declaration(DeclarationOptions option) throws BacktrackException, EndOfFileException; protected abstract IASTDeclSpecifier declSpecifierSeq(DeclarationOptions option) throws BacktrackException, EndOfFileException, FoundDeclaratorException, FoundAggregateInitializer; @@ -1469,7 +1377,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { IASTNode n= bt.getNodeBeforeProblem(); if (n instanceof IASTDeclaration) { declarationMark= null; - return new IASTDeclaration[] {(IASTDeclaration) n, createProblemDeclaration(origProblem)}; + return new IASTDeclaration[] {(IASTDeclaration) n, buildProblemDeclaration(origProblem)}; } if (declarationMark != null) { @@ -1498,7 +1406,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { n= bt.getNodeBeforeProblem(); if (n instanceof IASTDeclaration) { decl= (IASTDeclaration) n; - trailingProblem= createProblemDeclaration(bt.getProblem()); + trailingProblem= buildProblemDeclaration(bt.getProblem()); break; } } catch (EndOfFileException e) { @@ -1511,7 +1419,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { if (decl != null) { IASTProblem problem= createProblem(IProblem.SYNTAX_ERROR, offset, endOffset-offset); - IASTDeclaration pd= createProblemDeclaration(problem); + IASTDeclaration pd= buildProblemDeclaration(problem); if (trailingProblem != null) return new IASTDeclaration[] {pd, decl, trailingProblem}; return new IASTDeclaration[] {pd, decl}; @@ -1521,8 +1429,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return new IASTDeclaration[] {skipProblemDeclaration(offset)}; } - protected IASTDeclaration asmDeclaration() throws EndOfFileException, - BacktrackException { + protected IASTDeclaration asmDeclaration() throws EndOfFileException, BacktrackException { final int offset= consume().getOffset(); // t_asm if (LT(1) == IToken.t_volatile) { consume(); @@ -1570,16 +1477,12 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { if (dtor instanceof IASTFunctionDeclarator == false) throwBacktrack(offset, LA(1).getEndOffset() - offset); - IASTFunctionDefinition funcDefinition = createFunctionDefinition(); - funcDefinition.setDeclSpecifier(declSpec); - funcDefinition.setDeclarator((IASTFunctionDeclarator) fdtor); - final int compoundOffset= LA(1).getOffset(); final int endOffset= skipOverCompoundStatement().getEndOffset(); - IASTCompoundStatement cs = createCompoundStatement(); + IASTCompoundStatement cs = nodeFactory.newCompoundStatement(); //createCompoundStatement(); ((ASTNode)cs).setOffsetAndLength(compoundOffset, endOffset - compoundOffset); - funcDefinition.setBody(cs); + IASTFunctionDefinition funcDefinition = nodeFactory.newFunctionDefinition(declSpec, (IASTFunctionDeclarator)fdtor, cs); ((ASTNode) funcDefinition).setOffsetAndLength(offset, endOffset - offset); return funcDefinition; @@ -1617,33 +1520,19 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return t; } - protected IASTASMDeclaration buildASMDirective(int offset, String assembly, - int lastOffset) { - IASTASMDeclaration result = createASMDirective(); + protected IASTASMDeclaration buildASMDirective(int offset, String assembly, int lastOffset) { + IASTASMDeclaration result = nodeFactory.newASMDeclaration(assembly); ((ASTNode) result).setOffsetAndLength(offset, lastOffset - offset); - result.setAssembly(assembly); return result; } - protected abstract IASTASMDeclaration createASMDirective(); - - - protected IASTCastExpression buildCastExpression(int op, IASTTypeId typeId, IASTExpression operand, - int offset, int endOffset) { - IASTCastExpression result = createCastExpression(); - result.setOperator(op); + protected IASTCastExpression buildCastExpression(int op, IASTTypeId typeId, IASTExpression operand, int offset, int endOffset) { + IASTCastExpression result = nodeFactory.newCastExpression(op, typeId, operand); ((ASTNode) result).setOffsetAndLength(offset, endOffset - offset); - result.setTypeId(typeId); - if (operand != null) { // which it can be in a completion - result.setOperand(operand); - } return result; } - - protected abstract IASTCastExpression createCastExpression(); - /** * There are many ambiguities in C and C++ between expressions and declarations. @@ -1663,8 +1552,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { lastTokenOfExpression = consume(); else lastTokenOfExpression = consume(IToken.tSEMI); - expressionStatement = createExpressionStatement(); - expressionStatement.setExpression(expression); + expressionStatement = nodeFactory.newExpressionStatement(expression); ((ASTNode) expressionStatement).setOffsetAndLength(mark.getOffset(), lastTokenOfExpression.getEndOffset() - mark.getOffset()); } catch (BacktrackException b) { } @@ -1675,8 +1563,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { IASTDeclarationStatement ds = null; try { IASTDeclaration d = declaration(option); - ds = createDeclarationStatement(); - ds.setDeclaration(d); + ds = nodeFactory.newDeclarationStatement(d); ((ASTNode) ds).setOffsetAndLength(((ASTNode) d).getOffset(), ((ASTNode) d).getLength()); } catch (BacktrackException b) { backup(mark); @@ -1778,50 +1665,43 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { protected abstract IASTAmbiguousStatement createAmbiguousStatement(); - protected IASTStatement parseLabelStatement() throws EndOfFileException, - BacktrackException { + protected IASTStatement parseLabelStatement() throws EndOfFileException, BacktrackException { IToken labelName = consume(); // tIDENTIFIER consume(); // tCOLON IASTStatement nestedStatement = statement(); int lastOffset = calculateEndOffset( nestedStatement ); - IASTLabelStatement label_statement = createLabelStatement(); - ((ASTNode) label_statement).setOffsetAndLength(labelName.getOffset(), - lastOffset - labelName.getOffset()); IASTName name = createName(labelName); - label_statement.setName(name); - label_statement.setNestedStatement(nestedStatement); + + IASTLabelStatement label_statement = nodeFactory.newLabelStatement(name, nestedStatement); + ((ASTNode) label_statement).setOffsetAndLength(labelName.getOffset(), lastOffset - labelName.getOffset()); return label_statement; } - protected IASTStatement parseNullStatement() throws EndOfFileException, - BacktrackException { + protected IASTStatement parseNullStatement() throws EndOfFileException, BacktrackException { IToken t = consume(); // tSEMI - IASTNullStatement null_statement = createNullStatement(); + IASTNullStatement null_statement = nodeFactory.newNullStatement(); ((ASTNode) null_statement).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return null_statement; } - protected IASTStatement parseGotoStatement() throws EndOfFileException, - BacktrackException { + protected IASTStatement parseGotoStatement() throws EndOfFileException, BacktrackException { int startOffset = consume().getOffset(); // t_goto IToken identifier = consume(IToken.tIDENTIFIER); int lastOffset = consume(IToken.tSEMI).getEndOffset(); IASTName goto_label_name = createName(identifier); - IASTGotoStatement goto_statement = createGoToStatement(); + IASTGotoStatement goto_statement = nodeFactory.newGotoStatement(goto_label_name); ((ASTNode) goto_statement).setOffsetAndLength(startOffset, lastOffset - startOffset); - goto_statement.setName(goto_label_name); return goto_statement; } - protected IASTStatement parseBreakStatement() throws EndOfFileException, - BacktrackException { + protected IASTStatement parseBreakStatement() throws EndOfFileException, BacktrackException { int startOffset = consume().getOffset(); // t_break int lastOffset = consume(IToken.tSEMI).getEndOffset(); - IASTBreakStatement break_statement = createBreakStatement(); + IASTBreakStatement break_statement = nodeFactory.newBreakStatement(); ((ASTNode) break_statement).setOffsetAndLength(startOffset, lastOffset - startOffset); return break_statement; } @@ -1835,7 +1715,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return stmt; // bug 105334, switch without compound statement - IASTCompoundStatement comp= createCompoundStatement(); + IASTCompoundStatement comp= nodeFactory.newCompoundStatement(); ((ASTNode) comp).setOffsetAndLength((ASTNode) stmt); comp.addStatement(stmt); @@ -1847,18 +1727,16 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { return comp; } - protected IASTStatement parseContinueStatement() throws EndOfFileException, - BacktrackException { + protected IASTStatement parseContinueStatement() throws EndOfFileException, BacktrackException { int startOffset = consume().getOffset(); // t_continue int lastOffset = consume(IToken.tSEMI).getEndOffset(); - IASTContinueStatement continue_statement = createContinueStatement(); + IASTContinueStatement continue_statement = nodeFactory.newContinueStatement(); ((ASTNode) continue_statement).setOffsetAndLength(startOffset, lastOffset - startOffset); return continue_statement; } - protected IASTStatement parseReturnStatement() throws EndOfFileException, - BacktrackException { + protected IASTStatement parseReturnStatement() throws EndOfFileException, BacktrackException { int startOffset; startOffset = consume().getOffset(); // t_return IASTExpression result = null; @@ -1868,8 +1746,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { case IToken.tEOC: // We're trying to start one IASTName name = createName(LA(1)); - IASTIdExpression idExpr = createIdExpression(); - idExpr.setName(name); + IASTIdExpression idExpr = nodeFactory.newIdExpression(name); result = idExpr; break; case IToken.tSEMI: @@ -1891,12 +1768,8 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { throwBacktrack(LA(1)); } - IASTReturnStatement return_statement = createReturnStatement(); - ((ASTNode) return_statement).setOffsetAndLength(startOffset, lastOffset - - startOffset); - if (result != null) { - return_statement.setReturnValue(result); - } + IASTReturnStatement return_statement = nodeFactory.newReturnStatement(result); + ((ASTNode) return_statement).setOffsetAndLength(startOffset, lastOffset - startOffset); return return_statement; } @@ -1931,15 +1804,8 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { throw backtrack; } - - IASTDoStatement do_statement = createDoStatement(); + IASTDoStatement do_statement = nodeFactory.newDoStatement(do_body, do_condition); ((ASTNode) do_statement).setOffsetAndLength(startOffset, lastOffset - startOffset); - do_statement.setBody(do_body); - - if (do_condition != null) { - do_statement.setCondition(do_condition); - } - return do_statement; } @@ -1960,12 +1826,10 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { if (LT(1) != IToken.tEOC) while_body = statement(); - IASTWhileStatement while_statement = createWhileStatement(); + IASTWhileStatement while_statement = nodeFactory.newWhileStatement(while_condition, while_body); ((ASTNode) while_statement).setOffsetAndLength(startOffset, (while_body != null ? calculateEndOffset(while_body) : LA(1).getEndOffset()) - startOffset); - while_statement.setCondition(while_condition); - while_statement.setBody(while_body); - + return while_statement; } @@ -1996,7 +1860,6 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { } } - protected abstract IASTProblemExpression createProblemExpression(); protected IASTStatement parseCompoundStatement() throws EndOfFileException, BacktrackException { IASTCompoundStatement compound = compoundStatement(); @@ -2007,7 +1870,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { int startOffset = consume().getOffset(); // t_default int lastOffset = consume(IToken.tCOLON).getEndOffset(); - IASTDefaultStatement df = createDefaultStatement(); + IASTDefaultStatement df = nodeFactory.newDefaultStatement(); ((ASTNode) df).setOffsetAndLength(startOffset, lastOffset - startOffset); return df; } @@ -2033,9 +1896,8 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { throwBacktrack(LA(1)); } - IASTCaseStatement cs = createCaseStatement(); + IASTCaseStatement cs = nodeFactory.newCaseStatement(caseExpression); ((ASTNode) cs).setOffsetAndLength(startOffset, lastOffset - startOffset); - cs.setExpression(caseExpression); return cs; } @@ -2047,8 +1909,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { } - protected int figureEndOffset(IASTDeclSpecifier declSpecifier, - IASTDeclarator declarator) { + protected int figureEndOffset(IASTDeclSpecifier declSpecifier, IASTDeclarator declarator) { if (declarator == null || ((ASTNode) declarator).getLength() == 0) return calculateEndOffset(declSpecifier); return calculateEndOffset(declarator); @@ -2087,7 +1948,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { expr= buildTypeIdExpression(IASTTypeIdExpression.op_typeof, typeid, typeidOffset, calculateEndOffset(typeid)); - IASTExpressionList expressionList = createExpressionList(); + IASTExpressionList expressionList = nodeFactory.newExpressionList(); ((ASTNode) expressionList).setOffsetAndLength(typeidOffset, calculateEndOffset(expr2)-typeidOffset); expressionList.addExpression(expr); if (expr2 instanceof IASTExpressionList) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTASMDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTASMDeclaration.java index 3e24f8bb9c0..62888525d3b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTASMDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTASMDeclaration.java @@ -35,6 +35,7 @@ public class CASTASMDeclaration extends ASTNode implements IASTASMDeclaration { } public void setAssembly(String assembly) { + assertNotFrozen(); this.assembly = assembly.toCharArray(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousDeclarator.java index 3d5372d5242..d79f577c9e0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousDeclarator.java @@ -40,6 +40,7 @@ public class CASTAmbiguousDeclarator extends CASTAmbiguity implements IASTAmbigu } public void addDeclarator(IASTDeclarator d) { + assertNotFrozen(); if (d != null) { dtors = (IASTDeclarator[]) ArrayUtil.append(IASTDeclarator.class, dtors, ++dtorPos, d); d.setParent(this); @@ -78,18 +79,22 @@ public class CASTAmbiguousDeclarator extends CASTAmbiguity implements IASTAmbigu } public void addPointerOperator(IASTPointerOperator operator) { + assertNotFrozen(); Assert.isLegal(false); } public void setInitializer(IASTInitializer initializer) { + assertNotFrozen(); Assert.isLegal(false); } public void setName(IASTName name) { + assertNotFrozen(); Assert.isLegal(false); } public void setNestedDeclarator(IASTDeclarator nested) { + assertNotFrozen(); Assert.isLegal(false); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousExpression.java index aa52a1f41e0..6346bdc250b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousExpression.java @@ -36,6 +36,7 @@ public class CASTAmbiguousExpression extends CASTAmbiguity implements IASTAmbigu } public void addExpression(IASTExpression e) { + assertNotFrozen(); if (e != null) { expressions = (IASTExpression[]) ArrayUtil.append( IASTExpression.class, expressions, ++expressionsPos, e ); e.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousParameterDeclaration.java index 3dcc41174a7..a4cda4fc8cc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousParameterDeclaration.java @@ -36,6 +36,7 @@ public class CASTAmbiguousParameterDeclaration extends CASTAmbiguity implements } public void addParameterDeclaration(IASTParameterDeclaration d) { + assertNotFrozen(); if (d != null) { paramDecls = (IASTParameterDeclaration[]) ArrayUtil.append(IASTParameterDeclaration.class, paramDecls, ++declPos, d); d.setParent(this); @@ -62,10 +63,12 @@ public class CASTAmbiguousParameterDeclaration extends CASTAmbiguity implements } public void setDeclSpecifier(IASTDeclSpecifier declSpec) { + assertNotFrozen(); Assert.isLegal(false); } public void setDeclarator(IASTDeclarator declarator) { + assertNotFrozen(); Assert.isLegal(false); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousStatement.java index d0267a03e1c..8cfb5f6f734 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousStatement.java @@ -31,6 +31,7 @@ public class CASTAmbiguousStatement extends CASTAmbiguity implements public void addStatement(IASTStatement s) { + assertNotFrozen(); if (s != null) { stmts = (IASTStatement[]) ArrayUtil.append( IASTStatement.class, stmts, ++stmtsPos, s ); s.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDeclarator.java index 20801745928..443e9bc414a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDeclarator.java @@ -45,6 +45,7 @@ public class CASTArrayDeclarator extends CASTDeclarator implements IASTArrayDecl } public void addArrayModifier(IASTArrayModifier arrayModifier) { + assertNotFrozen(); if (arrayModifier != null) { arrayModifier.setParent(this); arrayModifier.setPropertyInParent(ARRAY_MODIFIER); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDesignator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDesignator.java index 75d1f1e41c3..1916818e067 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDesignator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDesignator.java @@ -42,6 +42,7 @@ public class CASTArrayDesignator extends ASTNode implements } public void setSubscriptExpression(IASTExpression value) { + assertNotFrozen(); exp = value; if(value != null) { value.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java index e23c65efc7b..dc40f6e7548 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java @@ -39,6 +39,7 @@ public class CASTArrayModifier extends ASTNode implements IASTArrayModifier, IAS } public void setConstantExpression(IASTExpression expression) { + assertNotFrozen(); this.exp = expression; if(expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayRangeDesignator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayRangeDesignator.java index ecd6a354f87..f050e30aeb9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayRangeDesignator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayRangeDesignator.java @@ -41,6 +41,7 @@ public class CASTArrayRangeDesignator extends ASTNode implements } public void setRangeFloor(IASTExpression expression) { + assertNotFrozen(); floor = expression; if(expression != null) { expression.setParent(this); @@ -53,6 +54,7 @@ public class CASTArrayRangeDesignator extends ASTNode implements } public void setRangeCeiling(IASTExpression expression) { + assertNotFrozen(); ceiling = expression; if(expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArraySubscriptExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArraySubscriptExpression.java index 74d01397cee..58362b47774 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArraySubscriptExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArraySubscriptExpression.java @@ -41,6 +41,7 @@ public class CASTArraySubscriptExpression extends ASTNode implements } public void setArrayExpression(IASTExpression expression) { + assertNotFrozen(); array = expression; if(expression != null) { expression.setParent(this); @@ -53,6 +54,7 @@ public class CASTArraySubscriptExpression extends ASTNode implements } public void setSubscriptExpression(IASTExpression expression) { + assertNotFrozen(); this.subscript = expression; if(expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java index a8ad8bae4db..1a609995782 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java @@ -46,22 +46,27 @@ public abstract class CASTBaseDeclSpecifier extends ASTNode implements ICASTDecl } public void setStorageClass(int storageClass) { + assertNotFrozen(); this.storageClass = storageClass; } public void setConst(boolean value) { + assertNotFrozen(); this.isConst = value; } public void setVolatile(boolean value) { + assertNotFrozen(); this.isVolatile = value; } public void setRestrict(boolean value) { + assertNotFrozen(); this.isRestrict = value; } public void setInline(boolean value) { + assertNotFrozen(); this.isInline = value; } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBinaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBinaryExpression.java index d588fd6e49b..4a785eb245a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBinaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBinaryExpression.java @@ -54,10 +54,12 @@ public class CASTBinaryExpression extends ASTNode implements * @param op An op_X field from {@link IASTBinaryExpression} */ public void setOperator(int op) { + assertNotFrozen(); this.op = op; } public void setOperand1(IASTExpression expression) { + assertNotFrozen(); operand1 = expression; if (expression != null) { expression.setParent(this); @@ -66,6 +68,7 @@ public class CASTBinaryExpression extends ASTNode implements } public void setOperand2(IASTExpression expression) { + assertNotFrozen(); operand2 = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCaseStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCaseStatement.java index 7ef13dc9a5c..b3cb4045d9e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCaseStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCaseStatement.java @@ -38,6 +38,7 @@ public class CASTCaseStatement extends ASTNode implements IASTCaseStatement, IAS } public void setExpression(IASTExpression expression) { + assertNotFrozen(); this.expression = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCastExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCastExpression.java index 1d6365ea1b5..e219667af9f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCastExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCastExpression.java @@ -32,6 +32,7 @@ public class CASTCastExpression extends CASTUnaryExpression implements IASTCastE } public void setTypeId(IASTTypeId typeId) { + assertNotFrozen(); this.typeId = typeId; if (typeId != null) { typeId.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java index 1e5ee98d862..7bcfd7bd8dd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java @@ -42,6 +42,7 @@ public class CASTCompositeTypeSpecifier extends CASTBaseDeclSpecifier implements } public void setKey(int key) { + assertNotFrozen(); this.key = key; } @@ -50,6 +51,7 @@ public class CASTCompositeTypeSpecifier extends CASTBaseDeclSpecifier implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -71,6 +73,7 @@ public class CASTCompositeTypeSpecifier extends CASTBaseDeclSpecifier implements public void addMemberDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); if (declaration != null) { declaration.setParent(this); declaration.setPropertyInParent(MEMBER_DECLARATION); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatement.java index dc8fae2441d..a67052a3d27 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatement.java @@ -36,6 +36,7 @@ public class CASTCompoundStatement extends ASTNode implements IASTCompoundStatem } public void addStatement(IASTStatement statement) { + assertNotFrozen(); statements = (IASTStatement[]) ArrayUtil.append( IASTStatement.class, statements, statement ); if(statement != null) { statement.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatementExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatementExpression.java index ec2610ef8f4..a78787ae33c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatementExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatementExpression.java @@ -37,6 +37,7 @@ public class CASTCompoundStatementExpression extends ASTNode implements } public void setCompoundStatement(IASTCompoundStatement statement) { + assertNotFrozen(); this.statement = statement; if (statement != null) { statement.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTConditionalExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTConditionalExpression.java index 5a1f59e2c14..189fbf67b2b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTConditionalExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTConditionalExpression.java @@ -44,6 +44,7 @@ public class CASTConditionalExpression extends ASTNode implements } public void setLogicalConditionExpression(IASTExpression expression) { + assertNotFrozen(); condition = expression; if (expression != null) { expression.setParent(this); @@ -56,6 +57,7 @@ public class CASTConditionalExpression extends ASTNode implements } public void setPositiveResultExpression(IASTExpression expression) { + assertNotFrozen(); this.positive = expression; if (expression != null) { expression.setParent(this); @@ -68,6 +70,7 @@ public class CASTConditionalExpression extends ASTNode implements } public void setNegativeResultExpression(IASTExpression expression) { + assertNotFrozen(); this.negative = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDeclarationStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDeclarationStatement.java index b43568ecbdb..a4a39529fb7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDeclarationStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDeclarationStatement.java @@ -36,6 +36,7 @@ public class CASTDeclarationStatement extends ASTNode implements IASTDeclaration } public void setDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); this.declaration = declaration; if (declaration != null) { declaration.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDeclarator.java index 4cf7612c959..3be37d4cf65 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDeclarator.java @@ -70,6 +70,7 @@ public class CASTDeclarator extends ASTNode implements IASTDeclarator, IASTAmbig } public void setInitializer(IASTInitializer initializer) { + assertNotFrozen(); this.initializer = initializer; if (initializer != null) { initializer.setParent(this); @@ -78,6 +79,7 @@ public class CASTDeclarator extends ASTNode implements IASTDeclarator, IASTAmbig } public void addPointerOperator(IASTPointerOperator operator) { + assertNotFrozen(); if (operator != null) { operator.setParent(this); operator.setPropertyInParent(POINTER_OPERATOR); @@ -86,6 +88,7 @@ public class CASTDeclarator extends ASTNode implements IASTDeclarator, IASTAmbig } public void setNestedDeclarator(IASTDeclarator nested) { + assertNotFrozen(); this.nestedDeclarator = nested; if (nested != null) { nested.setParent(this); @@ -94,6 +97,7 @@ public class CASTDeclarator extends ASTNode implements IASTDeclarator, IASTAmbig } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDesignatedInitializer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDesignatedInitializer.java index 013c779cefe..d820630c0ae 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDesignatedInitializer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDesignatedInitializer.java @@ -30,11 +30,12 @@ public class CASTDesignatedInitializer extends ASTNode implements public CASTDesignatedInitializer() { } - public CASTDesignatedInitializer(IASTInitializer rhs) { - setOperandInitializer(rhs); + public CASTDesignatedInitializer(IASTInitializer operandInitializer) { + setOperandInitializer(operandInitializer); } public void addDesignator(ICASTDesignator designator) { + assertNotFrozen(); if (designator != null) { designator.setParent(this); designator.setPropertyInParent(DESIGNATOR); @@ -59,6 +60,7 @@ public class CASTDesignatedInitializer extends ASTNode implements public void setOperandInitializer(IASTInitializer rhs) { + assertNotFrozen(); this.rhs = rhs; if (rhs != null) { rhs.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDoStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDoStatement.java index b9f71459c0e..8c36926edc2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDoStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTDoStatement.java @@ -41,6 +41,7 @@ public class CASTDoStatement extends ASTNode implements IASTDoStatement, IASTAmb } public void setBody(IASTStatement body) { + assertNotFrozen(); this.body = body; if (body != null) { body.setParent(this); @@ -55,6 +56,7 @@ public class CASTDoStatement extends ASTNode implements IASTDoStatement, IASTAmb public void setCondition(IASTExpression condition) { + assertNotFrozen(); this.condition = condition; if (condition != null) { condition.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java index 929a54fbdd0..d55e9752fee 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java @@ -43,6 +43,7 @@ public class CASTElaboratedTypeSpecifier extends CASTBaseDeclSpecifier implement } public void setKind(int value) { + assertNotFrozen(); this.kind = value; } @@ -51,6 +52,7 @@ public class CASTElaboratedTypeSpecifier extends CASTBaseDeclSpecifier implement } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java index 651ad69f4c7..d0651af81d8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java @@ -44,6 +44,7 @@ public class CASTEnumerationSpecifier extends CASTBaseDeclSpecifier } public void addEnumerator(IASTEnumerator enumerator) { + assertNotFrozen(); if (enumerator != null) { enumerator.setParent(this); enumerator.setPropertyInParent(ENUMERATOR); @@ -63,6 +64,7 @@ public class CASTEnumerationSpecifier extends CASTBaseDeclSpecifier public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionList.java index 5eaaeb5dcf1..07c1fa6d3cc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionList.java @@ -34,6 +34,7 @@ public class CASTExpressionList extends ASTNode implements IASTExpressionList, } public void addExpression(IASTExpression expression) { + assertNotFrozen(); expressions = (IASTExpression[]) ArrayUtil.append( IASTExpression.class, expressions, expression ); if(expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionStatement.java index 4bd898a2ae1..0938e15ab61 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionStatement.java @@ -39,6 +39,7 @@ public class CASTExpressionStatement extends ASTNode implements } public void setExpression(IASTExpression expression) { + assertNotFrozen(); this.expression = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldDeclarator.java index 0f3a0252b1d..acacb792500 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldDeclarator.java @@ -37,6 +37,7 @@ public class CASTFieldDeclarator extends CASTDeclarator implements IASTFieldDecl public void setBitFieldSize(IASTExpression size) { + assertNotFrozen(); bitFieldSize = size; if (size != null) { size.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldDesignator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldDesignator.java index e87fbc45017..2f51227469d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldDesignator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldDesignator.java @@ -39,6 +39,7 @@ public class CASTFieldDesignator extends ASTNode implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldReference.java index 5b2b33ca0b3..718a136ef48 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldReference.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldReference.java @@ -52,6 +52,7 @@ public class CASTFieldReference extends ASTNode implements IASTFieldReference, I } public void setFieldOwner(IASTExpression expression) { + assertNotFrozen(); this.owner = expression; if (expression != null) { expression.setParent(this); @@ -64,6 +65,7 @@ public class CASTFieldReference extends ASTNode implements IASTFieldReference, I } public void setFieldName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -76,6 +78,7 @@ public class CASTFieldReference extends ASTNode implements IASTFieldReference, I } public void setIsPointerDereference(boolean value) { + assertNotFrozen(); ptr = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTForStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTForStatement.java index 9dcaa0b85ec..bbd25c7d61e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTForStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTForStatement.java @@ -48,6 +48,7 @@ public class CASTForStatement extends ASTNode implements IASTForStatement, IASTA } public void setConditionExpression(IASTExpression condition) { + assertNotFrozen(); this.condition = condition; if (condition != null) { condition.setParent(this); @@ -60,6 +61,7 @@ public class CASTForStatement extends ASTNode implements IASTForStatement, IASTA } public void setIterationExpression(IASTExpression iterator) { + assertNotFrozen(); this.iterationExpression = iterator; if (iterator != null) { iterator.setParent(this); @@ -72,6 +74,7 @@ public class CASTForStatement extends ASTNode implements IASTForStatement, IASTA } public void setInitializerStatement(IASTStatement statement) { + assertNotFrozen(); init = statement; if (statement != null) { statement.setParent(this); @@ -83,6 +86,7 @@ public class CASTForStatement extends ASTNode implements IASTForStatement, IASTA } public void setBody(IASTStatement statement) { + assertNotFrozen(); body = statement; if (statement != null) { statement.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionCallExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionCallExpression.java index be8507de0f6..8bec97d282f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionCallExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionCallExpression.java @@ -38,6 +38,7 @@ public class CASTFunctionCallExpression extends ASTNode implements } public void setFunctionNameExpression(IASTExpression expression) { + assertNotFrozen(); this.functionName = expression; if (expression != null) { expression.setParent(this); @@ -50,6 +51,7 @@ public class CASTFunctionCallExpression extends ASTNode implements } public void setParameterExpression(IASTExpression expression) { + assertNotFrozen(); this.parameter = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionDeclarator.java index 5cc67ade6f5..b49708a0bb6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionDeclarator.java @@ -41,6 +41,7 @@ public class CASTFunctionDeclarator extends CASTDeclarator implements IASTStanda } public void addParameterDeclaration(IASTParameterDeclaration parameter) { + assertNotFrozen(); if (parameter != null) { parameter.setParent(this); parameter.setPropertyInParent(FUNCTION_PARAMETER); @@ -53,6 +54,7 @@ public class CASTFunctionDeclarator extends CASTDeclarator implements IASTStanda } public void setVarArgs(boolean value) { + assertNotFrozen(); varArgs = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionDefinition.java index fc8e875295a..b3fea48f7aa 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionDefinition.java @@ -50,6 +50,7 @@ public class CASTFunctionDefinition extends ASTNode implements } public void setDeclSpecifier(IASTDeclSpecifier declSpec) { + assertNotFrozen(); declSpecifier = declSpec; if (declSpec != null) { declSpec.setParent(this); @@ -62,6 +63,7 @@ public class CASTFunctionDefinition extends ASTNode implements } public void setDeclarator(IASTFunctionDeclarator declarator) { + assertNotFrozen(); this.declarator = declarator; if (declarator != null) { IASTDeclarator outerDtor= CVisitor.findOutermostDeclarator(declarator); @@ -75,6 +77,7 @@ public class CASTFunctionDefinition extends ASTNode implements } public void setBody(IASTStatement statement) { + assertNotFrozen(); bodyStatement = statement; if (statement != null) { statement.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTGotoStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTGotoStatement.java index a7b75267297..809dc41cf37 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTGotoStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTGotoStatement.java @@ -35,6 +35,7 @@ public class CASTGotoStatement extends ASTNode implements IASTGotoStatement { } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java index 43914ec09f1..4ff074aedf0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java @@ -44,6 +44,7 @@ public class CASTIdExpression extends ASTNode implements IASTIdExpression, IASTC } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIfStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIfStatement.java index 5ad0ae749a3..124857cbd13 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIfStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIfStatement.java @@ -49,6 +49,7 @@ public class CASTIfStatement extends ASTNode implements IASTIfStatement, IASTAmb } public void setConditionExpression(IASTExpression condition) { + assertNotFrozen(); this.condition = condition; if (condition != null) { condition.setParent(this); @@ -61,6 +62,7 @@ public class CASTIfStatement extends ASTNode implements IASTIfStatement, IASTAmb } public void setThenClause(IASTStatement thenClause) { + assertNotFrozen(); this.thenClause = thenClause; if (thenClause != null) { thenClause.setParent(this); @@ -73,6 +75,7 @@ public class CASTIfStatement extends ASTNode implements IASTIfStatement, IASTAmb } public void setElseClause(IASTStatement elseClause) { + assertNotFrozen(); this.elseClause = elseClause; if (elseClause != null) { elseClause.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTInitializerExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTInitializerExpression.java index fd95e6e0ce9..067810f74cf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTInitializerExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTInitializerExpression.java @@ -39,6 +39,7 @@ public class CASTInitializerExpression extends ASTNode implements } public void setExpression(IASTExpression expression) { + assertNotFrozen(); this.expression = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTInitializerList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTInitializerList.java index de63326c2d5..cd64fb29bc5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTInitializerList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTInitializerList.java @@ -32,6 +32,7 @@ public class CASTInitializerList extends ASTNode implements } public void addInitializer( IASTInitializer d ) { + assertNotFrozen(); if (d != null) { initializers = (IASTInitializer[]) ArrayUtil.append( IASTInitializer.class, initializers, ++initializersPos, d ); d.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTKnRFunctionDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTKnRFunctionDeclarator.java index 70491b2a377..b4b8408176c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTKnRFunctionDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTKnRFunctionDeclarator.java @@ -40,12 +40,14 @@ public class CASTKnRFunctionDeclarator extends CASTDeclarator implements ICASTKn public void setParameterNames(IASTName[] names) { + assertNotFrozen(); parameterNames = names; - for(int i = 0; i < names.length; i++) { - IASTName name = names[i]; - if (name != null) { - name.setParent(this); - name.setPropertyInParent(PARAMETER_NAME); + if(names != null) { + for(IASTName name : names) { + if (name != null) { + name.setParent(this); + name.setPropertyInParent(PARAMETER_NAME); + } } } } @@ -57,14 +59,16 @@ public class CASTKnRFunctionDeclarator extends CASTDeclarator implements ICASTKn public void setParameterDeclarations(IASTDeclaration[] decls) { + assertNotFrozen(); parameterDeclarations = decls; - for(int i = 0; i < parameterDeclarations.length; i++) { - IASTDeclaration decl = parameterDeclarations[i]; - if (decl != null) { - decl.setParent(this); - decl.setPropertyInParent(FUNCTION_PARAMETER); + if(decls != null) { + for(IASTDeclaration decl : decls) { + if (decl != null) { + decl.setParent(this); + decl.setPropertyInParent(FUNCTION_PARAMETER); + } } - } + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLabelStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLabelStatement.java index 2771d844410..0d40cf72cb8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLabelStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLabelStatement.java @@ -41,6 +41,7 @@ public class CASTLabelStatement extends ASTNode implements IASTLabelStatement, I } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -80,6 +81,7 @@ public class CASTLabelStatement extends ASTNode implements IASTLabelStatement, I } public void setNestedStatement(IASTStatement s) { + assertNotFrozen(); nestedStatement = s; if (s != null) { s.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLiteralExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLiteralExpression.java index 1f939ede309..cd80ef5ceed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLiteralExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLiteralExpression.java @@ -39,6 +39,7 @@ public class CASTLiteralExpression extends ASTNode implements IASTLiteralExpress } public void setKind(int value) { + assertNotFrozen(); kind = value; } @@ -47,6 +48,7 @@ public class CASTLiteralExpression extends ASTNode implements IASTLiteralExpress } public void setValue(char[] value) { + assertNotFrozen(); this.value= value; } @@ -83,6 +85,7 @@ public class CASTLiteralExpression extends ASTNode implements IASTLiteralExpress */ @Deprecated public void setValue(String value) { + assertNotFrozen(); this.value = value.toCharArray(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTModifiedArrayModifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTModifiedArrayModifier.java index 7b82a17418c..78012a1d884 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTModifiedArrayModifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTModifiedArrayModifier.java @@ -48,18 +48,22 @@ public class CASTModifiedArrayModifier extends CASTArrayModifier implements ICAS } public void setConst(boolean value) { + assertNotFrozen(); this.isConst = value; } public void setVolatile(boolean value) { + assertNotFrozen(); this.isVolatile = value; } public void setRestrict(boolean value) { + assertNotFrozen(); this.isRestrict = value; } public void setStatic(boolean value) { + assertNotFrozen(); this.isStatic = value; } @@ -68,6 +72,7 @@ public class CASTModifiedArrayModifier extends CASTArrayModifier implements ICAS } public void setVariableSized(boolean value) { + assertNotFrozen(); varSized = value; } } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTParameterDeclaration.java index 55b5b43335b..159137d5fc2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTParameterDeclaration.java @@ -45,6 +45,7 @@ public class CASTParameterDeclaration extends ASTNode implements IASTParameterDe } public void setDeclSpecifier(IASTDeclSpecifier declSpec) { + assertNotFrozen(); this.declSpec = declSpec; if (declSpec != null) { declSpec.setParent(this); @@ -53,6 +54,7 @@ public class CASTParameterDeclaration extends ASTNode implements IASTParameterDe } public void setDeclarator(IASTDeclarator declarator) { + assertNotFrozen(); this.declarator = declarator; if (declarator != null) { declarator.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTPointer.java index a5ace0c111d..0be5518ff64 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTPointer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTPointer.java @@ -28,6 +28,7 @@ public class CASTPointer extends ASTNode implements ICASTPointer { } public void setRestrict(boolean value) { + assertNotFrozen(); isRestrict = value; } @@ -40,10 +41,12 @@ public class CASTPointer extends ASTNode implements ICASTPointer { } public void setConst(boolean value) { + assertNotFrozen(); isConst = value; } public void setVolatile(boolean value) { + assertNotFrozen(); isVolatile = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemOwner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemOwner.java index 916e93463a3..b9c726df719 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemOwner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemOwner.java @@ -35,6 +35,7 @@ abstract class CASTProblemOwner extends ASTNode implements IASTProblemHolder { } public void setProblem(IASTProblem p) { + assertNotFrozen(); problem = p; if (p != null) { p.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTReturnStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTReturnStatement.java index 8cc5fb6d7ee..85c89a72aa9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTReturnStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTReturnStatement.java @@ -39,6 +39,7 @@ public class CASTReturnStatement extends ASTNode implements public void setReturnValue(IASTExpression returnValue) { + assertNotFrozen(); retValue = returnValue; if (returnValue != null) { returnValue.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclSpecifier.java index 7bd754e5375..ddd2b84e5d6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclSpecifier.java @@ -49,22 +49,27 @@ public class CASTSimpleDeclSpecifier extends CASTBaseDeclSpecifier implements IC } public void setType(int type) { + assertNotFrozen(); simpleType = type; } public void setShort(boolean value) { + assertNotFrozen(); isShort = value; } public void setLong(boolean value) { + assertNotFrozen(); isLong = value; } public void setUnsigned(boolean value) { + assertNotFrozen(); isUnsigned = value; } public void setSigned(boolean value) { + assertNotFrozen(); isSigned = value; } @@ -73,6 +78,7 @@ public class CASTSimpleDeclSpecifier extends CASTBaseDeclSpecifier implements IC } public void setLongLong(boolean value) { + assertNotFrozen(); longlong = value; } @@ -100,6 +106,7 @@ public class CASTSimpleDeclSpecifier extends CASTBaseDeclSpecifier implements IC } public void setComplex(boolean value) { + assertNotFrozen(); this.complex = value; } @@ -108,6 +115,7 @@ public class CASTSimpleDeclSpecifier extends CASTBaseDeclSpecifier implements IC } public void setImaginary(boolean value) { + assertNotFrozen(); this.imaginary = value; } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclaration.java index 2671f806549..623c01b0621 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSimpleDeclaration.java @@ -43,6 +43,7 @@ public class CASTSimpleDeclaration extends ASTNode implements IASTSimpleDeclarat } public void addDeclarator( IASTDeclarator d ) { + assertNotFrozen(); if (d != null) { d.setParent(this); d.setPropertyInParent(DECLARATOR); @@ -57,6 +58,7 @@ public class CASTSimpleDeclaration extends ASTNode implements IASTSimpleDeclarat public void setDeclSpecifier(IASTDeclSpecifier declSpecifier) { + assertNotFrozen(); this.declSpecifier = declSpecifier; if (declSpecifier != null) { declSpecifier.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSwitchStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSwitchStatement.java index 9d3c30adece..443845b7b74 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSwitchStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTSwitchStatement.java @@ -41,6 +41,7 @@ public class CASTSwitchStatement extends ASTNode implements } public void setControllerExpression(IASTExpression controller) { + assertNotFrozen(); this.controller = controller; if (controller != null) { controller.setParent(this); @@ -53,6 +54,7 @@ public class CASTSwitchStatement extends ASTNode implements } public void setBody(IASTStatement body) { + assertNotFrozen(); this.body = body; if (body != null) { body.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeId.java index eaa09b38b4c..1a7386f7714 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeId.java @@ -38,6 +38,7 @@ public class CASTTypeId extends ASTNode implements IASTTypeId { } public void setDeclSpecifier(IASTDeclSpecifier declSpec) { + assertNotFrozen(); this.declSpecifier = declSpec; if (declSpec != null) { declSpec.setParent(this); @@ -50,6 +51,7 @@ public class CASTTypeId extends ASTNode implements IASTTypeId { } public void setAbstractDeclarator(IASTDeclarator abstractDeclarator) { + assertNotFrozen(); declarator = abstractDeclarator; if (abstractDeclarator != null) { abstractDeclarator.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdExpression.java index f0072d77cc3..146fc750208 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdExpression.java @@ -39,10 +39,12 @@ public class CASTTypeIdExpression extends ASTNode implements } public void setOperator(int value) { + assertNotFrozen(); this.op = value; } public void setTypeId(IASTTypeId typeId) { + assertNotFrozen(); this.typeId = typeId; if (typeId != null) { typeId.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdInitializerExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdInitializerExpression.java index 91b715f4e36..19cb07cd078 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdInitializerExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdInitializerExpression.java @@ -41,6 +41,7 @@ public class CASTTypeIdInitializerExpression extends ASTNode implements } public void setTypeId(IASTTypeId typeId) { + assertNotFrozen(); this.typeId = typeId; if (typeId != null) { typeId.setParent(this); @@ -53,6 +54,7 @@ public class CASTTypeIdInitializerExpression extends ASTNode implements } public void setInitializer(IASTInitializer initializer) { + assertNotFrozen(); this.initializer = initializer; if (initializer != null) { initializer.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypedefNameSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypedefNameSpecifier.java index 637f078bdc5..eb67d985907 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypedefNameSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypedefNameSpecifier.java @@ -41,6 +41,7 @@ public class CASTTypedefNameSpecifier extends CASTBaseDeclSpecifier implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTUnaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTUnaryExpression.java index ef9e20b76e9..2425cdd594f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTUnaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTUnaryExpression.java @@ -42,6 +42,7 @@ public class CASTUnaryExpression extends ASTNode implements } public void setOperator(int value) { + assertNotFrozen(); this.operator = value; } @@ -50,6 +51,7 @@ public class CASTUnaryExpression extends ASTNode implements } public void setOperand(IASTExpression expression) { + assertNotFrozen(); operand = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTWhileStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTWhileStatement.java index 6ade8f3acca..5941a6d6726 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTWhileStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTWhileStatement.java @@ -41,6 +41,7 @@ public class CASTWhileStatement extends ASTNode implements IASTWhileStatement, I } public void setCondition(IASTExpression condition) { + assertNotFrozen(); this.condition = condition; if (condition != null) { condition.setParent(this); @@ -53,6 +54,7 @@ public class CASTWhileStatement extends ASTNode implements IASTWhileStatement, I } public void setBody(IASTStatement body) { + assertNotFrozen(); this.body = body; if (body != null) { body.setParent(this); diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99ASTNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java similarity index 59% rename from lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99ASTNodeFactory.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java index 1068c44a089..ac45942f1e7 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99ASTNodeFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.core.dom.lrparser.action.c99; +package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; @@ -27,7 +27,6 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclarationStatement; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTDefaultStatement; import org.eclipse.cdt.core.dom.ast.IASTDoStatement; -import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpressionList; import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; @@ -67,78 +66,19 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTArrayDesignator; import org.eclipse.cdt.core.dom.ast.c.ICASTArrayModifier; import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer; +import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTFieldDesignator; import org.eclipse.cdt.core.dom.ast.c.ICASTPointer; import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; 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.c.ICNodeFactory; +import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; -import org.eclipse.cdt.core.dom.lrparser.action.ASTCompletionNode; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTASMDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTAmbiguousExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTAmbiguousStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTArrayDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTArrayDesignator; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTArrayModifier; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTArraySubscriptExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTBinaryExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTBreakStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTCaseStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTCastExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTCompositeTypeSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTCompoundStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTConditionalExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTContinueStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTDeclarationStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTDefaultStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTDesignatedInitializer; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTDoStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTElaboratedTypeSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTEnumerationSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTEnumerator; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTExpressionList; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTExpressionStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTFieldDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTFieldDesignator; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTFieldReference; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTForStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTFunctionCallExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTFunctionDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTFunctionDefinition; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTGotoStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTIdExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTIfStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTInitializerExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTInitializerList; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTKnRFunctionDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTLabelStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTLiteralExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTModifiedArrayModifier; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTName; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTNullStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTParameterDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTPointer; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTProblem; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTProblemDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTProblemExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTProblemStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTReturnStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTSimpleDeclSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTSimpleDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTSwitchStatement; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTTranslationUnit; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTTypeId; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTTypeIdExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTTypeIdInitializerExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTTypedefNameSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTUnaryExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTWhileStatement; +import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTArrayRangeDesignator; +import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTSimpleDeclSpecifier; -@SuppressWarnings("restriction") // all AST node constructors are internal /** * Abstract factory implementation that creates AST nodes for C99. * These can be overridden in subclasses to change the @@ -146,10 +86,20 @@ import org.eclipse.cdt.internal.core.dom.parser.c.CASTWhileStatement; * * @author Mike Kucera */ -public class C99ASTNodeFactory implements IC99ASTNodeFactory { +public class CNodeFactory implements ICNodeFactory { - public static final C99ASTNodeFactory DEFAULT_INSTANCE = new C99ASTNodeFactory(); + private static final CNodeFactory DEFAULT_INSTANCE = new CNodeFactory(); + public static CNodeFactory getDefault() { + return DEFAULT_INSTANCE; + } + + + public IASTTranslationUnit newTranslationUnit() { + CASTTranslationUnit tu = new CASTTranslationUnit(); + tu.setASTNodeFactory(this); + return tu; + } public IASTName newName(char[] name) { return new CASTName(name); @@ -159,15 +109,8 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTName(); } - /** - * TODO: this should return IASTCompletionNode - */ - public ASTCompletionNode newCompletionNode(String prefix, IASTTranslationUnit tu) { - return new ASTCompletionNode((prefix == null || prefix.length() == 0) ? null : prefix, tu); - } - public IASTLiteralExpression newLiteralExpression(int kind, String rep) { - return new CASTLiteralExpression(kind, rep); + return new CASTLiteralExpression(kind, rep.toCharArray()); } public IASTIdExpression newIdExpression(IASTName name) { @@ -194,8 +137,8 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTExpressionList(); } - public IASTFieldReference newFieldReference(IASTName name, IASTExpression owner, boolean isPointerDereference) { - return new CASTFieldReference(name, owner, isPointerDereference); + public IASTFieldReference newFieldReference(IASTName name, IASTExpression owner) { + return new CASTFieldReference(name, owner); } public IASTUnaryExpression newUnaryExpression(int operator, IASTExpression operand) { @@ -206,8 +149,8 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTTypeIdExpression(operator, typeId); } - public ICASTTypeIdInitializerExpression newCTypeIdInitializerExpression(IASTTypeId typeId, IASTInitializerList list) { - return new CASTTypeIdInitializerExpression(typeId, list); + public ICASTTypeIdInitializerExpression newTypeIdInitializerExpression(IASTTypeId typeId, IASTInitializer initializer) { + return new CASTTypeIdInitializerExpression(typeId, initializer); } /** @@ -229,23 +172,23 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTArrayDeclarator(name); } - public ICASTArrayModifier newModifiedArrayModifier() { - return new CASTModifiedArrayModifier(); + public IASTArrayModifier newArrayModifier(IASTExpression expr) { + return new CASTArrayModifier(expr); } - public IASTArrayModifier newArrayModifier(IASTExpression expr) { - return new CASTArrayModifier(expr); - } + public ICASTArrayModifier newModifiedArrayModifier(IASTExpression expr) { + return new CASTModifiedArrayModifier(expr); + } public IASTStandardFunctionDeclarator newFunctionDeclarator(IASTName name) { return new CASTFunctionDeclarator(name); } - public ICASTKnRFunctionDeclarator newCKnRFunctionDeclarator() { - return new CASTKnRFunctionDeclarator(); + public ICASTKnRFunctionDeclarator newKnRFunctionDeclarator(IASTName[] parameterNames, IASTDeclaration[] parameterDeclarations) { + return new CASTKnRFunctionDeclarator(parameterNames, parameterDeclarations); } - public ICASTPointer newCPointer() { + public ICASTPointer newPointer() { return new CASTPointer(); } @@ -261,24 +204,20 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTInitializerList(); } - public ICASTDesignatedInitializer newCDesignatedInitializer(IASTInitializer rhs) { - return new CASTDesignatedInitializer(rhs); + public ICASTDesignatedInitializer newDesignatedInitializer(IASTInitializer operandInitializer) { + return new CASTDesignatedInitializer(operandInitializer); } - public ICASTArrayDesignator newCArrayDesignator(IASTExpression exp) { + public ICASTArrayDesignator newArrayDesignator(IASTExpression exp) { return new CASTArrayDesignator(exp); } - public ICASTFieldDesignator newCFieldDesignator(IASTName name) { + public ICASTFieldDesignator newFieldDesignator(IASTName name) { return new CASTFieldDesignator(name); } - public ICASTSimpleDeclSpecifier newCSimpleDeclSpecifier() { - return new CASTSimpleDeclSpecifier(); - } - - public ICASTTypedefNameSpecifier newCTypedefNameSpecifier() { - return new CASTTypedefNameSpecifier(); + public ICASTTypedefNameSpecifier newTypedefNameSpecifier(IASTName name) { + return new CASTTypedefNameSpecifier(name); } public IASTSimpleDeclaration newSimpleDeclaration(IASTDeclSpecifier declSpecifier) { @@ -289,11 +228,11 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTFieldDeclarator(name, bitFieldSize); } - public ICASTCompositeTypeSpecifier newCCompositeTypeSpecifier(int key, IASTName name) { + public ICASTCompositeTypeSpecifier newCompositeTypeSpecifier(int key, IASTName name) { return new CASTCompositeTypeSpecifier(key, name); } - public IASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name) { + public ICASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name) { return new CASTElaboratedTypeSpecifier(kind, name); } @@ -358,7 +297,7 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTDefaultStatement(); } - public IASTSwitchStatement newSwitchStatment(IASTExpression controller, IASTStatement body) { + public IASTSwitchStatement newSwitchStatement(IASTExpression controller, IASTStatement body) { return new CASTSwitchStatement(controller, body); } @@ -371,34 +310,22 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTFunctionDefinition(declSpecifier, declarator, bodyStatement); } - public IASTProblemDeclaration newProblemDeclaration() { - return new CASTProblemDeclaration(); + public IASTProblemDeclaration newProblemDeclaration(IASTProblem problem) { + return new CASTProblemDeclaration(problem); } - public IASTProblemStatement newProblemStatement() { - return new CASTProblemStatement(); + public IASTProblemStatement newProblemStatement(IASTProblem problem) { + return new CASTProblemStatement(problem); } - public IASTProblemExpression newProblemExpression() { - return new CASTProblemExpression(); + public IASTProblemExpression newProblemExpression(IASTProblem problem) { + return new CASTProblemExpression(problem); } public IASTProblem newProblem(int id, char[] arg, boolean error) { return new CASTProblem(id, arg, error); } - public IASTAmbiguousExpression newAmbiguousExpression(IASTExpression... expressions) { - return new CASTAmbiguousExpression(expressions); - } - - public IASTAmbiguousStatement newAmbiguousStatement(IASTStatement... statements) { - return new CASTAmbiguousStatement(statements); - } - - public IASTTranslationUnit newTranslationUnit() { - return new CASTTranslationUnit(); - } - public IASTASMDeclaration newASMDeclaration(String assembly) { return new CASTASMDeclaration(assembly); } @@ -407,11 +334,21 @@ public class C99ASTNodeFactory implements IC99ASTNodeFactory { return new CASTEnumerationSpecifier(name); } - public IASTDeclSpecifier newSimpleDeclSpecifier() { - return newCSimpleDeclSpecifier(); + public ICASTSimpleDeclSpecifier newSimpleDeclSpecifier() { + return new CASTSimpleDeclSpecifier(); } - + public IGNUASTCompoundStatementExpression newGNUCompoundStatementExpression(IASTCompoundStatement compoundStatement) { + return new CASTCompoundStatementExpression(compoundStatement); + } + + public IGCCASTArrayRangeDesignator newArrayRangeDesignatorGCC(IASTExpression floor, IASTExpression ceiling) { + return new CASTArrayRangeDesignator(floor, ceiling); + } + + public IGCCASTSimpleDeclSpecifier newSimpleDeclSpecifierGCC(IASTExpression typeofExpression) { + return new GCCASTSimpleDeclSpecifier(typeofExpression); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index 54c9849d041..c44b6100b68 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -19,54 +19,37 @@ import java.util.List; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; -import org.eclipse.cdt.core.dom.ast.IASTBreakStatement; -import org.eclipse.cdt.core.dom.ast.IASTCaseStatement; import org.eclipse.cdt.core.dom.ast.IASTCastExpression; import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; import org.eclipse.cdt.core.dom.ast.IASTConditionalExpression; -import org.eclipse.cdt.core.dom.ast.IASTContinueStatement; import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTDeclarationStatement; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTDefaultStatement; -import org.eclipse.cdt.core.dom.ast.IASTDoStatement; import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; -import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.IASTExpression; -import org.eclipse.cdt.core.dom.ast.IASTExpressionList; -import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; import org.eclipse.cdt.core.dom.ast.IASTFieldDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFieldReference; import org.eclipse.cdt.core.dom.ast.IASTForStatement; import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression; import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; -import org.eclipse.cdt.core.dom.ast.IASTGotoStatement; import org.eclipse.cdt.core.dom.ast.IASTIdExpression; import org.eclipse.cdt.core.dom.ast.IASTIfStatement; import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression; import org.eclipse.cdt.core.dom.ast.IASTInitializerList; -import org.eclipse.cdt.core.dom.ast.IASTLabelStatement; import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression; import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNamedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.dom.ast.IASTNullStatement; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTProblemExpression; -import org.eclipse.cdt.core.dom.ast.IASTProblemStatement; -import org.eclipse.cdt.core.dom.ast.IASTReturnStatement; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; @@ -76,27 +59,23 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; -import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; -import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; import org.eclipse.cdt.core.dom.ast.c.ICASTArrayDesignator; import org.eclipse.cdt.core.dom.ast.c.ICASTArrayModifier; import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer; import org.eclipse.cdt.core.dom.ast.c.ICASTDesignator; -import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTFieldDesignator; import org.eclipse.cdt.core.dom.ast.c.ICASTPointer; import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; 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.c.ICNodeFactory; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTTypeIdExpression; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTArrayRangeDesignator; -import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.parser.IExtensionToken; import org.eclipse.cdt.core.dom.parser.c.ICParserExtensionConfiguration; import org.eclipse.cdt.core.index.IIndex; @@ -112,6 +91,7 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils; import org.eclipse.cdt.internal.core.dom.parser.ASTInternal; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTQueries; +import org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit; import org.eclipse.cdt.internal.core.dom.parser.AbstractGNUSourceCodeParser; import org.eclipse.cdt.internal.core.dom.parser.BacktrackException; import org.eclipse.cdt.internal.core.dom.parser.DeclarationOptions; @@ -128,9 +108,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { private final boolean supportGCCStyleDesignators; private IIndex index; - protected CASTTranslationUnit translationUnit; + protected IASTTranslationUnit translationUnit; private int fPreventKnrCheck= 0; + + private final ICNodeFactory nodeFactory; public GNUCSourceParser(IScanner scanner, ParserMode parserMode, IParserLogService logService, ICParserExtensionConfiguration config) { @@ -140,7 +122,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { public GNUCSourceParser(IScanner scanner, ParserMode parserMode, IParserLogService logService, ICParserExtensionConfiguration config, IIndex index) { - super(scanner, logService, parserMode, + super(scanner, logService, parserMode, CNodeFactory.getDefault(), config.supportStatementsInExpressions(), config.supportTypeofUnaryExpressions(), config.supportAlignOfUnaryExpression(), @@ -153,10 +135,10 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { supportExtendedSizeofOperator= config.supportExtendedSizeofOperator(); supportFunctionStyleAsm= config.supportFunctionStyleAssembler(); this.index= index; + this.nodeFactory = CNodeFactory.getDefault(); } - protected IASTInitializer optionalCInitializer() throws EndOfFileException, - BacktrackException { + protected IASTInitializer optionalCInitializer() throws EndOfFileException, BacktrackException { if (LT(1) == IToken.tASSIGN) { consume(); return cInitializerClause(false); @@ -172,16 +154,14 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { if (!ASTQueries.canContainName(assignmentExpression)) return null; } - IASTInitializerExpression result= createInitializerExpression(); - result.setExpression(assignmentExpression); + IASTInitializerExpression result= nodeFactory.newInitializerExpression(assignmentExpression); setRange(result, assignmentExpression); return result; - } // it's an aggregate initializer consume(IToken.tLBRACE); - IASTInitializerList result = createInitializerList(); + IASTInitializerList result = nodeFactory.newInitializerList(); // bug 196468, gcc accepts empty braces. if (supportGCCStyleDesignators && LT(1) == IToken.tRBRACE) { @@ -205,14 +185,13 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { if (LT(1) == IToken.tASSIGN) consume(); IASTInitializer initializer= cInitializerClause(false); - ICASTDesignatedInitializer desigInitializer = createDesignatorInitializer(); + ICASTDesignatedInitializer desigInitializer = nodeFactory.newDesignatedInitializer(initializer); setRange(desigInitializer, designator.get(0)); adjustLength(desigInitializer, initializer); for (ICASTDesignator d : designator) { desigInitializer.addDesignator(d); } - desigInitializer.setOperandInitializer(initializer); result.addInitializer(desigInitializer); } @@ -239,17 +218,6 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { // consume the closing brace } - protected ICASTDesignatedInitializer createDesignatorInitializer() { - return new CASTDesignatedInitializer(); - } - - protected IASTInitializerList createInitializerList() { - return new CASTInitializerList(); - } - - protected IASTInitializerExpression createInitializerExpression() { - return new CASTInitializerExpression(); - } private List designatorList() throws EndOfFileException, BacktrackException { final int lt1= LT(1); @@ -261,9 +229,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { int offset = consume().getOffset(); IToken id = identifier(); IASTName n = createName(id); - ICASTFieldDesignator fieldDesignator = createFieldDesignator(); + ICASTFieldDesignator fieldDesignator = nodeFactory.newFieldDesignator(n); setRange(fieldDesignator, offset, id.getEndOffset()); - fieldDesignator.setName(n); if (designatorList == null) designatorList = new ArrayList(DEFAULT_DESIGNATOR_LIST_SIZE); designatorList.add(fieldDesignator); @@ -276,18 +243,15 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { consume(IToken.tELLIPSIS); IASTExpression constantExpression2 = expression(); int lastOffset = consume(IToken.tRBRACKET).getEndOffset(); - IGCCASTArrayRangeDesignator designator = createArrayRangeDesignator(); + IGCCASTArrayRangeDesignator designator = nodeFactory.newArrayRangeDesignatorGCC(constantExpression, constantExpression2); setRange(designator, offset, lastOffset); - designator.setRangeFloor(constantExpression); - designator.setRangeCeiling(constantExpression2); if (designatorList == null) designatorList = new ArrayList(DEFAULT_DESIGNATOR_LIST_SIZE); designatorList.add(designator); } else { int lastOffset = consume(IToken.tRBRACKET).getEndOffset(); - ICASTArrayDesignator designator = createArrayDesignator(); + ICASTArrayDesignator designator = nodeFactory.newArrayDesignator(constantExpression); setRange(designator, offset, lastOffset); - designator.setSubscriptExpression(constantExpression); if (designatorList == null) designatorList = new ArrayList(DEFAULT_DESIGNATOR_LIST_SIZE); designatorList.add(designator); @@ -304,27 +268,14 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { if (supportGCCStyleDesignators && lt1 == IToken.tIDENTIFIER && LT(2) == IToken.tCOLON) { IToken identifier = identifier(); int lastOffset = consume(IToken.tCOLON).getEndOffset(); - ICASTFieldDesignator designator = createFieldDesignator(); - ((ASTNode) designator).setOffsetAndLength(identifier.getOffset(), lastOffset - identifier.getOffset()); IASTName n = createName(identifier); - designator.setName(n); + ICASTFieldDesignator designator = nodeFactory.newFieldDesignator(n); + ((ASTNode) designator).setOffsetAndLength(identifier.getOffset(), lastOffset - identifier.getOffset()); return Collections.singletonList(designator); } return null; } - - protected IGCCASTArrayRangeDesignator createArrayRangeDesignator() { - return new CASTArrayRangeDesignator(); - } - - protected ICASTArrayDesignator createArrayDesignator() { - return new CASTArrayDesignator(); - } - - protected ICASTFieldDesignator createFieldDesignator() { - return new CASTFieldDesignator(); - } @Override protected IASTDeclaration declaration(final DeclarationOptions declOption) throws EndOfFileException, BacktrackException { @@ -333,8 +284,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { return asmDeclaration(); case IToken.tSEMI: IToken semi= consume(); - IASTSimpleDeclaration decl= createSimpleDeclaration(); - IASTDeclSpecifier declspec= createSimpleTypeSpecifier(); + IASTDeclSpecifier declspec= nodeFactory.newSimpleDeclSpecifier(); + IASTSimpleDeclaration decl= nodeFactory.newSimpleDeclaration(declspec); decl.setDeclSpecifier(declspec); ((ASTNode) declspec).setOffsetAndLength(semi.getOffset(), 0); ((ASTNode) decl).setOffsetAndLength(semi.getOffset(), semi.getLength()); @@ -401,8 +352,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } catch (BacktrackException e) { IASTNode node= e.getNodeBeforeProblem(); if (node instanceof IASTDeclSpecifier) { - IASTSimpleDeclaration d= createSimpleDeclaration(); - d.setDeclSpecifier((IASTDeclSpecifier) node); + IASTSimpleDeclaration d= nodeFactory.newSimpleDeclaration((IASTDeclSpecifier) node); setRange(d, node); throwBacktrack(e.getProblem(), d); } @@ -459,11 +409,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } // no function body - IASTSimpleDeclaration simpleDeclaration = createSimpleDeclaration(); - simpleDeclaration.setDeclSpecifier(declSpec); - for (IASTDeclarator declarator : declarators) { + IASTSimpleDeclaration simpleDeclaration = nodeFactory.newSimpleDeclaration(declSpec); + for (IASTDeclarator declarator : declarators) simpleDeclaration.addDeclarator(declarator); - } ((ASTNode) simpleDeclaration).setOffsetAndLength(firstOffset, endOffset-firstOffset); @@ -484,9 +432,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { if (fdtor instanceof IASTFunctionDeclarator == false) throwBacktrack(firstOffset, LA(1).getEndOffset() - firstOffset); - IASTFunctionDefinition funcDefinition = createFunctionDefinition(); - funcDefinition.setDeclSpecifier(declSpec); - funcDefinition.setDeclarator((IASTFunctionDeclarator) fdtor); + IASTFunctionDefinition funcDefinition = nodeFactory.newFunctionDefinition(declSpec, (IASTFunctionDeclarator) fdtor, null); try { IASTStatement s= handleFunctionBody(); @@ -505,25 +451,10 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } } - @Override - protected IASTFunctionDefinition createFunctionDefinition() { - return new CASTFunctionDefinition(); - } - - @Override - protected IASTSimpleDeclaration createSimpleDeclaration() { - return new CASTSimpleDeclaration(); - } - - protected CASTTranslationUnit createTranslationUnit() { - CASTTranslationUnit t = new CASTTranslationUnit(); - t.setOffset(0); - return t; - } @Override protected void setupTranslationUnit() throws DOMException { - translationUnit = createTranslationUnit(); + translationUnit = nodeFactory.newTranslationUnit(); translationUnit.setIndex(index); // add built-in names to the scope @@ -535,13 +466,10 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { ASTInternal.addBinding(tuScope, binding); } } - translationUnit.setLocationResolver(scanner.getLocationResolver()); + if(translationUnit instanceof ASTTranslationUnit) + ((ASTTranslationUnit)translationUnit).setLocationResolver(scanner.getLocationResolver()); } - @Override - protected IASTProblemDeclaration createProblemDeclaration() { - return new CASTProblemDeclaration(); - } @Override protected IASTExpression assignmentExpression() throws EndOfFileException, BacktrackException { @@ -582,8 +510,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } @Override - protected IASTExpression unaryExpression() throws EndOfFileException, - BacktrackException { + protected IASTExpression unaryExpression() throws EndOfFileException, BacktrackException { switch (LT(1)) { case IToken.tSTAR: return unarayExpression(IASTUnaryExpression.op_star); @@ -618,21 +545,13 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { @Override protected IASTExpression buildTypeIdExpression(int op, IASTTypeId typeId, int startingOffset, int endingOffset) { - IASTTypeIdExpression result = createTypeIdExpression(); - result.setOperator(op); + IASTTypeIdExpression result = nodeFactory.newTypeIdExpression(op, typeId); ((ASTNode) result).setOffsetAndLength(startingOffset, endingOffset - startingOffset); - ((ASTNode) result).setLength(endingOffset - startingOffset); - result.setTypeId(typeId); return result; } + - protected IASTTypeIdExpression createTypeIdExpression() { - return new CASTTypeIdExpression(); - } - - protected IASTExpression postfixExpression() throws EndOfFileException, - BacktrackException { - + protected IASTExpression postfixExpression() throws EndOfFileException, BacktrackException { IASTExpression firstExpression = null; switch (LT(1)) { case IToken.tLPAREN: @@ -680,11 +599,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { throw backtrack; } - IASTArraySubscriptExpression s = createArraySubscriptExpression(); + IASTArraySubscriptExpression s = nodeFactory.newArraySubscriptExpression(firstExpression, secondExpression); ((ASTNode) s).setOffsetAndLength(((ASTNode) firstExpression) .getOffset(), last - ((ASTNode) firstExpression).getOffset()); - s.setArrayExpression(firstExpression); - s.setSubscriptExpression(secondExpression); firstExpression = s; break; case IToken.tLPAREN: @@ -697,14 +614,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { else // must be EOC last = Integer.MAX_VALUE; - IASTFunctionCallExpression f = createFunctionCallExpression(); + IASTFunctionCallExpression f = nodeFactory.newFunctionCallExpression(firstExpression, secondExpression); ((ASTNode) f).setOffsetAndLength(((ASTNode) firstExpression) .getOffset(), last - ((ASTNode) firstExpression).getOffset()); - f.setFunctionNameExpression(firstExpression); - - if (secondExpression != null) { - f.setParameterExpression(secondExpression); - } firstExpression = f; break; case IToken.tINCR: @@ -726,14 +638,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { if (name == null) throwBacktrack(((ASTNode) firstExpression).getOffset(), ((ASTNode) firstExpression).getLength() + dot.getLength()); - IASTFieldReference result = createFieldReference(); + IASTFieldReference result = nodeFactory.newFieldReference(name, firstExpression); + result.setIsPointerDereference(false); ((ASTNode) result).setOffsetAndLength( ((ASTNode) firstExpression).getOffset(), - calculateEndOffset(name) - - ((ASTNode) firstExpression).getOffset()); - result.setFieldOwner(firstExpression); - result.setIsPointerDereference(false); - result.setFieldName(name); + calculateEndOffset(name) - ((ASTNode) firstExpression).getOffset()); firstExpression = result; break; case IToken.tARROW: @@ -743,13 +652,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { if (name == null) throwBacktrack(((ASTNode) firstExpression).getOffset(), ((ASTNode) firstExpression).getLength() + arrow.getLength()); - result = createFieldReference(); + result = nodeFactory.newFieldReference(name, firstExpression); + result.setIsPointerDereference(true); ((ASTNode) result).setOffsetAndLength( ((ASTNode) firstExpression).getOffset(), calculateEndOffset(name) - ((ASTNode) firstExpression).getOffset()); - result.setFieldOwner(firstExpression); - result.setIsPointerDereference(true); - result.setFieldName(name); firstExpression = result; break; default: @@ -758,67 +665,41 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } } - @Override - protected IASTFunctionCallExpression createFunctionCallExpression() { - return new CASTFunctionCallExpression(); - } - - protected IASTArraySubscriptExpression createArraySubscriptExpression() { - return new CASTArraySubscriptExpression(); - } protected ICASTTypeIdInitializerExpression buildTypeIdInitializerExpression( IASTTypeId t, IASTInitializer i, int offset, int lastOffset) { - ICASTTypeIdInitializerExpression result = createTypeIdInitializerExpression(); + ICASTTypeIdInitializerExpression result = nodeFactory.newTypeIdInitializerExpression(t, i); ((ASTNode) result).setOffsetAndLength(offset, lastOffset - offset); - result.setTypeId(t); - result.setInitializer(i); return result; } - protected ICASTTypeIdInitializerExpression createTypeIdInitializerExpression() { - return new CASTTypeIdInitializerExpression(); - } - - protected IASTFieldReference createFieldReference() { - return new CASTFieldReference(); - } @Override - protected IASTExpression primaryExpression() throws EndOfFileException, - BacktrackException { + protected IASTExpression primaryExpression() throws EndOfFileException, BacktrackException { IToken t = null; IASTLiteralExpression literalExpression = null; switch (LT(1)) { // TO DO: we need more literals... case IToken.tINTEGER: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_integer_constant); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_integer_constant, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.tFLOATINGPT: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_float_constant); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_float_constant, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.tSTRING: case IToken.tLSTRING: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_string_literal); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_string_literal, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.tCHAR: case IToken.tLCHAR: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_char_constant); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_char_constant, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getLength()); return literalExpression; case IToken.tLPAREN: @@ -842,9 +723,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { case IToken.tEOC: int startingOffset = LA(1).getOffset(); IToken t1 = identifier(); - IASTIdExpression idExpression = createIdExpression(); IASTName name = createName(t1); - idExpression.setName(name); + IASTIdExpression idExpression = nodeFactory.newIdExpression(name); ((ASTNode) idExpression).setOffsetAndLength((ASTNode) name); return idExpression; default: @@ -856,14 +736,6 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } - protected IASTLiteralExpression createLiteralExpression() { - return new CASTLiteralExpression(); - } - - @Override - protected IASTIdExpression createIdExpression() { - return new CASTIdExpression(); - } @Override protected IASTTypeId typeId(DeclarationOptions option) throws EndOfFileException { @@ -894,20 +766,12 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { fPreventKnrCheck--; } - IASTTypeId result = createTypeId(); + IASTTypeId result = nodeFactory.newTypeId(declSpecifier, declarator); ((ASTNode) result).setOffsetAndLength(startingOffset, figureEndOffset( declSpecifier, declarator) - startingOffset); - - result.setDeclSpecifier(declSpecifier); - result.setAbstractDeclarator(declarator); - return result; } - protected IASTTypeId createTypeId() { - return new CASTTypeId(); - } - /** * Parse a Pointer Operator. * @@ -955,18 +819,15 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { break; } - IASTPointerOperator po = createPointer(); + ICASTPointer po = nodeFactory.newPointer(); ((ASTNode) po).setOffsetAndLength(startOffset, last.getEndOffset() - startOffset); - ((ICASTPointer) po).setConst(isConst); - ((ICASTPointer) po).setVolatile(isVolatile); - ((ICASTPointer) po).setRestrict(isRestrict); + po.setConst(isConst); + po.setVolatile(isVolatile); + po.setRestrict(isRestrict); pointerOps.add(po); } } - protected ICASTPointer createPointer() { - return new CASTPointer(); - } private final static int INLINE=0x1, CONST=0x2, RESTRICT=0x4, VOLATILE=0x8, SHORT=0x10, UNSIGNED= 0x20, SIGNED=0x40, COMPLEX=0x80, IMAGINARY=0x100; @@ -1133,10 +994,10 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { lookAheadForDeclarator(declOption); } } catch (FoundAggregateInitializer e) { - e.fDeclSpec= createSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); + e.fDeclSpec= buildSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); throw e; } catch (FoundDeclaratorException e) { - e.declSpec= createSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); + e.declSpec= buildSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); IToken mark= mark(); try { @@ -1144,7 +1005,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { final IASTDeclarator altDtor = initDeclarator(declOption); if (LA(1) == e.currToken) { e.altDeclarator= altDtor; - e.altSpec= createNamedTypeSpecifier(idToken, storageClass, options, offset, idToken.getEndOffset()); + e.altSpec= buildNamedTypeSpecifier(idToken, storageClass, options, offset, idToken.getEndOffset()); } } catch (FoundAggregateInitializer lie) { lie.fDeclSpec= e.declSpec; @@ -1255,31 +1116,28 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } if (identifier != null) - return createNamedTypeSpecifier(identifier, storageClass, options, offset, endOffset); + return buildNamedTypeSpecifier(identifier, storageClass, options, offset, endOffset); - return createSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); + return buildSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); } - private ICASTTypedefNameSpecifier createNamedTypeSpecifier(IToken identifier, int storageClass, + private ICASTTypedefNameSpecifier buildNamedTypeSpecifier(IToken identifier, int storageClass, int options, int offset, int endOffset) { - ICASTTypedefNameSpecifier declSpec = (ICASTTypedefNameSpecifier)createNamedTypeSpecifier(); IASTName name = createName(identifier); - declSpec.setName(name); + ICASTTypedefNameSpecifier declSpec = nodeFactory.newTypedefNameSpecifier(name); configureDeclSpec(declSpec, storageClass, options); declSpec.setRestrict((options & RESTRICT) != 0); ((ASTNode) declSpec).setOffsetAndLength(offset, endOffset - offset); return declSpec; } - private ICASTSimpleDeclSpecifier createSimpleDeclSpec(int storageClass, int simpleType, + private ICASTSimpleDeclSpecifier buildSimpleDeclSpec(int storageClass, int simpleType, int options, int isLong, IASTExpression typeofExpression, int offset, int endOffset) { - ICASTSimpleDeclSpecifier declSpec = null; - if (typeofExpression != null) { - declSpec = createGCCSimpleTypeSpecifier(); - ((IGCCASTSimpleDeclSpecifier) declSpec).setTypeofExpression(typeofExpression); - } else { - declSpec = createSimpleTypeSpecifier(); - } + ICASTSimpleDeclSpecifier declSpec; + if (typeofExpression != null) + declSpec = nodeFactory.newSimpleDeclSpecifierGCC(typeofExpression); + else + declSpec = nodeFactory.newSimpleDeclSpecifier(); configureDeclSpec(declSpec, storageClass, options); declSpec.setType(simpleType); @@ -1327,18 +1185,6 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { return false; } - protected ICASTSimpleDeclSpecifier createSimpleTypeSpecifier() { - return new CASTSimpleDeclSpecifier(); - } - - protected IGCCASTSimpleDeclSpecifier createGCCSimpleTypeSpecifier() { - return new GCCASTSimpleDeclSpecifier(); - } - - @Override - protected IASTNamedTypeSpecifier createNamedTypeSpecifier() { - return new CASTTypedefNameSpecifier(); - } /** * Parse a class/struct/union definition. @@ -1386,10 +1232,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { throwBacktrack(errorPoint); } - IASTName name = (nameToken == null) ? createName() : createName(nameToken); - ICASTCompositeTypeSpecifier result = createCompositeTypeSpecifier(); - result.setKey(classKind); - result.setName(name); + IASTName name = (nameToken == null) ? nodeFactory.newName() : createName(nameToken); + ICASTCompositeTypeSpecifier result = nodeFactory.newCompositeTypeSpecifier(classKind, name); int endOffset= consume().getEndOffset(); int declOffset= -1; @@ -1435,17 +1279,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { return result; } - @Override - protected IASTName createName() { - return new CASTName(); - } - protected ICASTCompositeTypeSpecifier createCompositeTypeSpecifier() { - return new CASTCompositeTypeSpecifier(); - } - - protected ICASTElaboratedTypeSpecifier elaboratedTypeSpecifier() - throws BacktrackException, EndOfFileException { + protected IASTElaboratedTypeSpecifier elaboratedTypeSpecifier() throws BacktrackException, EndOfFileException { // this is an elaborated class specifier IToken t = consume(); int eck = 0; @@ -1470,16 +1305,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { IToken identifier = identifier(); IASTName name = createName(identifier); - ICASTElaboratedTypeSpecifier result = createElaboratedTypeSpecifier(); - result.setName(name); - result.setKind(eck); + IASTElaboratedTypeSpecifier result = nodeFactory.newElaboratedTypeSpecifier(eck, name); ((ASTNode) result).setOffsetAndLength(t.getOffset(), calculateEndOffset(name) - t.getOffset()); return result; } - protected ICASTElaboratedTypeSpecifier createElaboratedTypeSpecifier() { - return new CASTElaboratedTypeSpecifier(); - } @Override protected IASTDeclarator initDeclarator(final DeclarationOptions option) @@ -1543,7 +1373,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { if (option.fAllowAbstract) { final IToken mark= mark(); try { - cand1= declarator(pointerOps, createName(), null, startingOffset, endOffset, option); + cand1= declarator(pointerOps, nodeFactory.newName(), null, startingOffset, endOffset, option); if (option.fRequireAbstract) return cand1; @@ -1587,7 +1417,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { if (!option.fAllowBitField || LT(1) != IToken.tCOLON) throwBacktrack(LA(1)); } - return declarator(pointerOps, createName(), null, startingOffset, endOffset, option); + return declarator(pointerOps, nodeFactory.newName(), null, startingOffset, endOffset, option); } private IASTDeclarator declarator(final List pointerOps, @@ -1634,7 +1464,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers); if (result == null) { - result= createDeclarator(); + result= nodeFactory.newDeclarator(null); setDeclaratorID(result, declaratorName, nestedDeclarator); } else { endOffset= calculateEndOffset(result); @@ -1666,7 +1496,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { private void setDeclaratorID(IASTDeclarator declarator, IASTName declaratorName, IASTDeclarator nestedDeclarator) { if (nestedDeclarator != null) { declarator.setNestedDeclarator(nestedDeclarator); - declarator.setName(createName()); + declarator.setName(nodeFactory.newName()); } else { declarator.setName(declaratorName); } @@ -1729,10 +1559,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } } - ICASTKnRFunctionDeclarator functionDecltor = createKnRFunctionDeclarator(); - parmDeclarations = (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, parmDeclarations ); - functionDecltor.setParameterDeclarations(parmDeclarations); - functionDecltor.setParameterNames(parmNames); + parmDeclarations = (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, parmDeclarations ); + ICASTKnRFunctionDeclarator functionDecltor = nodeFactory.newKnRFunctionDeclarator(parmNames, parmDeclarations); ((ASTNode) functionDecltor).setOffsetAndLength(startOffset, endOffset-startOffset); return functionDecltor; } @@ -1773,7 +1601,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { break; } } - IASTStandardFunctionDeclarator fc = createFunctionDeclarator(); + IASTStandardFunctionDeclarator fc = nodeFactory.newFunctionDeclarator(null); fc.setVarArgs(encounteredVarArgs); if (parameters != null) { for (IASTParameterDeclaration pd : parameters) { @@ -1816,7 +1644,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { throwBacktrack(LA(1)); final int endOffset = calculateEndOffset(arrayMods.get(arrayMods.size() - 1)); - final IASTArrayDeclarator d = createArrayDeclarator(); + final IASTArrayDeclarator d = nodeFactory.newArrayDeclarator(null); for (IASTArrayModifier m : arrayMods) { d.addArrayModifier(m); } @@ -1835,32 +1663,17 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { final IASTExpression bitField = constantExpression(); final int endOffset = calculateEndOffset(bitField); - IASTFieldDeclarator d = createFieldDeclarator(); + IASTFieldDeclarator d = nodeFactory.newFieldDeclarator(null, bitField); d.setBitFieldSize(bitField); ((ASTNode) d).setOffsetAndLength(start, endOffset-start); return d; } - protected IASTArrayDeclarator createArrayDeclarator() { - return new CASTArrayDeclarator(); - } - - protected IASTFieldDeclarator createFieldDeclarator() { - return new CASTFieldDeclarator(); - } - - protected IASTStandardFunctionDeclarator createFunctionDeclarator() { - return new CASTFunctionDeclarator(); - } - - protected ICASTKnRFunctionDeclarator createKnRFunctionDeclarator() { - return new CASTKnRFunctionDeclarator(); - } @Override protected IASTName createName(IToken t) { - IASTName n = new CASTName(t.getCharImage()); + IASTName n = nodeFactory.newName(t.getCharImage()); switch (t.getType()) { case IToken.tCOMPLETION: case IToken.tEOC: @@ -1871,9 +1684,6 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { return n; } - protected IASTDeclarator createDeclarator() { - return new CASTDeclarator(); - } protected void consumeArrayModifiers(List arrayMods) throws EndOfFileException, BacktrackException { while (LT(1) == IToken.tLBRACKET) { @@ -1934,11 +1744,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } - IASTArrayModifier arrayMod = null; + IASTArrayModifier arrayMod; if (!(isStatic || isRestrict || isConst || isVolatile || isVarSized)) - arrayMod = createArrayModifier(); + arrayMod = nodeFactory.newArrayModifier(null); else { - ICASTArrayModifier temp = createCArrayModifier(); + ICASTArrayModifier temp = nodeFactory.newModifiedArrayModifier(null); temp.setStatic(isStatic); temp.setConst(isConst); temp.setVolatile(isVolatile); @@ -1954,13 +1764,6 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } } - protected ICASTArrayModifier createCArrayModifier() { - return new CASTModifiedArrayModifier(); - } - - protected IASTArrayModifier createArrayModifier() { - return new CASTArrayModifier(); - } protected IASTParameterDeclaration parameterDeclaration(DeclarationOptions option) throws BacktrackException, EndOfFileException { final IToken current = LA(1); @@ -1993,15 +1796,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } final int length = figureEndOffset(declSpec, declarator) - startingOffset; - IASTParameterDeclaration result = createParameterDeclaration(); + IASTParameterDeclaration result = nodeFactory.newParameterDeclaration(declSpec, declarator); ((ASTNode) result).setOffsetAndLength(startingOffset, length); - result.setDeclSpecifier(declSpec); - result.setDeclarator(declarator); if (altDeclarator != null && altDeclSpec != null) { - IASTParameterDeclaration alt = createParameterDeclaration(); + IASTParameterDeclaration alt = nodeFactory.newParameterDeclaration(altDeclSpec, altDeclarator); ((ASTNode) alt).setOffsetAndLength(startingOffset, length); - alt.setDeclSpecifier(altDeclSpec); - alt.setDeclarator(altDeclarator); // order is important, prefer alternative over the declarator found via the lookahead. result= new CASTAmbiguousParameterDeclaration(alt, result); ((ASTNode) result).setOffsetAndLength((ASTNode) alt); @@ -2009,141 +1808,15 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { return result; } - protected IASTParameterDeclaration createParameterDeclaration() { - return new CASTParameterDeclaration(); - } - @Override protected IASTTranslationUnit getTranslationUnit() { return translationUnit; } - @Override - protected IASTCompoundStatement createCompoundStatement() { - return new CASTCompoundStatement(); - } @Override - protected IASTBinaryExpression createBinaryExpression() { - return new CASTBinaryExpression(); - } - - @Override - protected IASTConditionalExpression createConditionalExpression() { - return new CASTConditionalExpression(); - } - - @Override - protected IASTUnaryExpression createUnaryExpression() { - return new CASTUnaryExpression(); - } - - @Override - protected IGNUASTCompoundStatementExpression createCompoundStatementExpression() { - return new CASTCompoundStatementExpression(); - } - - @Override - protected IASTExpressionList createExpressionList() { - return new CASTExpressionList(); - } - - @Override - protected IASTEnumerator createEnumerator() { - return new CASTEnumerator(); - } - - @Override - protected IASTLabelStatement createLabelStatement() { - return new CASTLabelStatement(); - } - - @Override - protected IASTGotoStatement createGoToStatement() { - return new CASTGotoStatement(); - } - - @Override - protected IASTReturnStatement createReturnStatement() { - return new CASTReturnStatement(); - } - - protected IASTForStatement createForStatement() { - return new CASTForStatement(); - } - - @Override - protected IASTContinueStatement createContinueStatement() { - return new CASTContinueStatement(); - } - - @Override - protected IASTDoStatement createDoStatement() { - return new CASTDoStatement(); - } - - @Override - protected IASTBreakStatement createBreakStatement() { - return new CASTBreakStatement(); - } - - @Override - protected IASTWhileStatement createWhileStatement() { - return new CASTWhileStatement(); - } - - @Override - protected IASTNullStatement createNullStatement() { - return new CASTNullStatement(); - } - - protected IASTSwitchStatement createSwitchStatement() { - return new CASTSwitchStatement(); - } - - protected IASTIfStatement createIfStatement() { - return new CASTIfStatement(); - } - - @Override - protected IASTDefaultStatement createDefaultStatement() { - return new CASTDefaultStatement(); - } - - @Override - protected IASTCaseStatement createCaseStatement() { - return new CASTCaseStatement(); - } - - @Override - protected IASTExpressionStatement createExpressionStatement() { - return new CASTExpressionStatement(); - } - - @Override - protected IASTDeclarationStatement createDeclarationStatement() { - return new CASTDeclarationStatement(); - } - - @Override - protected IASTASMDeclaration createASMDirective() { - return new CASTASMDeclaration(); - } - - @Override - protected IASTEnumerationSpecifier createEnumerationSpecifier() { - return new CASTEnumerationSpecifier(); - } - - @Override - protected IASTCastExpression createCastExpression() { - return new CASTCastExpression(); - } - - @Override - protected IASTStatement statement() throws EndOfFileException, - BacktrackException { + protected IASTStatement statement() throws EndOfFileException, BacktrackException { switch (LT(1)) { // labeled statements case IToken.t_case: @@ -2193,22 +1866,6 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { translationUnit = null; } - @Override - protected IASTProblemStatement createProblemStatement() { - return new CASTProblemStatement(); - } - - @Override - protected IASTProblemExpression createProblemExpression() { - return new CASTProblemExpression(); - } - - @Override - protected IASTProblem createProblem(int signal, int offset, int length) { - IASTProblem result = new CASTProblem(signal, CharArrayUtils.EMPTY, true); - ((ASTNode) result).setOffsetAndLength(offset, length); - return result; - } private int countKnRCParms() { IToken mark = null; @@ -2288,8 +1945,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { private IASTProblemDeclaration createKnRCProblemDeclaration(int offset, int length) throws EndOfFileException { IASTProblem p = createProblem(IProblem.SYNTAX_ERROR, offset, length); - IASTProblemDeclaration pd = createProblemDeclaration(); - pd.setProblem(p); + IASTProblemDeclaration pd = nodeFactory.newProblemDeclaration(p); ((ASTNode) pd).setOffsetAndLength((ASTNode) p); // consume until LBRACE is found (to leave off at the function body and @@ -2343,8 +1999,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { IASTExpression condition= condition(true); if (LT(1) == IToken.tEOC) { // Completing in the condition - IASTIfStatement new_if = createIfStatement(); - new_if.setConditionExpression(condition); + IASTIfStatement new_if = nodeFactory.newIfStatement(condition, null, null); if (if_statement != null) { if_statement.setElseClause(new_if); @@ -2354,7 +2009,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { consume(IToken.tRPAREN); IASTStatement thenClause = statement(); - IASTIfStatement new_if_statement = createIfStatement(); + IASTIfStatement new_if_statement = nodeFactory.newIfStatement(null, null, null); ((ASTNode) new_if_statement).setOffset(so); if( condition != null ) // shouldn't be possible but failure in condition() makes it so { @@ -2436,15 +2091,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { } IASTStatement switch_body = parseSwitchBody(); - IASTSwitchStatement switch_statement = createSwitchStatement(); + IASTSwitchStatement switch_statement = nodeFactory.newSwitchStatement(switch_condition, switch_body); ((ASTNode) switch_statement).setOffsetAndLength(startOffset, (switch_body != null ? calculateEndOffset(switch_body) : LA(1).getEndOffset()) - startOffset); - switch_statement.setControllerExpression(switch_condition); - - if (switch_body != null) { - switch_statement.setBody(switch_body); - } - return switch_statement; } @@ -2487,22 +2136,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { default: throw backtrack; } - IASTForStatement for_statement = createForStatement(); - IASTStatement for_body = null; - if (LT(1) != IToken.tEOC) { - for_body = statement(); - ((ASTNode) for_statement).setOffsetAndLength(startOffset, calculateEndOffset(for_body) - startOffset); - } - - for_statement.setInitializerStatement(init); - if (for_condition != null) { - for_statement.setConditionExpression(for_condition); - } - if (iterationExpression != null) { - for_statement.setIterationExpression(iterationExpression); - } - if (for_body != null) { + IASTForStatement for_statement = nodeFactory.newForStatement(init, for_condition, iterationExpression, null); + if (LT(1) != IToken.tEOC) { + IASTStatement for_body = statement(); + ((ASTNode) for_statement).setOffsetAndLength(startOffset, calculateEndOffset(for_body) - startOffset); for_statement.setBody(for_body); } return for_statement; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTASMDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTASMDeclaration.java index d93907db202..4c47b26a780 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTASMDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTASMDeclaration.java @@ -34,6 +34,7 @@ public class CPPASTASMDeclaration extends ASTNode implements IASTASMDeclaration } public void setAssembly(String assembly) { + assertNotFrozen(); this.assembly = assembly.toCharArray(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousDeclaration.java index 0d4b60197c7..6118322dfbc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousDeclaration.java @@ -31,6 +31,7 @@ public class CPPASTAmbiguousDeclaration extends CPPASTAmbiguity implements IASTA } public void addDeclaration(IASTDeclaration d) { + assertNotFrozen(); if (d != null) { decls = (IASTDeclaration[]) ArrayUtil.append(IASTDeclaration.class, decls, ++declsPos, d ); d.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousDeclarator.java index c5d81177cd7..66bcc8977e3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousDeclarator.java @@ -40,6 +40,7 @@ public class CPPASTAmbiguousDeclarator extends CPPASTAmbiguity implements IASTAm } public void addDeclarator(IASTDeclarator d) { + assertNotFrozen(); if (d != null) { dtors = (IASTDeclarator[]) ArrayUtil.append(IASTDeclarator.class, dtors, ++dtorPos, d); d.setParent(this); @@ -78,18 +79,22 @@ public class CPPASTAmbiguousDeclarator extends CPPASTAmbiguity implements IASTAm } public void addPointerOperator(IASTPointerOperator operator) { + assertNotFrozen(); Assert.isLegal(false); } public void setInitializer(IASTInitializer initializer) { + assertNotFrozen(); Assert.isLegal(false); } public void setName(IASTName name) { + assertNotFrozen(); Assert.isLegal(false); } public void setNestedDeclarator(IASTDeclarator nested) { + assertNotFrozen(); Assert.isLegal(false); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousExpression.java index 4af7824482e..9909d069e88 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousExpression.java @@ -36,6 +36,7 @@ public class CPPASTAmbiguousExpression extends CPPASTAmbiguity implements } public void addExpression(IASTExpression e) { + assertNotFrozen(); if (e != null) { exp = (IASTExpression[]) ArrayUtil.append( IASTExpression.class, exp, ++expPos, e ); e.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousStatement.java index 1495dcdbdb2..a348a3bb5c7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousStatement.java @@ -27,6 +27,7 @@ public class CPPASTAmbiguousStatement extends CPPASTAmbiguity implements } public void addStatement(IASTStatement s) { + assertNotFrozen(); if (s != null) { stmts = (IASTStatement[]) ArrayUtil.append( IASTStatement.class, stmts, ++stmtsPos, s ); s.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousTemplateArgument.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousTemplateArgument.java index 4bf24160256..bbc3cdcf460 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousTemplateArgument.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousTemplateArgument.java @@ -61,10 +61,12 @@ public class CPPASTAmbiguousTemplateArgument extends CPPASTAmbiguity implements } public void addTypeId(IASTTypeId typeId) { + assertNotFrozen(); addNode(typeId); } public void addIdExpression(IASTIdExpression idExpression) { + assertNotFrozen(); addNode(idExpression); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayDeclarator.java index 2266c9fdaa0..60ed1825353 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayDeclarator.java @@ -47,6 +47,7 @@ public class CPPASTArrayDeclarator extends CPPASTDeclarator implements } public void addArrayModifier(IASTArrayModifier arrayModifier) { + assertNotFrozen(); if (arrayModifier != null) { arrayMods = (IASTArrayModifier[]) ArrayUtil.append( IASTArrayModifier.class, arrayMods, ++arrayModsPos, arrayModifier ); arrayModifier.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayModifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayModifier.java index 4d590847fcb..f414205a24e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayModifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayModifier.java @@ -37,6 +37,7 @@ public class CPPASTArrayModifier extends ASTNode implements IASTArrayModifier, I } public void setConstantExpression(IASTExpression expression) { + assertNotFrozen(); exp = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java index 52a58e80324..3dcfc77d85c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java @@ -41,6 +41,7 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements IASTArray } public void setArrayExpression(IASTExpression expression) { + assertNotFrozen(); arrayExpression = expression; if (expression != null) { expression.setParent(this); @@ -53,6 +54,7 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements IASTArray } public void setSubscriptExpression(IASTExpression expression) { + assertNotFrozen(); subscriptExp = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseDeclSpecifier.java index 974ecce623d..3366c983052 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseDeclSpecifier.java @@ -36,6 +36,7 @@ public abstract class CPPASTBaseDeclSpecifier extends ASTNode implements ICPPAST } public void setStorageClass(int storageClass) { + assertNotFrozen(); sc = storageClass; } @@ -44,6 +45,7 @@ public abstract class CPPASTBaseDeclSpecifier extends ASTNode implements ICPPAST } public void setConst(boolean value) { + assertNotFrozen(); isConst = value; } @@ -52,6 +54,7 @@ public abstract class CPPASTBaseDeclSpecifier extends ASTNode implements ICPPAST } public void setVolatile(boolean value) { + assertNotFrozen(); volatil = value; } @@ -60,10 +63,12 @@ public abstract class CPPASTBaseDeclSpecifier extends ASTNode implements ICPPAST } public void setInline(boolean value) { + assertNotFrozen(); this.inline = value; } public void setFriend(boolean value) { + assertNotFrozen(); friend = value; } @@ -72,6 +77,7 @@ public abstract class CPPASTBaseDeclSpecifier extends ASTNode implements ICPPAST } public void setVirtual(boolean value) { + assertNotFrozen(); virtual = value; } @@ -80,6 +86,7 @@ public abstract class CPPASTBaseDeclSpecifier extends ASTNode implements ICPPAST } public void setExplicit(boolean value) { + assertNotFrozen(); this.explicit = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseSpecifier.java index 4c4c0ed5d84..431385ce674 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseSpecifier.java @@ -51,6 +51,7 @@ public class CPPASTBaseSpecifier extends ASTNode implements } public void setVirtual(boolean value) { + assertNotFrozen(); isVirtual = value; } @@ -59,6 +60,7 @@ public class CPPASTBaseSpecifier extends ASTNode implements } public void setVisibility(int visibility) { + assertNotFrozen(); this.visibility = visibility; } @@ -67,6 +69,7 @@ public class CPPASTBaseSpecifier extends ASTNode implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBinaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBinaryExpression.java index 419d5c78a27..618c995b140 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBinaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBinaryExpression.java @@ -51,10 +51,12 @@ public class CPPASTBinaryExpression extends ASTNode implements } public void setOperator(int op) { + assertNotFrozen(); this.op = op; } public void setOperand1(IASTExpression expression) { + assertNotFrozen(); operand1 = expression; if (expression != null) { expression.setParent(this); @@ -63,6 +65,7 @@ public class CPPASTBinaryExpression extends ASTNode implements } public void setOperand2(IASTExpression expression) { + assertNotFrozen(); operand2 = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCaseStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCaseStatement.java index ac4b8a5a0a9..e3112278b85 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCaseStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCaseStatement.java @@ -36,6 +36,7 @@ public class CPPASTCaseStatement extends ASTNode implements IASTCaseStatement, I } public void setExpression(IASTExpression expression) { + assertNotFrozen(); this.expression = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCastExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCastExpression.java index 1029271b708..c9cb3384b0b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCastExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCastExpression.java @@ -32,6 +32,7 @@ public class CPPASTCastExpression extends CPPASTUnaryExpression implements ICPPA } public void setTypeId(IASTTypeId typeId) { + assertNotFrozen(); this.typeId = typeId; if (typeId != null) { typeId.setParent(this); @@ -45,6 +46,7 @@ public class CPPASTCastExpression extends CPPASTUnaryExpression implements ICPPA @Override public void setOperand(IASTExpression expression) { + assertNotFrozen(); super.setOperand(expression); // this needs to be overridden because CPPASTUnaryExpression sets // propertyInParent to ICPPASTUnaryExpression.OPERAND, we want diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCatchHandler.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCatchHandler.java index b0f9c068dd9..cdb33bae0f1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCatchHandler.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCatchHandler.java @@ -39,6 +39,7 @@ public class CPPASTCatchHandler extends ASTNode implements ICPPASTCatchHandler, } public void setIsCatchAll(boolean isEllipsis) { + assertNotFrozen(); isCatchAll = isEllipsis; } @@ -47,6 +48,7 @@ public class CPPASTCatchHandler extends ASTNode implements ICPPASTCatchHandler, } public void setCatchBody(IASTStatement compoundStatement) { + assertNotFrozen(); body = compoundStatement; if (compoundStatement != null) { compoundStatement.setParent(this); @@ -59,6 +61,7 @@ public class CPPASTCatchHandler extends ASTNode implements ICPPASTCatchHandler, } public void setDeclaration(IASTDeclaration decl) { + assertNotFrozen(); declaration = decl; if (decl != null) { decl.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java index e4d6fa28790..1277b08e32a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java @@ -52,6 +52,7 @@ public class CPPASTCompositeTypeSpecifier extends CPPASTBaseDeclSpecifier } public void addBaseSpecifier(ICPPASTBaseSpecifier baseSpec) { + assertNotFrozen(); if (baseSpec != null) { baseSpec.setParent(this); baseSpec.setPropertyInParent(BASE_SPECIFIER); @@ -64,6 +65,7 @@ public class CPPASTCompositeTypeSpecifier extends CPPASTBaseDeclSpecifier } public void setKey(int key) { + assertNotFrozen(); k = key; } @@ -72,6 +74,7 @@ public class CPPASTCompositeTypeSpecifier extends CPPASTBaseDeclSpecifier } public void setName(IASTName name) { + assertNotFrozen(); this.n = name; if (name != null) { name.setParent(this); @@ -86,6 +89,7 @@ public class CPPASTCompositeTypeSpecifier extends CPPASTBaseDeclSpecifier } public void addMemberDeclaration(IASTDeclaration decl) { + assertNotFrozen(); declarations = (IASTDeclaration[]) ArrayUtil.append( IASTDeclaration.class, declarations, decl ); if(decl != null) { decl.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatement.java index 4fc1eb0d23e..c700cbd185a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatement.java @@ -36,6 +36,7 @@ public class CPPASTCompoundStatement extends ASTNode implements } public void addStatement(IASTStatement statement) { + assertNotFrozen(); statements = (IASTStatement[]) ArrayUtil.append( IASTStatement.class, statements, statement ); if (statement != null) { statement.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatementExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatementExpression.java index 28230add049..15ced24a36e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatementExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatementExpression.java @@ -37,6 +37,7 @@ public class CPPASTCompoundStatementExpression extends ASTNode implements IGNUAS } public void setCompoundStatement(IASTCompoundStatement statement) { + assertNotFrozen(); this.statement = statement; if (statement != null) { statement.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConditionalExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConditionalExpression.java index 4780b277b04..d150e58eb56 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConditionalExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConditionalExpression.java @@ -44,6 +44,7 @@ public class CPPASTConditionalExpression extends ASTNode implements } public void setLogicalConditionExpression(IASTExpression expression) { + assertNotFrozen(); condition = expression; if (expression != null) { expression.setParent(this); @@ -56,6 +57,7 @@ public class CPPASTConditionalExpression extends ASTNode implements } public void setPositiveResultExpression(IASTExpression expression) { + assertNotFrozen(); this.postive = expression; if (expression != null) { expression.setParent(this); @@ -68,6 +70,7 @@ public class CPPASTConditionalExpression extends ASTNode implements } public void setNegativeResultExpression(IASTExpression expression) { + assertNotFrozen(); this.negative = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorChainInitializer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorChainInitializer.java index d3122dd3205..ac2214c28f5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorChainInitializer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorChainInitializer.java @@ -32,9 +32,9 @@ public class CPPASTConstructorChainInitializer extends ASTNode implements public CPPASTConstructorChainInitializer() { } - public CPPASTConstructorChainInitializer(IASTName name, IASTExpression value) { - setMemberInitializerId(name); - setInitializerValue(value); + public CPPASTConstructorChainInitializer(IASTName memberInitializerid, IASTExpression initializerValue) { + setMemberInitializerId(memberInitializerid); + setInitializerValue(initializerValue); } public IASTName getMemberInitializerId() { @@ -42,6 +42,7 @@ public class CPPASTConstructorChainInitializer extends ASTNode implements } public void setMemberInitializerId(IASTName name) { + assertNotFrozen(); this.name = name; if(name != null) { name.setParent(this); @@ -55,6 +56,7 @@ public class CPPASTConstructorChainInitializer extends ASTNode implements public void setInitializerValue(IASTExpression expression) { + assertNotFrozen(); value = expression; if(expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorInitializer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorInitializer.java index 4c7187354de..4e6f55973e5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorInitializer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorInitializer.java @@ -38,6 +38,7 @@ public class CPPASTConstructorInitializer extends ASTNode implements } public void setExpression(IASTExpression expression) { + assertNotFrozen(); this.exp = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java index 12da6c4a870..5829309d946 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java @@ -41,6 +41,7 @@ public class CPPASTConversionName extends CPPASTName implements ICPPASTConversio } public void setTypeId(IASTTypeId typeId) { + assertNotFrozen(); this.typeId=typeId; if (typeId != null) { typeId.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarationStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarationStatement.java index 60962270d7f..3a7e60bee16 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarationStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarationStatement.java @@ -38,6 +38,7 @@ public class CPPASTDeclarationStatement extends ASTNode implements } public void setDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); this.declaration = declaration; if (declaration != null) { declaration.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java index 76680129096..6dd63b1d5ab 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java @@ -69,6 +69,7 @@ public class CPPASTDeclarator extends ASTNode implements IASTDeclarator { } public void setInitializer(IASTInitializer initializer) { + assertNotFrozen(); this.initializer = initializer; if (initializer != null) { initializer.setParent(this); @@ -77,6 +78,7 @@ public class CPPASTDeclarator extends ASTNode implements IASTDeclarator { } public void addPointerOperator(IASTPointerOperator operator) { + assertNotFrozen(); if (operator != null) { operator.setParent(this); operator.setPropertyInParent(POINTER_OPERATOR); @@ -85,6 +87,7 @@ public class CPPASTDeclarator extends ASTNode implements IASTDeclarator { } public void setNestedDeclarator(IASTDeclarator nested) { + assertNotFrozen(); this.nestedDeclarator = nested; if (nested != null) { nested.setParent(this); @@ -93,6 +96,7 @@ public class CPPASTDeclarator extends ASTNode implements IASTDeclarator { } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeleteExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeleteExpression.java index e2a2ea9f0a3..13b2ef5da89 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeleteExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeleteExpression.java @@ -42,6 +42,7 @@ public class CPPASTDeleteExpression extends ASTNode implements } public void setOperand(IASTExpression expression) { + assertNotFrozen(); operand = expression; if (expression != null) { expression.setParent(this); @@ -50,6 +51,7 @@ public class CPPASTDeleteExpression extends ASTNode implements } public void setIsGlobal(boolean global) { + assertNotFrozen(); isGlobal = global; } @@ -58,6 +60,7 @@ public class CPPASTDeleteExpression extends ASTNode implements } public void setIsVectored(boolean vectored) { + assertNotFrozen(); isVectored = vectored; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDoStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDoStatement.java index c9325d80da6..b3e92296a99 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDoStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDoStatement.java @@ -40,6 +40,7 @@ public class CPPASTDoStatement extends ASTNode implements IASTDoStatement, IASTA } public void setBody(IASTStatement body) { + assertNotFrozen(); this.body = body; if (body != null) { body.setParent(this); @@ -52,6 +53,7 @@ public class CPPASTDoStatement extends ASTNode implements IASTDoStatement, IASTA } public void setCondition(IASTExpression condition) { + assertNotFrozen(); this.condition = condition; if (condition != null) { condition.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTElaboratedTypeSpecifier.java index 666324fa2f5..73c3b6c642b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTElaboratedTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTElaboratedTypeSpecifier.java @@ -44,6 +44,7 @@ public class CPPASTElaboratedTypeSpecifier extends CPPASTBaseDeclSpecifier } public void setKind(int value) { + assertNotFrozen(); this.kind = value; } @@ -52,6 +53,7 @@ public class CPPASTElaboratedTypeSpecifier extends CPPASTBaseDeclSpecifier } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java index 97089ee57d3..052052dd9d8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java @@ -42,6 +42,7 @@ public class CPPASTEnumerationSpecifier extends CPPASTBaseDeclSpecifier } public void addEnumerator(IASTEnumerator enumerator) { + assertNotFrozen(); if (enumerator != null) { enumerator.setParent(this); enumerator.setPropertyInParent(ENUMERATOR); @@ -61,6 +62,7 @@ public class CPPASTEnumerationSpecifier extends CPPASTBaseDeclSpecifier private int enumeratorsPos=-1; public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExplicitTemplateInstantiation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExplicitTemplateInstantiation.java index fe9f67afaeb..d6325985abb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExplicitTemplateInstantiation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExplicitTemplateInstantiation.java @@ -38,6 +38,7 @@ public class CPPASTExplicitTemplateInstantiation extends ASTNode implements } public void setDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); this.declaration = declaration; if (declaration != null) { declaration.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionList.java index fef5322ac49..c296ca18390 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionList.java @@ -32,6 +32,7 @@ public class CPPASTExpressionList extends ASTNode implements } public void addExpression(IASTExpression expression) { + assertNotFrozen(); expressions = (IASTExpression [])ArrayUtil.append( IASTExpression.class, expressions, expression ); if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionStatement.java index 8e51c6b5318..8b5c13bb8a2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionStatement.java @@ -38,6 +38,7 @@ public class CPPASTExpressionStatement extends ASTNode implements } public void setExpression(IASTExpression expression) { + assertNotFrozen(); this.expression = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldDeclarator.java index 929935d4633..ff8a1548e38 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldDeclarator.java @@ -40,6 +40,7 @@ public class CPPASTFieldDeclarator extends CPPASTDeclarator implements } public void setBitFieldSize(IASTExpression size) { + assertNotFrozen(); this.bitField = size; if (size != null) { size.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java index b65a078294e..e2fa1a1d8f7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java @@ -42,16 +42,10 @@ public class CPPASTFieldReference extends ASTNode implements public CPPASTFieldReference() { } - - public CPPASTFieldReference(IASTName name, IASTExpression owner, boolean isDeref, boolean isTemplate) { - setFieldName(name); - setFieldOwner(owner); - this.isTemplate = isTemplate; - this.isDeref = isDeref; - } public CPPASTFieldReference(IASTName name, IASTExpression owner) { - this(name, owner, false, false); + setFieldName(name); + setFieldOwner(owner); } public boolean isTemplate() { @@ -59,6 +53,7 @@ public class CPPASTFieldReference extends ASTNode implements } public void setIsTemplate(boolean value) { + assertNotFrozen(); isTemplate = value; } @@ -67,6 +62,7 @@ public class CPPASTFieldReference extends ASTNode implements } public void setFieldOwner(IASTExpression expression) { + assertNotFrozen(); owner = expression; if (expression != null) { expression.setParent(this); @@ -79,6 +75,7 @@ public class CPPASTFieldReference extends ASTNode implements } public void setFieldName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -91,6 +88,7 @@ public class CPPASTFieldReference extends ASTNode implements } public void setIsPointerDereference(boolean value) { + assertNotFrozen(); isDeref = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTForStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTForStatement.java index d3576d6138d..c684808b98b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTForStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTForStatement.java @@ -58,6 +58,7 @@ public class CPPASTForStatement extends ASTNode implements ICPPASTForStatement, } public void setConditionExpression(IASTExpression condition) { + assertNotFrozen(); this.condition = condition; if (condition != null) { condition.setParent(this); @@ -70,6 +71,7 @@ public class CPPASTForStatement extends ASTNode implements ICPPASTForStatement, } public void setIterationExpression(IASTExpression iterator) { + assertNotFrozen(); this.iterationExpression = iterator; if (iterator != null) { iterator.setParent(this); @@ -82,6 +84,7 @@ public class CPPASTForStatement extends ASTNode implements ICPPASTForStatement, } public void setBody(IASTStatement statement) { + assertNotFrozen(); body = statement; if (statement != null) { statement.setParent(this); @@ -159,6 +162,7 @@ public class CPPASTForStatement extends ASTNode implements ICPPASTForStatement, } public void setInitializerStatement(IASTStatement statement) { + assertNotFrozen(); init = statement; if (statement != null) { statement.setParent(this); @@ -167,6 +171,7 @@ public class CPPASTForStatement extends ASTNode implements ICPPASTForStatement, } public void setConditionDeclaration(IASTDeclaration d) { + assertNotFrozen(); condDeclaration = d; if (d != null) { d.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionCallExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionCallExpression.java index 41a119b8733..d8278eae8af 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionCallExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionCallExpression.java @@ -38,6 +38,7 @@ public class CPPASTFunctionCallExpression extends ASTNode implements } public void setFunctionNameExpression(IASTExpression expression) { + assertNotFrozen(); this.functionName = expression; if (expression != null) { expression.setParent(this); @@ -50,6 +51,7 @@ public class CPPASTFunctionCallExpression extends ASTNode implements } public void setParameterExpression(IASTExpression expression) { + assertNotFrozen(); this.parameter = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDeclarator.java index 1278656708b..c558e443894 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDeclarator.java @@ -54,6 +54,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS } public void addParameterDeclaration(IASTParameterDeclaration parameter) { + assertNotFrozen(); if (parameter != null) { parameter.setParent(this); parameter.setPropertyInParent(FUNCTION_PARAMETER); @@ -66,6 +67,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS } public void setVarArgs(boolean value) { + assertNotFrozen(); varArgs = value; } @@ -74,6 +76,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS } public void setConst(boolean value) { + assertNotFrozen(); this.isConst = value; } @@ -82,6 +85,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS } public void setVolatile(boolean value) { + assertNotFrozen(); this.isVolatile = value; } @@ -90,10 +94,12 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS } public void setEmptyExceptionSpecification() { + assertNotFrozen(); typeIds= IASTTypeId.EMPTY_TYPEID_ARRAY; } public void addExceptionSpecificationTypeId(IASTTypeId typeId) { + assertNotFrozen(); if (typeId != null) { typeIds = (IASTTypeId[]) ArrayUtil.append(IASTTypeId.class, typeIds, ++typeIdsPos, typeId); typeId.setParent(this); @@ -106,6 +112,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS } public void setPureVirtual(boolean isPureVirtual) { + assertNotFrozen(); this.pureVirtual = isPureVirtual; } @@ -127,6 +134,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS @Deprecated public void addConstructorToChain(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer initializer) { + assertNotFrozen(); } public ICPPFunctionScope getFunctionScope() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDefinition.java index 9e699b3b859..cd6c948fa3d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDefinition.java @@ -55,6 +55,7 @@ public class CPPASTFunctionDefinition extends ASTNode implements } public void setDeclSpecifier(IASTDeclSpecifier declSpec) { + assertNotFrozen(); declSpecifier = declSpec; if (declSpec != null) { declSpec.setParent(this); @@ -67,6 +68,7 @@ public class CPPASTFunctionDefinition extends ASTNode implements } public void setDeclarator(IASTFunctionDeclarator declarator) { + assertNotFrozen(); this.declarator = declarator; if (declarator != null) { IASTDeclarator outerDtor= CPPVisitor.findOutermostDeclarator(declarator); @@ -80,6 +82,7 @@ public class CPPASTFunctionDefinition extends ASTNode implements } public void setBody(IASTStatement statement) { + assertNotFrozen(); bodyStatement = statement; if (statement != null) { statement.setParent(this); @@ -89,6 +92,7 @@ public class CPPASTFunctionDefinition extends ASTNode implements public void addMemberInitializer(ICPPASTConstructorChainInitializer initializer) { + assertNotFrozen(); if (initializer != null) { memInits= ArrayUtil.appendAt(ICPPASTConstructorChainInitializer.class, memInits, ++memInitPos, initializer); initializer.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionWithTryBlock.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionWithTryBlock.java index 3660f966b69..bf9dfe649e8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionWithTryBlock.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionWithTryBlock.java @@ -33,6 +33,7 @@ public class CPPASTFunctionWithTryBlock extends CPPASTFunctionDefinition impleme } public void addCatchHandler(ICPPASTCatchHandler statement) { + assertNotFrozen(); if (statement != null) { catchHandlers = (ICPPASTCatchHandler[]) ArrayUtil.append( ICPPASTCatchHandler.class, catchHandlers, ++catchHandlersPos, statement ); statement.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTGotoStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTGotoStatement.java index 4da7a3e809b..765a17e3505 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTGotoStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTGotoStatement.java @@ -35,6 +35,7 @@ public class CPPASTGotoStatement extends ASTNode implements IASTGotoStatement { } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java index 68c627f3385..866ccb29b81 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java @@ -41,6 +41,7 @@ public class CPPASTIdExpression extends ASTNode implements IASTIdExpression, IAS } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIfStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIfStatement.java index 93d35341bbb..f3c5611028c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIfStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIfStatement.java @@ -52,6 +52,7 @@ public class CPPASTIfStatement extends ASTNode implements ICPPASTIfStatement, IA } public void setConditionExpression(IASTExpression condition) { + assertNotFrozen(); this.condition = condition; if (condition != null) { condition.setParent(this); @@ -64,6 +65,7 @@ public class CPPASTIfStatement extends ASTNode implements ICPPASTIfStatement, IA } public void setThenClause(IASTStatement thenClause) { + assertNotFrozen(); this.thenClause = thenClause; if (thenClause != null) { thenClause.setParent(this); @@ -76,6 +78,7 @@ public class CPPASTIfStatement extends ASTNode implements ICPPASTIfStatement, IA } public void setElseClause(IASTStatement elseClause) { + assertNotFrozen(); this.elseClause = elseClause; if (elseClause != null) { elseClause.setParent(this); @@ -134,6 +137,7 @@ public class CPPASTIfStatement extends ASTNode implements ICPPASTIfStatement, IA } public void setConditionDeclaration(IASTDeclaration d) { + assertNotFrozen(); condDecl = d; if (d != null) { d.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTInitializerExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTInitializerExpression.java index a5ea3631c4e..3fa12395013 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTInitializerExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTInitializerExpression.java @@ -38,6 +38,7 @@ public class CPPASTInitializerExpression extends ASTNode implements } public void setExpression(IASTExpression expression) { + assertNotFrozen(); this.exp = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTInitializerList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTInitializerList.java index 8c355c85d50..2fb99cc0d38 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTInitializerList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTInitializerList.java @@ -28,6 +28,7 @@ public class CPPASTInitializerList extends ASTNode implements IASTInitializerLis } public void addInitializer( IASTInitializer d ) { + assertNotFrozen(); if (d != null) { initializers = (IASTInitializer[]) ArrayUtil.append( IASTInitializer.class, initializers, ++initializersPos, d ); d.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLabelStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLabelStatement.java index 4aeaa48b693..99e5acdeaac 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLabelStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLabelStatement.java @@ -41,6 +41,7 @@ public class CPPASTLabelStatement extends ASTNode implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -80,6 +81,7 @@ public class CPPASTLabelStatement extends ASTNode implements } public void setNestedStatement(IASTStatement s) { + assertNotFrozen(); nestedStatement = s; if (s != null) { s.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLinkageSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLinkageSpecification.java index e8cdce038a0..ff98152a9b9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLinkageSpecification.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLinkageSpecification.java @@ -38,6 +38,7 @@ public class CPPASTLinkageSpecification extends ASTNode implements } public void setLiteral(String value) { + assertNotFrozen(); this.literal = value; } @@ -47,6 +48,7 @@ public class CPPASTLinkageSpecification extends ASTNode implements } public void addDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); declarations = (IASTDeclaration[]) ArrayUtil.append( IASTDeclaration.class, declarations, declaration ); if(declaration != null) { declaration.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java index a62469eb03c..078bbdca81f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java @@ -39,6 +39,7 @@ public class CPPASTLiteralExpression extends ASTNode implements ICPPASTLiteralEx } public void setKind(int value) { + assertNotFrozen(); kind = value; } @@ -47,6 +48,7 @@ public class CPPASTLiteralExpression extends ASTNode implements ICPPASTLiteralEx } public void setValue(char[] value) { + assertNotFrozen(); this.value= value; } @@ -83,6 +85,7 @@ public class CPPASTLiteralExpression extends ASTNode implements ICPPASTLiteralEx */ @Deprecated public void setValue(String value) { + assertNotFrozen(); this.value = value.toCharArray(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java index 3da97b5bf72..ca95be277e4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java @@ -141,6 +141,7 @@ public class CPPASTName extends CPPASTNameBase implements IASTCompletionContext } public void setName(char[] name) { + assertNotFrozen(); this.name = name; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamedTypeSpecifier.java index c41f7f1aafd..3ceb2435872 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamedTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamedTypeSpecifier.java @@ -39,8 +39,7 @@ public class CPPASTNamedTypeSpecifier extends CPPASTBaseDeclSpecifier implements public CPPASTNamedTypeSpecifier() { } - public CPPASTNamedTypeSpecifier(IASTName name, boolean typename) { - this.typename = typename; + public CPPASTNamedTypeSpecifier(IASTName name) { setName(name); } @@ -49,6 +48,7 @@ public class CPPASTNamedTypeSpecifier extends CPPASTBaseDeclSpecifier implements } public void setIsTypename(boolean value) { + assertNotFrozen(); typename = value; } @@ -58,6 +58,7 @@ public class CPPASTNamedTypeSpecifier extends CPPASTBaseDeclSpecifier implements public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamespaceAlias.java index 850aaec0fe4..c1688acbb64 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamespaceAlias.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamespaceAlias.java @@ -38,6 +38,7 @@ public class CPPASTNamespaceAlias extends ASTNode implements ICPPASTNamespaceAli } public void setAlias(IASTName name) { + assertNotFrozen(); this.alias = name; if (name != null) { name.setParent(this); @@ -50,6 +51,7 @@ public class CPPASTNamespaceAlias extends ASTNode implements ICPPASTNamespaceAli } public void setMappingName(IASTName qualifiedName) { + assertNotFrozen(); this.qualifiedName = qualifiedName; if (qualifiedName != null) { qualifiedName.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamespaceDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamespaceDefinition.java index bf6cee650eb..4b5ac43ca93 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamespaceDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNamespaceDefinition.java @@ -44,6 +44,7 @@ public class CPPASTNamespaceDefinition extends ASTNode implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -57,6 +58,7 @@ public class CPPASTNamespaceDefinition extends ASTNode implements } public void addDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); declarations = (IASTDeclaration[]) ArrayUtil.append( IASTDeclaration.class, declarations, declaration ); if(declaration != null) { declaration.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNewExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNewExpression.java index 7ca1475750b..632637ead2a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNewExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNewExpression.java @@ -57,6 +57,7 @@ public class CPPASTNewExpression extends ASTNode implements } public void setIsGlobal(boolean value) { + assertNotFrozen(); global = value; } @@ -65,6 +66,7 @@ public class CPPASTNewExpression extends ASTNode implements } public void setNewPlacement(IASTExpression expression) { + assertNotFrozen(); placement = expression; if (expression != null) { expression.setParent(this); @@ -77,6 +79,7 @@ public class CPPASTNewExpression extends ASTNode implements } public void setNewInitializer(IASTExpression expression) { + assertNotFrozen(); initializer = expression; if (expression != null) { expression.setParent(this); @@ -89,6 +92,7 @@ public class CPPASTNewExpression extends ASTNode implements } public void setTypeId(IASTTypeId typeId) { + assertNotFrozen(); this.typeId = typeId; if (typeId != null) { typeId.setParent(this); @@ -101,6 +105,7 @@ public class CPPASTNewExpression extends ASTNode implements } public void setIsNewTypeId(boolean value) { + assertNotFrozen(); isNewTypeId = value; } @@ -125,6 +130,7 @@ public class CPPASTNewExpression extends ASTNode implements } public void addNewTypeIdArrayExpression(IASTExpression expression) { + assertNotFrozen(); Assert.isNotNull(typeId); IASTDeclarator dtor= CPPVisitor.findInnermostDeclarator(typeId.getAbstractDeclarator()); if (dtor instanceof IASTArrayDeclarator == false) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java index 466b20542f8..a69e91f3380 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java @@ -15,12 +15,16 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; public class CPPASTOperatorName extends CPPASTName implements ICPPASTOperatorName { + public CPPASTOperatorName() { + super(); + } + /** * Primary constructor that should be used to initialize the CPPASTOperatorName. * @throws NullPointerException if operator is null */ - public CPPASTOperatorName(OverloadableOperator operator) { - super(operator.toCharArray()); + public CPPASTOperatorName(char[] name) { + super(name); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTParameterDeclaration.java index 7dab1290337..fe1aed9d140 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTParameterDeclaration.java @@ -45,6 +45,7 @@ public class CPPASTParameterDeclaration extends ASTNode implements ICPPASTParame } public void setDeclSpecifier(IASTDeclSpecifier declSpec) { + assertNotFrozen(); this.declSpec = declSpec; if (declSpec != null) { declSpec.setParent(this); @@ -53,6 +54,7 @@ public class CPPASTParameterDeclaration extends ASTNode implements ICPPASTParame } public void setDeclarator(IASTDeclarator declarator) { + assertNotFrozen(); this.declarator = declarator; if (declarator != null) { declarator.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java index 4f14b070873..ab35f5d1b97 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java @@ -32,10 +32,12 @@ public class CPPASTPointer extends ASTNode implements IASTPointer { } public void setConst(boolean value) { + assertNotFrozen(); isConst = value; } public void setVolatile(boolean value) { + assertNotFrozen(); isVolatile = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java index 4646a5cb33f..0aacdf0ff6a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java @@ -30,6 +30,7 @@ public class CPPASTPointerToMember extends CPPASTPointer implements } public void setName(IASTName name) { + assertNotFrozen(); n = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemDeclaration.java index ce3e4557847..25946af1b8c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemDeclaration.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; +import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration; /** @@ -20,7 +21,15 @@ import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration; public class CPPASTProblemDeclaration extends CPPASTProblemOwner implements IASTProblemDeclaration { - @Override + public CPPASTProblemDeclaration() { + super(); + } + + public CPPASTProblemDeclaration(IASTProblem problem) { + super(problem); + } + + @Override public boolean accept( ASTVisitor action ){ if( action.shouldVisitDeclarations ){ switch( action.visit( this ) ){ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemExpression.java index 6b89f629ec7..30fbb9a2851 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; +import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTProblemExpression; import org.eclipse.cdt.core.dom.ast.IType; @@ -21,7 +22,15 @@ import org.eclipse.cdt.core.dom.ast.IType; public class CPPASTProblemExpression extends CPPASTProblemOwner implements IASTProblemExpression { - @Override + public CPPASTProblemExpression() { + super(); + } + + public CPPASTProblemExpression(IASTProblem problem) { + super(problem); + } + + @Override public boolean accept( ASTVisitor action ){ if( action.shouldVisitExpressions ){ switch( action.visit( this ) ){ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemOwner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemOwner.java index 5acbf8a2cac..86db9592d80 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemOwner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemOwner.java @@ -36,6 +36,7 @@ abstract class CPPASTProblemOwner extends ASTNode implements IASTProblemHolder { } public void setProblem(IASTProblem p) { + assertNotFrozen(); problem = p; if (p != null) { p.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemStatement.java index 9caf0ec9223..d407be59474 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemStatement.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; +import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTProblemStatement; /** @@ -19,7 +20,16 @@ import org.eclipse.cdt.core.dom.ast.IASTProblemStatement; */ public class CPPASTProblemStatement extends CPPASTProblemOwner implements IASTProblemStatement { - @Override + + public CPPASTProblemStatement() { + super(); + } + + public CPPASTProblemStatement(IASTProblem problem) { + super(problem); + } + + @Override public boolean accept( ASTVisitor action ){ if( action.shouldVisitStatements ){ switch( action.visit( this ) ){ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemTypeId.java index 72be16fcc67..4673091cd0a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemTypeId.java @@ -35,6 +35,7 @@ public class CPPASTProblemTypeId extends CPPASTTypeId implements IASTProblemType } public void setProblem(IASTProblem p) { + assertNotFrozen(); problem = p; if (p != null) { p.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java index b87b2e55b14..1c574bb5147 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java @@ -103,6 +103,7 @@ public class CPPASTQualifiedName extends CPPASTNameBase } public void addName(IASTName name) { + assertNotFrozen(); assert !(name instanceof ICPPASTQualifiedName); if (name != null) { names = (IASTName[]) ArrayUtil.append(IASTName.class, names, ++namesPos, name); @@ -160,11 +161,13 @@ public class CPPASTQualifiedName extends CPPASTNameBase } public void setFullyQualified(boolean isFullyQualified) { + assertNotFrozen(); this.isFullyQualified = isFullyQualified; } public void setSignature(String signature) { + assertNotFrozen(); this.signature = signature; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTReturnStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTReturnStatement.java index f64df742b0d..94938a24e5b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTReturnStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTReturnStatement.java @@ -36,6 +36,7 @@ public class CPPASTReturnStatement extends ASTNode implements IASTReturnStatemen } public void setReturnValue(IASTExpression returnValue) { + assertNotFrozen(); retValue = returnValue; if (returnValue != null) { returnValue.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclSpecifier.java index db6da520ccc..755f7a071c9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclSpecifier.java @@ -33,6 +33,7 @@ public class CPPASTSimpleDeclSpecifier extends CPPASTBaseDeclSpecifier } public void setType(int type) { + assertNotFrozen(); this.type = type; } @@ -53,18 +54,22 @@ public class CPPASTSimpleDeclSpecifier extends CPPASTBaseDeclSpecifier } public void setSigned(boolean value) { + assertNotFrozen(); isSigned = value; } public void setUnsigned(boolean value) { + assertNotFrozen(); isUnsigned = value; } public void setLong(boolean value) { + assertNotFrozen(); isLong = value; } public void setShort(boolean value) { + assertNotFrozen(); isShort = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclaration.java index 07982cb84a5..8af4c58d36b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleDeclaration.java @@ -43,6 +43,7 @@ public class CPPASTSimpleDeclaration extends ASTNode implements IASTSimpleDeclar } public void addDeclarator( IASTDeclarator d ) { + assertNotFrozen(); if (d != null) { declarators = (IASTDeclarator[]) ArrayUtil.append( IASTDeclarator.class, declarators, ++declaratorsPos, d ); d.setParent(this); @@ -58,6 +59,7 @@ public class CPPASTSimpleDeclaration extends ASTNode implements IASTSimpleDeclar * @param declSpecifier The declSpecifier to set. */ public void setDeclSpecifier(IASTDeclSpecifier declSpecifier) { + assertNotFrozen(); this.declSpecifier = declSpecifier; if (declSpecifier != null) { declSpecifier.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeConstructorExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeConstructorExpression.java index 2334c3e83f0..1f3fa582f27 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeConstructorExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeConstructorExpression.java @@ -41,6 +41,7 @@ public class CPPASTSimpleTypeConstructorExpression extends ASTNode implements } public void setSimpleType(int value) { + assertNotFrozen(); st = value; } @@ -49,6 +50,7 @@ public class CPPASTSimpleTypeConstructorExpression extends ASTNode implements } public void setInitialValue(IASTExpression expression) { + assertNotFrozen(); init = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeTemplateParameter.java index d7cececc044..893d906819f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeTemplateParameter.java @@ -42,6 +42,7 @@ public class CPPASTSimpleTypeTemplateParameter extends ASTNode implements } public void setParameterType(int value) { + assertNotFrozen(); this.type = value; } @@ -50,6 +51,7 @@ public class CPPASTSimpleTypeTemplateParameter extends ASTNode implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -62,6 +64,7 @@ public class CPPASTSimpleTypeTemplateParameter extends ASTNode implements } public void setDefaultType(IASTTypeId typeId) { + assertNotFrozen(); this.typeId = typeId; if (typeId != null) { typeId.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSwitchStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSwitchStatement.java index 80e7aacab6a..7e7472d3eea 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSwitchStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSwitchStatement.java @@ -50,6 +50,7 @@ public class CPPASTSwitchStatement extends ASTNode implements } public void setControllerExpression(IASTExpression controller) { + assertNotFrozen(); this.controller = controller; if (controller != null) { controller.setParent(this); @@ -62,6 +63,7 @@ public class CPPASTSwitchStatement extends ASTNode implements } public void setBody(IASTStatement body) { + assertNotFrozen(); this.body = body; if (body != null) { body.setParent(this); @@ -119,6 +121,7 @@ public class CPPASTSwitchStatement extends ASTNode implements } public void setControllerDeclaration(IASTDeclaration d) { + assertNotFrozen(); decl = d; if (d != null) { d.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateDeclaration.java index c2a277670b3..330b1282e5c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateDeclaration.java @@ -46,6 +46,7 @@ public class CPPASTTemplateDeclaration extends ASTNode implements } public void setExported(boolean value) { + assertNotFrozen(); exported = value; } @@ -54,6 +55,7 @@ public class CPPASTTemplateDeclaration extends ASTNode implements } public void setDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); this.declaration = declaration; if (declaration != null) { declaration.setParent(this); @@ -68,6 +70,7 @@ public class CPPASTTemplateDeclaration extends ASTNode implements } public void addTemplateParamter(ICPPASTTemplateParameter parm) { + assertNotFrozen(); if (parm != null) { parameters = (ICPPASTTemplateParameter[]) ArrayUtil.append( ICPPASTTemplateParameter.class, parameters, ++parametersPos, parm ); parm.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java index a69135d1f22..6a91920732f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java @@ -49,6 +49,7 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI } public void setTemplateName(IASTName name) { + assertNotFrozen(); assert !(name instanceof ICPPASTQualifiedName) && !(name instanceof ICPPASTTemplateId); templateName = name; if (name != null) { @@ -58,6 +59,7 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI } public void addTemplateArgument(IASTTypeId typeId) { + assertNotFrozen(); templateArguments = (IASTNode[]) ArrayUtil.append(IASTNode.class, templateArguments, typeId); if (typeId != null) { typeId.setParent(this); @@ -66,6 +68,7 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI } public void addTemplateArgument(IASTExpression expression) { + assertNotFrozen(); templateArguments = (IASTNode[]) ArrayUtil.append(IASTNode.class, templateArguments, expression); if (expression != null) { expression.setParent(this); @@ -74,6 +77,7 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI } public void addTemplateArgument(ICPPASTAmbiguousTemplateArgument ata) { + assertNotFrozen(); templateArguments = (IASTNode[]) ArrayUtil.append(IASTNode.class, templateArguments, ata); if (ata != null) { ata.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateSpecialization.java index 379fbdff3ca..2d85fabcd4c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateSpecialization.java @@ -45,6 +45,7 @@ public class CPPASTTemplateSpecialization extends ASTNode implements } public void setDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); this.declaration = declaration; if (declaration != null) { declaration.setParent(this); @@ -79,6 +80,7 @@ public class CPPASTTemplateSpecialization extends ASTNode implements } public void setExported(boolean value) { + assertNotFrozen(); } public ICPPASTTemplateParameter[] getTemplateParameters() { @@ -86,6 +88,7 @@ public class CPPASTTemplateSpecialization extends ASTNode implements } public void addTemplateParamter(ICPPASTTemplateParameter parm) { + assertNotFrozen(); } public ICPPTemplateScope getScope() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java index bfb5b546a5c..1e444197234 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java @@ -44,6 +44,7 @@ public class CPPASTTemplatedTypeTemplateParameter extends ASTNode implements } public void addTemplateParamter(ICPPASTTemplateParameter parm) { + assertNotFrozen(); if(parm != null) { parameters = (ICPPASTTemplateParameter[]) ArrayUtil.append( ICPPASTTemplateParameter.class, parameters, ++parametersPos, parm ); parm.setParent(this); @@ -61,6 +62,7 @@ public class CPPASTTemplatedTypeTemplateParameter extends ASTNode implements } public void setName(IASTName name) { + assertNotFrozen(); this.name =name; if (name != null) { name.setParent(this); @@ -73,6 +75,7 @@ public class CPPASTTemplatedTypeTemplateParameter extends ASTNode implements } public void setDefaultValue(IASTExpression expression) { + assertNotFrozen(); this.defaultValue = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTryBlockStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTryBlockStatement.java index c3ec3227e88..77481232d57 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTryBlockStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTryBlockStatement.java @@ -34,6 +34,7 @@ public class CPPASTTryBlockStatement extends ASTNode implements ICPPASTTryBlockS } public void addCatchHandler(ICPPASTCatchHandler statement) { + assertNotFrozen(); if (statement != null) { catchHandlers = (ICPPASTCatchHandler[]) ArrayUtil.append( ICPPASTCatchHandler.class, catchHandlers, ++catchHandlersPos, statement ); statement.setParent(this); @@ -54,6 +55,7 @@ public class CPPASTTryBlockStatement extends ASTNode implements ICPPASTTryBlockS private IASTStatement tryBody; public void setTryBody(IASTStatement tryBlock) { + assertNotFrozen(); tryBody = tryBlock; if (tryBlock != null) { tryBlock.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeId.java index 7132c96b305..60ec38f2c78 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeId.java @@ -38,6 +38,7 @@ public class CPPASTTypeId extends ASTNode implements IASTTypeId { } public void setDeclSpecifier(IASTDeclSpecifier declSpec) { + assertNotFrozen(); this.declSpec = declSpec; if (declSpec != null) { declSpec.setParent(this); @@ -51,6 +52,7 @@ public class CPPASTTypeId extends ASTNode implements IASTTypeId { public void setAbstractDeclarator(IASTDeclarator abstractDeclarator) { + assertNotFrozen(); this.absDecl = abstractDeclarator; if (abstractDeclarator != null) { abstractDeclarator.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeIdExpression.java index 88e12e0b6ae..fcd39d9c3d6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeIdExpression.java @@ -38,10 +38,12 @@ public class CPPASTTypeIdExpression extends ASTNode implements ICPPASTTypeIdExpr } public void setOperator(int value) { + assertNotFrozen(); this.op = value; } public void setTypeId(IASTTypeId typeId) { + assertNotFrozen(); this.typeId = typeId; if (typeId != null) { typeId.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypenameExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypenameExpression.java index 051900c4a35..f6980ff9068 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypenameExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypenameExpression.java @@ -45,6 +45,7 @@ public class CPPASTTypenameExpression extends ASTNode implements } public void setIsTemplate(boolean templateTokenConsumed) { + assertNotFrozen(); isTemplate = templateTokenConsumed; } @@ -53,6 +54,7 @@ public class CPPASTTypenameExpression extends ASTNode implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); @@ -65,6 +67,7 @@ public class CPPASTTypenameExpression extends ASTNode implements } public void setInitialValue(IASTExpression expressionList) { + assertNotFrozen(); init = expressionList; if (expressionList != null) { expressionList.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java index 491f316f879..821007301b4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java @@ -42,6 +42,7 @@ public class CPPASTUnaryExpression extends ASTNode implements } public void setOperator(int value) { + assertNotFrozen(); this.operator = value; } @@ -50,6 +51,7 @@ public class CPPASTUnaryExpression extends ASTNode implements } public void setOperand(IASTExpression expression) { + assertNotFrozen(); operand = expression; if (expression != null) { expression.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUsingDeclaration.java index d274a154857..e3bea4858ed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUsingDeclaration.java @@ -41,6 +41,7 @@ public class CPPASTUsingDeclaration extends ASTNode implements } public void setIsTypename(boolean value) { + assertNotFrozen(); this.typeName = value; } @@ -53,6 +54,7 @@ public class CPPASTUsingDeclaration extends ASTNode implements } public void setName(IASTName name) { + assertNotFrozen(); this.name = name; if (name != null) { name.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUsingDirective.java index 980f6708224..36ade6c16fb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUsingDirective.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUsingDirective.java @@ -43,6 +43,7 @@ public class CPPASTUsingDirective extends ASTNode implements } public void setQualifiedName(IASTName qualifiedName) { + assertNotFrozen(); this.name = qualifiedName; if (qualifiedName != null) { qualifiedName.setParent(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTVisibilityLabel.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTVisibilityLabel.java index f1ca17e8e79..33410dba270 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTVisibilityLabel.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTVisibilityLabel.java @@ -34,6 +34,7 @@ public class CPPASTVisibilityLabel extends ASTNode implements ICPPASTVisibilityL } public void setVisibility(int visibility) { + assertNotFrozen(); this.visibility = visibility; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTWhileStatement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTWhileStatement.java index 9097adad9ab..76cfc8d1b7a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTWhileStatement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTWhileStatement.java @@ -49,6 +49,7 @@ public class CPPASTWhileStatement extends ASTNode implements } public void setCondition(IASTExpression condition) { + assertNotFrozen(); this.condition = condition; if (condition != null) { condition.setParent(this); @@ -61,6 +62,7 @@ public class CPPASTWhileStatement extends ASTNode implements } public void setBody(IASTStatement body) { + assertNotFrozen(); this.body = body; if (body != null) { body.setParent(this); @@ -73,6 +75,7 @@ public class CPPASTWhileStatement extends ASTNode implements } public void setConditionDeclaration(IASTDeclaration declaration) { + assertNotFrozen(); condition2 = declaration; if (declaration != null) { declaration.setParent(this); diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPASTNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java similarity index 50% rename from lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPASTNodeFactory.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java index cefda475846..8563819cc5b 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPASTNodeFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java @@ -8,16 +8,14 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.core.dom.lrparser.action.cpp; +package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; -import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; import org.eclipse.cdt.core.dom.ast.IASTBreakStatement; import org.eclipse.cdt.core.dom.ast.IASTCaseStatement; -import org.eclipse.cdt.core.dom.ast.IASTCastExpression; import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; import org.eclipse.cdt.core.dom.ast.IASTConditionalExpression; import org.eclipse.cdt.core.dom.ast.IASTContinueStatement; @@ -27,180 +25,102 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclarationStatement; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTDefaultStatement; import org.eclipse.cdt.core.dom.ast.IASTDoStatement; -import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpressionList; import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; import org.eclipse.cdt.core.dom.ast.IASTFieldDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTFieldReference; -import org.eclipse.cdt.core.dom.ast.IASTForStatement; import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression; import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.IASTGotoStatement; import org.eclipse.cdt.core.dom.ast.IASTIdExpression; -import org.eclipse.cdt.core.dom.ast.IASTIfStatement; import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression; import org.eclipse.cdt.core.dom.ast.IASTInitializerList; import org.eclipse.cdt.core.dom.ast.IASTLabelStatement; -import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNullStatement; -import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.IASTPointer; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration; import org.eclipse.cdt.core.dom.ast.IASTProblemExpression; import org.eclipse.cdt.core.dom.ast.IASTProblemStatement; +import org.eclipse.cdt.core.dom.ast.IASTProblemTypeId; import org.eclipse.cdt.core.dom.ast.IASTReturnStatement; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTStatement; -import org.eclipse.cdt.core.dom.ast.IASTSwitchStatement; -import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTypeId; -import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression; -import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; -import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTAmbiguousTemplateArgument; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTBinaryExpression; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCastExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCatchHandler; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExplicitTemplateInstantiation; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTForStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionWithTryBlock; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTIfStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLiteralExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceAlias; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPointerToMember; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTReferenceOperator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeTemplateParameter; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSwitchStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypeIdExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisibilityLabel; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPNodeFactory; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; -import org.eclipse.cdt.core.dom.lrparser.action.ASTCompletionNode; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTASMDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousTemplateArgument; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTArrayDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTArrayModifier; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTArraySubscriptExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTBaseSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTBinaryExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTBreakStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCaseStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCastExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCatchHandler; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCompositeTypeSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCompoundStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTConditionalExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTConstructorChainInitializer; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTConstructorInitializer; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTContinueStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTConversionName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTDeclarationStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTDefaultStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTDeleteExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTDoStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTElaboratedTypeSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTEnumerationSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTEnumerator; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTExplicitTemplateInstantiation; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTExpressionList; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTExpressionStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFieldDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFieldReference; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTForStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionCallExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDeclarator; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDefinition; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionWithTryBlock; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTGotoStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTIdExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTIfStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTInitializerExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTInitializerList; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTLabelStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTLinkageSpecification; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTLiteralExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNamedTypeSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNamespaceAlias; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNamespaceDefinition; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNewExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNullStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTOperatorName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTParameterDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTPointer; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTPointerToMember; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTProblem; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTProblemDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTProblemExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTProblemStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTReferenceOperator; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTReturnStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleTypeConstructorExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleTypeTemplateParameter; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSwitchStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTemplateDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTemplateId; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTemplateSpecialization; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTemplatedTypeTemplateParameter; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTranslationUnit; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTryBlockStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTypeId; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTypeIdExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTypenameExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTUnaryExpression; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTUsingDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTUsingDirective; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTVisibilityLabel; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTWhileStatement; -import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; +import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; +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; /** * Abstract factory implementation that creates C++ AST nodes. * - * TODO rename, its convention for AST nodes to start with CPPAST... - * * @author Mike Kucera */ -@SuppressWarnings("restriction") // all AST node constructors are internal -public class CPPASTNodeFactory implements ICPPASTNodeFactory { +public class CPPNodeFactory implements ICPPNodeFactory { - public static final CPPASTNodeFactory DEFAULT_INSTANCE = new CPPASTNodeFactory(); + private static final CPPNodeFactory DEFAULT_INSTANCE = new CPPNodeFactory(); + + public static CPPNodeFactory getDefault() { + return DEFAULT_INSTANCE; + } - public ASTCompletionNode newCompletionNode(String prefix, IASTTranslationUnit tu) { - return new ASTCompletionNode((prefix == null || prefix.length() == 0) ? null : prefix, tu); + public ICPPASTTranslationUnit newTranslationUnit() { + CPPASTTranslationUnit tu = new CPPASTTranslationUnit(); + tu.setASTNodeFactory(this); + return tu; } public IASTName newName(char[] name) { @@ -211,31 +131,31 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTName(); } - public ICPPASTOperatorName newCPPOperatorName(OverloadableOperator op) { - return new CPPASTOperatorName(op); + public ICPPASTOperatorName newOperatorName(char[] name) { + return new CPPASTOperatorName(name); } public IASTProblem newProblem(int id, char[] arg, boolean error) { return new CPPASTProblem(id, arg, error); } - public IASTProblemDeclaration newProblemDeclaration() { - return new CPPASTProblemDeclaration(); + public IASTProblemDeclaration newProblemDeclaration(IASTProblem problem) { + return new CPPASTProblemDeclaration(problem); } - public IASTProblemExpression newProblemExpression() { - return new CPPASTProblemExpression(); + public IASTProblemExpression newProblemExpression(IASTProblem problem) { + return new CPPASTProblemExpression(problem); } - public IASTProblemStatement newProblemStatement() { - return new CPPASTProblemStatement(); + public IASTProblemStatement newProblemStatement(IASTProblem problem) { + return new CPPASTProblemStatement(problem); } - public IASTLiteralExpression newLiteralExpression(int kind, String rep) { - return new CPPASTLiteralExpression(kind, rep); + public ICPPASTLiteralExpression newLiteralExpression(int kind, String rep) { + return new CPPASTLiteralExpression(kind, rep.toCharArray()); } - public IASTUnaryExpression newUnaryExpression(int operator, IASTExpression operand) { + public ICPPASTUnaryExpression newUnaryExpression(int operator, IASTExpression operand) { return new CPPASTUnaryExpression(operator, operand); } @@ -255,15 +175,15 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTFunctionCallExpression(idExpr, argList); } - public IASTCastExpression newCastExpression(int operator, IASTTypeId typeId, IASTExpression operand) { + public ICPPASTCastExpression newCastExpression(int operator, IASTTypeId typeId, IASTExpression operand) { return new CPPASTCastExpression(operator, typeId, operand); } - public ICPPASTNewExpression newCPPNewExpression(IASTExpression placement, IASTExpression initializer, IASTTypeId typeId) { + public ICPPASTNewExpression newNewExpression(IASTExpression placement, IASTExpression initializer, IASTTypeId typeId) { return new CPPASTNewExpression(placement, initializer, typeId); } - public IASTBinaryExpression newBinaryExpression(int op, IASTExpression expr1, IASTExpression expr2) { + public ICPPASTBinaryExpression newBinaryExpression(int op, IASTExpression expr1, IASTExpression expr2) { return new CPPASTBinaryExpression(op, expr1, expr2); } @@ -271,19 +191,19 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTConditionalExpression(expr1, expr2, expr3); } - public IASTFieldReference newFieldReference(IASTName name, IASTExpression owner, boolean isPointerDereference, boolean isTemplate) { - return new CPPASTFieldReference(name, owner, isPointerDereference, isTemplate); + public ICPPASTFieldReference newFieldReference(IASTName name, IASTExpression owner) { + return new CPPASTFieldReference(name, owner); } - - public ICPPASTTemplateId newCPPTemplateId(IASTName templateName) { + + public ICPPASTTemplateId newTemplateId(IASTName templateName) { return new CPPASTTemplateId(templateName); } - public ICPPASTConversionName newCPPConversionName(char[] name, IASTTypeId typeId) { + public ICPPASTConversionName newConversionName(char[] name, IASTTypeId typeId) { return new CPPASTConversionName(name, typeId); } - public ICPPASTQualifiedName newCPPQualifiedName() { + public ICPPASTQualifiedName newQualifiedName() { return new CPPASTQualifiedName(); } @@ -311,34 +231,46 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTCompoundStatement(); } - public IASTIfStatement newIfStatement(IASTExpression condition, IASTStatement then, IASTStatement elseClause) { + public ICPPASTIfStatement newIfStatement(IASTExpression condition, IASTStatement then, IASTStatement elseClause) { return new CPPASTIfStatement(condition, then, elseClause); } - public IASTSwitchStatement newSwitchStatment(IASTExpression controller, IASTStatement body) { - return new CPPASTSwitchStatement(controller, body); - } - - public IASTIfStatement newIfStatement(IASTDeclaration condition, IASTStatement then, IASTStatement elseClause) { + public ICPPASTIfStatement newIfStatement(IASTDeclaration condition, IASTStatement then, IASTStatement elseClause) { return new CPPASTIfStatement(condition, then, elseClause); } - - public IASTSwitchStatement newSwitchStatment(IASTDeclaration controller, IASTStatement body) { + + public ICPPASTIfStatement newIfStatement() { + return new CPPASTIfStatement(); + } + + public ICPPASTSwitchStatement newSwitchStatement(IASTExpression controller, IASTStatement body) { return new CPPASTSwitchStatement(controller, body); } - public IASTWhileStatement newWhileStatement(IASTDeclaration condition, IASTStatement body) { + public ICPPASTSwitchStatement newSwitchStatement(IASTDeclaration controller, IASTStatement body) { + return new CPPASTSwitchStatement(controller, body); + } + + public ICPPASTSwitchStatement newSwitchStatement() { + return new CPPASTSwitchStatement(); + } + + public ICPPASTWhileStatement newWhileStatement(IASTDeclaration condition, IASTStatement body) { return new CPPASTWhileStatement(condition, body); } + public ICPPASTWhileStatement newWhileStatement(IASTExpression condition, IASTStatement body) { + return new CPPASTWhileStatement(condition, body); + } + + public ICPPASTWhileStatement newWhileStatement() { + return new CPPASTWhileStatement(); + } + public IASTDoStatement newDoStatement(IASTStatement body, IASTExpression condition) { return new CPPASTDoStatement(body, condition); } - public IASTWhileStatement newWhileStatement(IASTExpression condition, IASTStatement body) { - return new CPPASTWhileStatement(condition, body); - } - public IASTBreakStatement newBreakStatement() { return new CPPASTBreakStatement(); } @@ -355,21 +287,25 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTReturnStatement(retValue); } - public IASTForStatement newForStatement(IASTStatement init, IASTExpression condition, + public ICPPASTForStatement newForStatement(IASTStatement init, IASTExpression condition, IASTExpression iterationExpr, IASTStatement body) { return new CPPASTForStatement(init, condition, iterationExpr, body); } - public IASTForStatement newForStatement(IASTStatement init, IASTDeclaration condition, + public ICPPASTForStatement newForStatement(IASTStatement init, IASTDeclaration condition, IASTExpression iterationExpression, IASTStatement body) { return new CPPASTForStatement(init, condition, iterationExpression, body); } + public ICPPASTForStatement newForStatement() { + return new CPPASTForStatement(); + } + public IASTDeclarationStatement newDeclarationStatement(IASTDeclaration declaration) { return new CPPASTDeclarationStatement(declaration); } - public IASTTypeIdExpression newTypeIdExpression(int operator, IASTTypeId typeId) { + public ICPPASTTypeIdExpression newTypeIdExpression(int operator, IASTTypeId typeId) { return new CPPASTTypeIdExpression(operator, typeId); } @@ -392,29 +328,29 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { public IASTInitializerExpression newInitializerExpression(IASTExpression expression) { return new CPPASTInitializerExpression(expression); } - - public IASTFunctionDefinition newFunctionDefinition(IASTDeclSpecifier declSpecifier, IASTFunctionDeclarator declarator, + + public ICPPASTFunctionDefinition newFunctionDefinition(IASTDeclSpecifier declSpecifier, IASTFunctionDeclarator declarator, IASTStatement bodyStatement) { return new CPPASTFunctionDefinition(declSpecifier, declarator, bodyStatement); } - public IASTTranslationUnit newTranslationUnit() { - return new CPPASTTranslationUnit(); - } - - public ICPPASTSimpleDeclSpecifier newCPPSimpleDeclSpecifier() { + public ICPPASTSimpleDeclSpecifier newSimpleDeclSpecifier() { return new CPPASTSimpleDeclSpecifier(); } + + public IGPPASTSimpleDeclSpecifier newSimpleDeclSpecifierGPP() { + return new GPPASTSimpleDeclSpecifier(); + } - public IASTStandardFunctionDeclarator newFunctionDeclarator(IASTName name) { + public ICPPASTFunctionDeclarator newFunctionDeclarator(IASTName name) { return new CPPASTFunctionDeclarator(name); } - public ICPPASTSimpleTypeConstructorExpression newCPPSimpleTypeConstructorExpression(int type, IASTExpression expression) { + public ICPPASTSimpleTypeConstructorExpression newSimpleTypeConstructorExpression(int type, IASTExpression expression) { return new CPPASTSimpleTypeConstructorExpression(type, expression); } - public ICPPASTTypenameExpression newCPPTypenameExpression(IASTName qualifiedName, IASTExpression expr, boolean isTemplate) { + public ICPPASTTypenameExpression newTypenameExpression(IASTName qualifiedName, IASTExpression expr, boolean isTemplate) { return new CPPASTTypenameExpression(qualifiedName, expr, isTemplate); } @@ -434,8 +370,8 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTUsingDirective(name); } - public ICPPASTLinkageSpecification newLinkageSpecification(String name) { - return new CPPASTLinkageSpecification(name); + public ICPPASTLinkageSpecification newLinkageSpecification(String literal) { + return new CPPASTLinkageSpecification(literal); } public ICPPASTNamespaceDefinition newNamespaceDefinition(IASTName name) { @@ -449,6 +385,10 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { public ICPPASTExplicitTemplateInstantiation newExplicitTemplateInstantiation(IASTDeclaration declaration) { return new CPPASTExplicitTemplateInstantiation(declaration); } + + public IGPPASTExplicitTemplateInstantiation newExplicitTemplateInstantiationGPP(IASTDeclaration declaration) { + return new GPPASTExplicitTemplateInstantiation(declaration); + } public ICPPASTTemplateSpecialization newTemplateSpecialization(IASTDeclaration declaration) { return new CPPASTTemplateSpecialization(declaration); @@ -478,22 +418,26 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTBaseSpecifier(name, visibility, isVirtual); } - public ICPPASTCompositeTypeSpecifier newCPPCompositeTypeSpecifier(int key, IASTName name) { + public ICPPASTCompositeTypeSpecifier newCompositeTypeSpecifier(int key, IASTName name) { return new CPPASTCompositeTypeSpecifier(key, name); } - public ICPPASTNamedTypeSpecifier newCPPNamedTypeSpecifier(IASTName name, boolean typename) { - return new CPPASTNamedTypeSpecifier(name, typename); + public ICPPASTNamedTypeSpecifier newTypedefNameSpecifier(IASTName name) { + return new CPPASTNamedTypeSpecifier(name); } - public IASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name) { + public ICPPASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name) { return new CPPASTElaboratedTypeSpecifier(kind, name); } - public IASTPointer newCPPPointer() { + public IASTPointer newPointer() { return new CPPASTPointer(); } + public IGPPASTPointer newPointerGPP() { + return new GPPASTPointer(); + } + public ICPPASTReferenceOperator newReferenceOperator() { return new CPPASTReferenceOperator(); } @@ -501,6 +445,10 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { public ICPPASTPointerToMember newPointerToMember(IASTName name) { return new CPPASTPointerToMember(name); } + + public IGPPASTPointerToMember newPointerToMemberGPP(IASTName name) { + return new GPPASTPointerToMember(name); + } public IASTInitializerList newInitializerList() { return new CPPASTInitializerList(); @@ -518,16 +466,12 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTArrayDeclarator(name); } - public ICPPASTFunctionDeclarator newCPPFunctionDeclarator(IASTName name) { - return new CPPASTFunctionDeclarator(name); - } - - public IASTParameterDeclaration newParameterDeclaration(IASTDeclSpecifier declSpec, IASTDeclarator declarator) { + public ICPPASTParameterDeclaration newParameterDeclaration(IASTDeclSpecifier declSpec, IASTDeclarator declarator) { return new CPPASTParameterDeclaration(declSpec, declarator); } - - public ICPPASTConstructorChainInitializer newConstructorChainInitializer(IASTName name, IASTExpression expr) { - return new CPPASTConstructorChainInitializer(name, expr); + + public ICPPASTConstructorChainInitializer newConstructorChainInitializer(IASTName memberInitializerid, IASTExpression initializerValue) { + return new CPPASTConstructorChainInitializer(memberInitializerid, initializerValue); } public ICPPASTFunctionWithTryBlock newFunctionTryBlock(IASTDeclSpecifier declSpecifier, IASTFunctionDeclarator declarator, @@ -543,33 +487,16 @@ public class CPPASTNodeFactory implements ICPPASTNodeFactory { return new CPPASTSimpleTypeTemplateParameter(type, name, typeId); } - public ICPPASTTemplatedTypeTemplateParameter newTemplatedTypeTemplateParameter(IASTName name, IASTExpression idExpression) { - return new CPPASTTemplatedTypeTemplateParameter(name, idExpression); + public ICPPASTTemplatedTypeTemplateParameter newTemplatedTypeTemplateParameter(IASTName name, IASTExpression defaultValue) { + return new CPPASTTemplatedTypeTemplateParameter(name, defaultValue); } - public IASTAmbiguousDeclaration newAmbiguousDeclaration(IASTDeclaration... declarations) { - return new CPPASTAmbiguousDeclaration(declarations); + public IGNUASTCompoundStatementExpression newGNUCompoundStatementExpression(IASTCompoundStatement compoundStatement) { + return new CPPASTCompoundStatementExpression(compoundStatement); } - public IASTAmbiguousExpression newAmbiguousExpression(IASTExpression... expressions) { - return new CPPASTAmbiguousExpression(expressions); + public IASTProblemTypeId newProblemTypeId(IASTProblem problem) { + return new CPPASTProblemTypeId(problem); } - public IASTAmbiguousStatement newAmbiguousStatement(IASTStatement... statements) { - return new CPPASTAmbiguousStatement(statements); - } - - public IASTDeclSpecifier newSimpleDeclSpecifier() { - return newCPPSimpleDeclSpecifier(); - } - - public ICPPASTAmbiguousTemplateArgument newAmbiguousTemplateArgument(IASTTypeId typeId, IASTIdExpression idExpression) { - ICPPASTAmbiguousTemplateArgument ambiguity = new CPPASTAmbiguousTemplateArgument(); - ambiguity.addTypeId(typeId); - ambiguity.addIdExpression(idExpression); - return ambiguity; - } - - - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 6b83d220773..dfc76ea23e0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -20,52 +20,37 @@ import java.util.List; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; -import org.eclipse.cdt.core.dom.ast.IASTBreakStatement; -import org.eclipse.cdt.core.dom.ast.IASTCaseStatement; import org.eclipse.cdt.core.dom.ast.IASTCastExpression; import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; import org.eclipse.cdt.core.dom.ast.IASTConditionalExpression; -import org.eclipse.cdt.core.dom.ast.IASTContinueStatement; import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTDeclarationStatement; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTDefaultStatement; -import org.eclipse.cdt.core.dom.ast.IASTDoStatement; import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.IASTExpression; -import org.eclipse.cdt.core.dom.ast.IASTExpressionList; -import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; import org.eclipse.cdt.core.dom.ast.IASTFieldDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression; import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTGotoStatement; import org.eclipse.cdt.core.dom.ast.IASTIdExpression; import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression; import org.eclipse.cdt.core.dom.ast.IASTInitializerList; -import org.eclipse.cdt.core.dom.ast.IASTLabelStatement; import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNamedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.dom.ast.IASTNullStatement; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.IASTPointer; import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTProblemExpression; -import org.eclipse.cdt.core.dom.ast.IASTProblemStatement; import org.eclipse.cdt.core.dom.ast.IASTProblemTypeId; -import org.eclipse.cdt.core.dom.ast.IASTReturnStatement; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTStatement; @@ -76,7 +61,6 @@ import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; -import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTAmbiguousTemplateArgument; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTBinaryExpression; @@ -97,7 +81,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionWithTryBlock; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTIfStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLiteralExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceAlias; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; @@ -115,6 +98,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypeIdExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression; @@ -122,9 +106,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisibilityLabel; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; -import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPNodeFactory; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTTypeIdExpression; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTExplicitTemplateInstantiation; @@ -147,6 +129,7 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils; import org.eclipse.cdt.internal.core.dom.parser.ASTInternal; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTQueries; +import org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit; import org.eclipse.cdt.internal.core.dom.parser.AbstractGNUSourceCodeParser; import org.eclipse.cdt.internal.core.dom.parser.BacktrackException; import org.eclipse.cdt.internal.core.dom.parser.DeclarationOptions; @@ -178,13 +161,15 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { private final boolean supportLongLong; private final IIndex index; - protected CPPASTTranslationUnit translationUnit; + protected ICPPASTTranslationUnit translationUnit; private int templateCount = 0; private int functionBodyCount= 0; private int rejectLogicalOperatorInTemplateID= 0; private char[] currentClassName; + private final ICPPNodeFactory nodeFactory; + public GNUCPPSourceParser(IScanner scanner, ParserMode mode, IParserLogService log, ICPPParserExtensionConfiguration config) { this(scanner, mode, log, config, null); @@ -193,7 +178,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { public GNUCPPSourceParser(IScanner scanner, ParserMode mode, IParserLogService log, ICPPParserExtensionConfiguration config, IIndex index) { - super(scanner, log, mode, + super(scanner, log, mode, CPPNodeFactory.getDefault(), config.supportStatementsInExpressions(), config.supportTypeofUnaryExpressions(), config.supportAlignOfUnaryExpression(), @@ -209,6 +194,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { supportFunctionStyleAsm= config.supportFunctionStyleAssembler(); functionCallCanBeLValue= true; this.index= index; + this.nodeFactory = CPPNodeFactory.getDefault(); } /** @@ -594,7 +580,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { operatorDuple.setTypeId(typeId); } - return createName(operatorDuple); + return buildName(operatorDuple); } finally { if (grabbedNewInstance) TemplateParameterManager.returnInstance(templateArgs); @@ -623,7 +609,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { // isRestrict= true; lastToken= consume(); } - ICPPASTReferenceOperator refOp = createReferenceOperator(); + ICPPASTReferenceOperator refOp = nodeFactory.newReferenceOperator(); ((ASTNode) refOp).setOffsetAndLength(from, lastToken.getEndOffset()-from); collection.add(refOp); return; @@ -679,35 +665,39 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { break; } - IASTPointerOperator po = null; if (nameDuple != null) { - IASTName name = createName(nameDuple); - ICPPASTPointerToMember p2m = createPointerToMember(isRestrict); - ((ASTNode) p2m).setOffsetAndLength(nameDuple - .getFirstToken().getOffset(), last.getEndOffset() - - nameDuple.getFirstToken().getOffset()); + IASTName name = buildName(nameDuple); + ICPPASTPointerToMember p2m; + if(isRestrict) { + IGPPASTPointerToMember gppp2m = nodeFactory.newPointerToMemberGPP(name); + gppp2m.setRestrict(true); + p2m = gppp2m; + } + else { + p2m = nodeFactory.newPointerToMember(name); + } + + ((ASTNode) p2m).setOffsetAndLength(nameDuple.getFirstToken().getOffset(), + last.getEndOffset() - nameDuple.getFirstToken().getOffset()); p2m.setConst(isConst); p2m.setVolatile(isVolatile); - p2m.setName(name); - if (isRestrict) { - IGPPASTPointerToMember newPo = (IGPPASTPointerToMember) p2m; - newPo.setRestrict(isRestrict); - p2m = newPo; - } - po = p2m; - + collection.add(p2m); } else { - po = createPointer(isRestrict); - ((ASTNode) po).setOffsetAndLength(starOffset, last.getEndOffset() - starOffset); - ((IASTPointer) po).setConst(isConst); - ((IASTPointer) po).setVolatile(isVolatile); - if (isRestrict) { - IGPPASTPointer newPo = (IGPPASTPointer) po; - newPo.setRestrict(isRestrict); - po = newPo; - } + IASTPointer pointer; + if(isRestrict) { + IGPPASTPointer gpppo = nodeFactory.newPointerGPP(); + gpppo.setRestrict(true); + pointer = gpppo; + } + else { + pointer = nodeFactory.newPointer(); + } + ((ASTNode) pointer).setOffsetAndLength(starOffset, last.getEndOffset() - starOffset); + pointer.setConst(isConst); + pointer.setVolatile(isVolatile); + collection.add(pointer); } - collection.add(po); + continue; } @@ -716,21 +706,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } } - protected ICPPASTPointerToMember createPointerToMember(boolean gnu) { - if (gnu) - return new GPPASTPointerToMember(); - return new CPPASTPointerToMember(); - } - - protected IASTPointerOperator createPointer(boolean gnu) { - if (gnu) - return new GPPASTPointer(); - return new CPPASTPointer(); - } - - protected ICPPASTReferenceOperator createReferenceOperator() { - return new CPPASTReferenceOperator(); - } @Override protected IASTExpression expression() throws EndOfFileException, BacktrackException { @@ -818,8 +793,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return conditionalExpression; } - protected IASTExpression throwExpression() throws EndOfFileException, - BacktrackException { + protected IASTExpression throwExpression() throws EndOfFileException, BacktrackException { IToken throwToken = consume(); IASTExpression throwExpression = null; try { @@ -884,22 +858,14 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } catch (BacktrackException bt) { return null; } - IASTTypeId result = createTypeId(); - ((ASTNode) result).setOffsetAndLength(startingOffset, figureEndOffset( - declSpecifier, declarator) - startingOffset); - - result.setDeclSpecifier(declSpecifier); - result.setAbstractDeclarator(declarator); + IASTTypeId result = nodeFactory.newTypeId(declSpecifier, declarator); + ((ASTNode) result).setOffsetAndLength(startingOffset, figureEndOffset(declSpecifier, declarator) - startingOffset); return result; } - protected IASTTypeId createTypeId() { - return new CPPASTTypeId(); - } - protected IASTExpression deleteExpression() throws EndOfFileException, - BacktrackException { + protected IASTExpression deleteExpression() throws EndOfFileException, BacktrackException { int startingOffset = LA(1).getOffset(); boolean global = false; if (LT(1) == IToken.tCOLONCOLON) { @@ -918,18 +884,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { vectored = true; } IASTExpression castExpression = castExpression(); - ICPPASTDeleteExpression deleteExpression = createDeleteExpression(); - ((ASTNode) deleteExpression).setOffsetAndLength(startingOffset, - calculateEndOffset(castExpression) - startingOffset); + ICPPASTDeleteExpression deleteExpression = nodeFactory.newDeleteExpression(castExpression); + ((ASTNode) deleteExpression).setOffsetAndLength(startingOffset, calculateEndOffset(castExpression) - startingOffset); deleteExpression.setIsGlobal(global); deleteExpression.setIsVectored(vectored); - deleteExpression.setOperand(castExpression); return deleteExpression; } - protected ICPPASTDeleteExpression createDeleteExpression() { - return new CPPASTDeleteExpression(); - } /** * Parse a new-expression. There is room for ambiguities. With P for placement, T for typeid, @@ -1055,23 +1016,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { private IASTExpression newExpression(boolean isGlobal, IASTExpression placement, IASTTypeId typeid, boolean isNewTypeId, IASTExpression init, int offset, int endOffset) { - ICPPASTNewExpression result = createNewExpression(); + ICPPASTNewExpression result = nodeFactory.newNewExpression(placement, init, typeid); result.setIsGlobal(isGlobal); result.setIsNewTypeId(isNewTypeId); - result.setTypeId(typeid); - if (placement != null) { - result.setNewPlacement(placement); - } - if (init != null) { - result.setNewInitializer(init); - } ((ASTNode) result).setOffsetAndLength(offset, endOffset - offset); return result; } - protected ICPPASTNewExpression createNewExpression() { - return new CPPASTNewExpression(); - } @Override protected IASTExpression unaryExpression() throws EndOfFileException, BacktrackException { @@ -1133,15 +1084,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { templateTokenConsumed = true; } ITokenDuple nestedName = name(); - IASTName name = createName(nestedName); + IASTName name = buildName(nestedName); if (LT(1) != IToken.tLPAREN) { throwBacktrack(nestedName.getFirstToken().getOffset(), nestedName.getLastToken().getEndOffset()); } - ICPPASTTypenameExpression result = createTypenameExpression(); + ICPPASTTypenameExpression result = nodeFactory.newTypenameExpression(name, null, templateTokenConsumed); ((ASTNode) result).setOffsetAndLength(typenameOffset, nestedName.getLastToken().getEndOffset() - typenameOffset); - result.setIsTemplate(templateTokenConsumed); - result.setName(name); firstExpression = result; break; // simple-type-specifier ( assignment-expression , .. ) @@ -1213,11 +1162,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throw backtrack; } - IASTArraySubscriptExpression s = createArraySubscriptExpression(); + IASTArraySubscriptExpression s = nodeFactory.newArraySubscriptExpression(firstExpression, secondExpression); ((ASTNode) s).setOffsetAndLength(((ASTNode) firstExpression) .getOffset(), lastOffset - ((ASTNode) firstExpression).getOffset()); - s.setArrayExpression(firstExpression); - s.setSubscriptExpression(secondExpression); firstExpression = s; break; case IToken.tLPAREN: @@ -1237,13 +1184,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throw backtrack; } - IASTFunctionCallExpression fce = createFunctionCallExpression(); + IASTFunctionCallExpression fce = nodeFactory.newFunctionCallExpression(firstExpression, secondExpression); ((ASTNode) fce).setOffsetAndLength(((ASTNode) firstExpression) .getOffset(), lastOffset - ((ASTNode) firstExpression).getOffset()); - fce.setFunctionNameExpression(firstExpression); - if (secondExpression != null) { - fce.setParameterExpression(secondExpression); - } firstExpression = fce; break; case IToken.tINCR: @@ -1272,14 +1215,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throwBacktrack(((ASTNode) firstExpression).getOffset(), ((ASTNode) firstExpression).getLength() + dot.getLength()); - ICPPASTFieldReference fieldReference = createFieldReference(); + ICPPASTFieldReference fieldReference = nodeFactory.newFieldReference(name, firstExpression); + fieldReference.setIsPointerDereference(false); + fieldReference.setIsTemplate(isTemplate); ((ASTNode) fieldReference).setOffsetAndLength( ((ASTNode) firstExpression).getOffset(), calculateEndOffset(name) - ((ASTNode) firstExpression).getOffset()); - fieldReference.setIsTemplate(isTemplate); - fieldReference.setIsPointerDereference(false); - fieldReference.setFieldName(name); - fieldReference.setFieldOwner(firstExpression); firstExpression = fieldReference; break; case IToken.tARROW: @@ -1297,14 +1238,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throwBacktrack(((ASTNode) firstExpression).getOffset(), ((ASTNode) firstExpression).getLength() + arrow.getLength()); - fieldReference = createFieldReference(); + fieldReference = nodeFactory.newFieldReference(name, firstExpression); + fieldReference.setIsPointerDereference(true); + fieldReference.setIsTemplate(isTemplate); ((ASTNode) fieldReference).setOffsetAndLength( ((ASTNode) firstExpression).getOffset(), calculateEndOffset(name) - ((ASTNode) firstExpression).getOffset()); - fieldReference.setIsTemplate(isTemplate); - fieldReference.setIsPointerDereference(true); - fieldReference.setFieldName(name); - fieldReference.setFieldOwner(firstExpression); firstExpression = fieldReference; break; default: @@ -1331,26 +1270,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { protected ICPPASTAmbiguousTemplateArgument createAmbiguousTemplateArgument() { return new CPPASTAmbiguousTemplateArgument(); } + - protected IASTArraySubscriptExpression createArraySubscriptExpression() { - return new CPPASTArraySubscriptExpression(); - } - - protected ICPPASTTypenameExpression createTypenameExpression() { - return new CPPASTTypenameExpression(); - } - - @Override - protected IASTFunctionCallExpression createFunctionCallExpression() { - return new CPPASTFunctionCallExpression(); - } - - protected ICPPASTFieldReference createFieldReference() { - return new CPPASTFieldReference(); - } - - protected IASTExpression simpleTypeConstructorExpression(int operator) - throws EndOfFileException, BacktrackException { + protected IASTExpression simpleTypeConstructorExpression(int operator) throws EndOfFileException, BacktrackException { int startingOffset = LA(1).getOffset(); consume(); consume(IToken.tLPAREN); @@ -1358,76 +1280,54 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { if (LT(1) != IToken.tRPAREN) operand = expression(); int l = consume(IToken.tRPAREN).getEndOffset(); - ICPPASTSimpleTypeConstructorExpression result = createSimpleTypeConstructorExpression(); + ICPPASTSimpleTypeConstructorExpression result = nodeFactory.newSimpleTypeConstructorExpression(operator, operand); ((ASTNode) result).setOffsetAndLength(startingOffset, l - startingOffset); - result.setSimpleType(operator); - if (operand != null) { - result.setInitialValue(operand); - } return result; } - protected ICPPASTSimpleTypeConstructorExpression createSimpleTypeConstructorExpression() { - return new CPPASTSimpleTypeConstructorExpression(); - } @Override - protected IASTExpression primaryExpression() throws EndOfFileException, - BacktrackException { + protected IASTExpression primaryExpression() throws EndOfFileException, BacktrackException { IToken t = null; IASTLiteralExpression literalExpression = null; switch (LT(1)) { // TO DO: we need more literals... case IToken.tINTEGER: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_integer_constant); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_integer_constant, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset()- t.getOffset()); return literalExpression; case IToken.tFLOATINGPT: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_float_constant); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_float_constant, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.tSTRING: case IToken.tLSTRING: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_string_literal); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_string_literal, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.tCHAR: case IToken.tLCHAR: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_char_constant); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_char_constant, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.t_false: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_false); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_false, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.t_true: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_true); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_true, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.t_this: t = consume(); - literalExpression = createLiteralExpression(); - literalExpression.setKind(IASTLiteralExpression.lk_this); - literalExpression.setValue(t.getImage()); + literalExpression = nodeFactory.newLiteralExpression(IASTLiteralExpression.lk_this, t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t.getEndOffset() - t.getOffset()); return literalExpression; case IToken.tLPAREN: @@ -1452,12 +1352,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IToken.tCOMPLETION: case IToken.tBITCOMPLEMENT: { IASTName name = idExpression(); - IASTIdExpression idExpression = createIdExpression(); - ((ASTNode) idExpression).setOffsetAndLength(((ASTNode) name) - .getOffset(), ((ASTNode) name).getOffset() - + ((ASTNode) name).getLength() - - ((ASTNode) name).getOffset()); - idExpression.setName(name); + IASTIdExpression idExpression = nodeFactory.newIdExpression(name); + ((ASTNode) idExpression).setOffsetAndLength(((ASTNode) name).getOffset(), ((ASTNode) name).getOffset() + + ((ASTNode) name).getLength() - ((ASTNode) name).getOffset()); return idExpression; } default: @@ -1469,19 +1366,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } - protected ICPPASTLiteralExpression createLiteralExpression() { - return new CPPASTLiteralExpression(); - } - - @Override - protected IASTIdExpression createIdExpression() { - return new CPPASTIdExpression(); - } protected IASTName idExpression() throws EndOfFileException, BacktrackException { IASTName name = null; try { - name = createName(nameWithoutLogicalOperatorInTemplateID()); + name = buildName(nameWithoutLogicalOperatorInTemplateID()); } catch (BacktrackException bt) { IToken mark = mark(); if (LT(1) == IToken.tCOLONCOLON || LT(1) == IToken.tIDENTIFIER) { @@ -1549,8 +1438,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { * @throws BacktrackException * request for a backtrack */ - protected IASTDeclaration usingClause() throws EndOfFileException, - BacktrackException { + protected IASTDeclaration usingClause() throws EndOfFileException, BacktrackException { final int offset= consume().getOffset(); if (LT(1) == IToken.t_namespace) { @@ -1561,7 +1449,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IToken.tIDENTIFIER: case IToken.tCOLONCOLON: case IToken.tCOMPLETION: - name = createName(name()); + name = buildName(name()); break; default: throwBacktrack(offset, endOffset - offset); @@ -1576,9 +1464,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throw backtrack; } - ICPPASTUsingDirective astUD = createUsingDirective(); + ICPPASTUsingDirective astUD = nodeFactory.newUsingDirective(name); ((ASTNode) astUD).setOffsetAndLength(offset, endOffset - offset); - astUD.setQualifiedName(name); return astUD; } @@ -1586,8 +1473,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return result; } - private ICPPASTUsingDeclaration usingDeclaration(final int offset) throws EndOfFileException, - BacktrackException { + private ICPPASTUsingDeclaration usingDeclaration(final int offset) throws EndOfFileException, BacktrackException { boolean typeName = false; if (LT(1) == IToken.t_typename) { typeName = true; @@ -1605,22 +1491,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throw backtrack; } - ICPPASTUsingDeclaration result = createUsingDeclaration(); + ICPPASTUsingDeclaration result = nodeFactory.newUsingDeclaration(name); ((ASTNode) result).setOffsetAndLength(offset, end - offset); result.setIsTypename(typeName); - result.setName(name); return result; } - protected ICPPASTUsingDeclaration createUsingDeclaration() { - return new CPPASTUsingDeclaration(); - } - - - protected ICPPASTUsingDirective createUsingDirective() { - return new CPPASTUsingDirective(); - } /** * Implements Linkage specification in the ANSI C++ grammar. @@ -1630,12 +1507,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { * @throws BacktrackException * request for a backtrack */ - protected ICPPASTLinkageSpecification linkageSpecification() - throws EndOfFileException, BacktrackException { + protected ICPPASTLinkageSpecification linkageSpecification() throws EndOfFileException, BacktrackException { int offset= consume().getOffset(); // t_extern String spec = consume().getImage(); // tString - ICPPASTLinkageSpecification linkage = createLinkageSpecification(); - linkage.setLiteral(spec); + ICPPASTLinkageSpecification linkage = nodeFactory.newLinkageSpecification(spec); if (LT(1) == IToken.tLBRACE) { int endOffset= consume().getEndOffset(); @@ -1697,9 +1572,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return linkage; } - protected ICPPASTLinkageSpecification createLinkageSpecification() { - return new CPPASTLinkageSpecification(); - } /** * Represents the amalgamation of template declarations, template @@ -1712,8 +1584,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { * @throws BacktrackException * request for a backtrack */ - protected IASTDeclaration templateDeclaration(DeclarationOptions option) throws EndOfFileException, - BacktrackException { + protected IASTDeclaration templateDeclaration(DeclarationOptions option) throws EndOfFileException, BacktrackException { ++templateCount; try { IToken mark = mark(); @@ -1745,7 +1616,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { // explicit-instantiation ICPPASTExplicitTemplateInstantiation templateInstantiation = null; if (encounteredExtraMod && supportExtendedTemplateSyntax) { - IGPPASTExplicitTemplateInstantiation temp = createGnuTemplateInstantiation(); + IGPPASTExplicitTemplateInstantiation temp = nodeFactory.newExplicitTemplateInstantiationGPP(null); switch (firstToken.getType()) { case IToken.t_static: temp.setModifier(IGPPASTExplicitTemplateInstantiation.ti_static); @@ -1759,7 +1630,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } templateInstantiation = temp; } else { - templateInstantiation = createTemplateInstantiation(); + templateInstantiation = nodeFactory.newExplicitTemplateInstantiation(null); } IASTDeclaration d = declaration(option); ((ASTNode) templateInstantiation).setOffsetAndLength(firstToken @@ -1771,12 +1642,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { if (LT(1) == IToken.tGT) { // explicit-specialization consume(); - - ICPPASTTemplateSpecialization templateSpecialization = createTemplateSpecialization(); IASTDeclaration d = declaration(option); - ((ASTNode) templateSpecialization).setOffsetAndLength( - firstToken.getOffset(), calculateEndOffset(d) - firstToken.getOffset()); - templateSpecialization.setDeclaration(d); + ICPPASTTemplateSpecialization templateSpecialization = nodeFactory.newTemplateSpecialization(d); + ((ASTNode) templateSpecialization).setOffsetAndLength(firstToken.getOffset(), calculateEndOffset(d) - firstToken.getOffset()); return templateSpecialization; } @@ -1790,12 +1658,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } finally { onTopInTemplateArgs= wasOnTop; } - ICPPASTTemplateDeclaration templateDecl = createTemplateDeclaration(); IASTDeclaration d = declaration(option); - ((ASTNode) templateDecl).setOffsetAndLength(firstToken.getOffset(), - calculateEndOffset(d) - firstToken.getOffset()); + ICPPASTTemplateDeclaration templateDecl = nodeFactory.newTemplateDeclaration(d); + ((ASTNode) templateDecl).setOffsetAndLength(firstToken.getOffset(), calculateEndOffset(d) - firstToken.getOffset()); templateDecl.setExported(exported); - templateDecl.setDeclaration(d); for (int i = 0; i < parms.size(); ++i) { ICPPASTTemplateParameter parm = parms.get(i); templateDecl.addTemplateParamter(parm); @@ -1811,25 +1677,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } - protected ICPPASTTemplateDeclaration createTemplateDeclaration() { - return new CPPASTTemplateDeclaration(); - } - - - protected ICPPASTTemplateSpecialization createTemplateSpecialization() { - return new CPPASTTemplateSpecialization(); - } - - - protected IGPPASTExplicitTemplateInstantiation createGnuTemplateInstantiation() { - return new GPPASTExplicitTemplateInstantiation(); - } - - - protected ICPPASTExplicitTemplateInstantiation createTemplateInstantiation() { - return new CPPASTExplicitTemplateInstantiation(); - } - /** * template-parameter-list: template-parameter template-parameter-list , * template-parameter template-parameter: type-parameter @@ -1845,8 +1692,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { * @throws BacktrackException * request for a backtrack */ - protected List templateParameterList() throws BacktrackException, - EndOfFileException { + protected List templateParameterList() throws BacktrackException, EndOfFileException { // if we have gotten this far then we have a true template-declaration // iterate through the template parameter list List returnValue = new ArrayList(DEFAULT_PARM_LIST_SIZE); @@ -1874,17 +1720,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { lastOffset = calculateEndOffset(typeId); } } else { - identifierName = createName(); + identifierName = nodeFactory.newName(); } - ICPPASTSimpleTypeTemplateParameter parm = createSimpleTemplateParameter(); - ((ASTNode) parm).setOffsetAndLength(startingToken.getOffset(), - lastOffset - startingToken.getOffset()); - parm.setParameterType(type); - parm.setName(identifierName); - if (typeId != null) { - parm.setDefaultType(typeId); - } + ICPPASTSimpleTypeTemplateParameter parm = nodeFactory.newSimpleTypeTemplateParameter(type, identifierName, typeId); + ((ASTNode) parm).setOffsetAndLength(startingToken.getOffset(), lastOffset - startingToken.getOffset()); returnValue.add(parm); } else if (LT(1) == IToken.t_template) { @@ -1906,14 +1746,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { last = calculateEndOffset(optionalExpression); } } else - identifierName = createName(); + identifierName = nodeFactory.newName(); - ICPPASTTemplatedTypeTemplateParameter parm = createTemplatedTemplateParameter(); + ICPPASTTemplatedTypeTemplateParameter parm = nodeFactory.newTemplatedTypeTemplateParameter(identifierName, optionalExpression); ((ASTNode) parm).setOffsetAndLength(firstToken.getOffset(), last - firstToken.getOffset()); - parm.setName(identifierName); - if (optionalExpression != null) { - parm.setDefaultValue(optionalExpression); - } for (int i = 0; i < subResult.size(); ++i) { ICPPASTTemplateParameter p = subResult.get(i); @@ -1932,14 +1768,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } - protected ICPPASTTemplatedTypeTemplateParameter createTemplatedTemplateParameter() { - return new CPPASTTemplatedTypeTemplateParameter(); - } - - protected ICPPASTSimpleTypeTemplateParameter createSimpleTemplateParameter() { - return new CPPASTSimpleTypeTemplateParameter(); - } - /** * The most abstract construct within a translationUnit : a declaration. * declaration : {"asm"} asmDefinition | {"namespace"} namespaceDefinition | @@ -1978,9 +1806,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { break; case IToken.tSEMI: IToken t= consume(); - IASTSimpleDeclaration decl= createSimpleDeclaration(); - IASTSimpleDeclSpecifier declspec= createSimpleDeclSpecifier(); - decl.setDeclSpecifier(declspec); + IASTSimpleDeclSpecifier declspec= nodeFactory.newSimpleDeclSpecifier(); + IASTSimpleDeclaration decl= nodeFactory.newSimpleDeclaration(declspec); ((ASTNode) declspec).setOffsetAndLength(t.getOffset(), 0); ((ASTNode) decl).setOffsetAndLength(t.getOffset(), t.getLength()); return decl; @@ -2007,15 +1834,14 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { name = createName(identifier()); endOffset= calculateEndOffset(name); } else { - name = createName(); + name = nodeFactory.newName(); } // bug 195701, gcc 4.2 allows visibility attribute for namespaces. __attribute_decl_seq(true, false); if (LT(1) == IToken.tLBRACE) { - ICPPASTNamespaceDefinition ns= createNamespaceDefinition(); - ns.setName(name); + ICPPASTNamespaceDefinition ns = nodeFactory.newNamespaceDefinition(name); endOffset= consume().getEndOffset(); int declOffset= -1; while(true) { @@ -2075,28 +1901,23 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } ITokenDuple duple = name(); - IASTName qualifiedName = createName(duple); + IASTName qualifiedName = buildName(duple); endOffset = consume(IToken.tSEMI).getEndOffset(); - ICPPASTNamespaceAlias alias = createNamespaceAlias(); + ICPPASTNamespaceAlias alias = nodeFactory.newNamespaceAlias(name, qualifiedName); ((ASTNode) alias).setOffsetAndLength(offset, endOffset - offset); - alias.setAlias(name); - alias.setMappingName(qualifiedName); return alias; } throwBacktrack(LA(1)); return null; } - protected ICPPASTNamespaceAlias createNamespaceAlias() { - return new CPPASTNamespaceAlias(); - } - - protected ICPPASTQualifiedName createQualifiedName(ITokenDuple duple) { - CPPASTQualifiedName result = new CPPASTQualifiedName(); - result.setOffsetAndLength(duple.getStartOffset(), duple.getEndOffset() - duple.getStartOffset()); - result.setSignature(duple.toString()); + protected ICPPASTQualifiedName buildQualifiedName(ITokenDuple duple) { + ICPPASTQualifiedName result = nodeFactory.newQualifiedName(); + ((ASTNode)result).setOffsetAndLength(duple.getStartOffset(), duple.getEndOffset() - duple.getStartOffset()); + if(result instanceof CPPASTQualifiedName) + ((CPPASTQualifiedName)result).setSignature(duple.toString()); ITokenDuple[] segments = duple.getSegments(); int startingValue = 0; if (segments.length > 0) { @@ -2119,17 +1940,17 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { subName= createName(firstToken); } else { - subName = createName(seg); + subName = buildName(seg); } } else { // templateID - subName = createTemplateID(segments[i]); + subName = buildTemplateID(segments[i]); } if (i == segments.length - 1 && duple instanceof OperatorTokenDuple) { // make sure the last segment is an OperatorName/ConversionName - subName = createOperatorName((OperatorTokenDuple) duple, subName); + subName = buildOperatorName((OperatorTokenDuple) duple, subName); } // bug 189299, 193152 indicate that there have been nested qualified names @@ -2150,20 +1971,18 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return result; } - protected ICPPASTTemplateId createTemplateID(ITokenDuple duple) { - ICPPASTTemplateId result = new CPPASTTemplateId(); - ((ASTNode) result).setOffsetAndLength(duple.getStartOffset(), duple - .getEndOffset() - duple.getStartOffset()); - CPPASTName templateIdName= null; + protected ICPPASTTemplateId buildTemplateID(ITokenDuple duple) { + ICPPASTTemplateId result = nodeFactory.newTemplateId(null); + ((ASTNode) result).setOffsetAndLength(duple.getStartOffset(), duple.getEndOffset() - duple.getStartOffset()); + IASTName templateIdName= null; if (duple instanceof BasicTokenDuple) { ITokenDuple nameDuple= ((BasicTokenDuple)duple).getTemplateIdNameTokenDuple(); - templateIdName= (CPPASTName) createName(nameDuple); + templateIdName= buildName(nameDuple); } else { - templateIdName= (CPPASTName) createName(); char[] image = duple.extractNameFromTemplateId(); - templateIdName.setOffsetAndLength(duple.getStartOffset(), image.length); - templateIdName.setName(image); + templateIdName= nodeFactory.newName(image); + ((ASTNode)templateIdName).setOffsetAndLength(duple.getStartOffset(), image.length); } result.setTemplateName(templateIdName); if (duple.getTemplateIdArgLists() != null) { @@ -2184,24 +2003,24 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } - protected IASTName createName(ITokenDuple duple) { + protected IASTName buildName(ITokenDuple duple) { if (duple == null) - return createName(); + return nodeFactory.newName(); if (duple.getSegmentCount() != 1) { // workaround for bug 193152, // looks like duple.getSeqmentCount() and duple.getSegments().length can be different. - ICPPASTQualifiedName qname= createQualifiedName(duple); + ICPPASTQualifiedName qname= buildQualifiedName(duple); if (qname.getNames().length > 0) { return qname; } } if (duple.getTemplateIdArgLists() != null) - return createTemplateID(duple); + return buildTemplateID(duple); // We're a single name - IASTName name = new CPPASTName(duple.toCharArray()); + IASTName name = nodeFactory.newName(duple.toCharArray()); if (duple instanceof OperatorTokenDuple) { - name = createOperatorName((OperatorTokenDuple) duple, name); + name = buildOperatorName((OperatorTokenDuple) duple, name); } IToken token = duple.getFirstToken(); @@ -2212,21 +2031,18 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { break; } - ((ASTNode) name).setOffsetAndLength(duple.getStartOffset(), duple - .getEndOffset() - duple.getStartOffset()); - + ((ASTNode) name).setOffsetAndLength(duple.getStartOffset(), duple.getEndOffset() - duple.getStartOffset()); return name; } - protected IASTName createOperatorName(OperatorTokenDuple duple, IASTName name) { + protected IASTName buildOperatorName(OperatorTokenDuple duple, IASTName name) { IASTName aName = null; if (duple.isConversionOperator()) { - aName = new CPPASTConversionName(name.toCharArray()); - IASTTypeId typeId = duple.getTypeId(); - ((CPPASTConversionName) aName).setTypeId(typeId); + IASTTypeId typeId = duple.getTypeId(); + aName = nodeFactory.newConversionName(name.toCharArray(), typeId); } else { - aName = new CPPASTOperatorName(duple.getOperator()); + aName = nodeFactory.newOperatorName(duple.getOperator().toCharArray()); } if (name instanceof ICPPASTTemplateId) { @@ -2238,15 +2054,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } - protected ICPPASTNamespaceDefinition createNamespaceDefinition() { - return new CPPASTNamespaceDefinition(); - } - /** * Parses a declaration with the given options. */ - protected IASTDeclaration simpleDeclaration(DeclarationOptions declOption) - throws BacktrackException, EndOfFileException { + protected IASTDeclaration simpleDeclaration(DeclarationOptions declOption) throws BacktrackException, EndOfFileException { if (LT(1) == IToken.tLBRACE) throwBacktrack(LA(1)); @@ -2308,8 +2119,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } catch (BacktrackException e) { IASTNode node= e.getNodeBeforeProblem(); if (node instanceof ICPPASTDeclSpecifier && validWithoutDtor(declOption, (ICPPASTDeclSpecifier) node)) { - IASTSimpleDeclaration d= createSimpleDeclaration(); - d.setDeclSpecifier((IASTDeclSpecifier) node); + IASTSimpleDeclaration d= nodeFactory.newSimpleDeclaration((IASTDeclSpecifier) node); setRange(d, node); throwBacktrack(e.getProblem(), d); } @@ -2369,8 +2179,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } // no function body - IASTSimpleDeclaration simpleDeclaration= createSimpleDeclaration(); - simpleDeclaration.setDeclSpecifier(declSpec); + IASTSimpleDeclaration simpleDeclaration= nodeFactory.newSimpleDeclaration(declSpec); for (IASTDeclarator declarator : declarators) { simpleDeclaration.addDeclarator(declarator); } @@ -2410,12 +2219,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { ICPPASTFunctionDefinition fdef; if (LT(1) == IToken.t_try) { consume(); - fdef= createFunctionTryBlock(); + fdef= nodeFactory.newFunctionTryBlock(declSpec, (ICPPASTFunctionDeclarator) dtor, null); } else { - fdef= createFunctionDefinition(); + fdef= nodeFactory.newFunctionDefinition(declSpec, (ICPPASTFunctionDeclarator) dtor, null); } - fdef.setDeclSpecifier(declSpec); - fdef.setDeclarator((ICPPASTFunctionDeclarator) dtor); if (LT(1) == IToken.tCOLON) { ctorInitializer(fdef); } @@ -2451,20 +2258,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } - @Override - protected ICPPASTFunctionDefinition createFunctionDefinition() { - return new CPPASTFunctionDefinition(); - } - - protected ICPPASTFunctionWithTryBlock createFunctionTryBlock() { - return new CPPASTFunctionWithTryBlock(); - } - - @Override - protected IASTSimpleDeclaration createSimpleDeclaration() { - return new CPPASTSimpleDeclaration(); - } - /** * This method parses a constructor chain ctorinitializer: : * meminitializerlist meminitializerlist: meminitializer | meminitializer , @@ -2474,12 +2267,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { * @throws BacktrackException * request a backtrack */ - protected void ctorInitializer(ICPPASTFunctionDefinition fdef) throws EndOfFileException, - BacktrackException { + protected void ctorInitializer(ICPPASTFunctionDefinition fdef) throws EndOfFileException, BacktrackException { consume(); ctorLoop: for (;;) { ITokenDuple duple = name(); - IASTName name = createName(duple); + IASTName name = buildName(duple); int end; IASTExpression expressionList = null; @@ -2506,13 +2298,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throw backtrack; } - ICPPASTConstructorChainInitializer ctorInitializer = createConstructorChainInitializer(); + ICPPASTConstructorChainInitializer ctorInitializer = nodeFactory.newConstructorChainInitializer(name, expressionList); ((ASTNode) ctorInitializer).setOffsetAndLength(duple.getStartOffset(), end - duple.getStartOffset()); - ctorInitializer.setMemberInitializerId(name); - - if (expressionList != null) { - ctorInitializer.setInitializerValue(expressionList); - } fdef.addMemberInitializer(ctorInitializer); switch (LT(1)) { @@ -2526,10 +2313,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } } - protected ICPPASTConstructorChainInitializer createConstructorChainInitializer() { - return new CPPASTConstructorChainInitializer(); - } - /** * This routine parses a parameter declaration * @@ -2558,19 +2341,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { declarator= addInitializer(lie); } - final ICPPASTParameterDeclaration parm = createParameterDeclaration(); - parm.setDeclSpecifier(declSpec); - parm.setDeclarator(declarator); - + final ICPPASTParameterDeclaration parm = nodeFactory.newParameterDeclaration(declSpec, declarator); final int endOffset = figureEndOffset(declSpec, declarator); ((ASTNode) parm).setOffsetAndLength(startOffset, endOffset - startOffset); return parm; } - protected ICPPASTParameterDeclaration createParameterDeclaration() { - return new CPPASTParameterDeclaration(); - } - private final static int INLINE=0x1, CONST=0x2, RESTRICT=0x4, VOLATILE=0x8, SHORT=0x10, UNSIGNED= 0x20, SIGNED=0x40, COMPLEX=0x80, IMAGINARY=0x100, @@ -2782,12 +2558,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { lookAheadForDeclarator(option); } } catch (FoundAggregateInitializer e) { - e.fDeclSpec= createSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); + e.fDeclSpec= buildSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); throw e; }catch (FoundDeclaratorException e) { if (e.currToken.getType() == IToken.tEOC || option == DeclarationOptions.FUNCTION_STYLE_ASM || canBeConstructorDestructorOrConversion(option, storageClass, options, e.declarator)) { - e.declSpec= createSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); + e.declSpec= buildSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); throw e; } } @@ -2896,9 +2672,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } if (identifier != null) - return createNamedTypeSpecifier(identifier, isTypename, storageClass, options, offset, endOffset); + return buildNamedTypeSpecifier(identifier, isTypename, storageClass, options, offset, endOffset); - return createSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); + return buildSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); } private boolean canBeConstructorDestructorOrConversion(DeclarationOptions declOption, int storageClass, int options, IASTDeclarator dtor) { @@ -2934,18 +2710,17 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return false; } - private ICPPASTNamedTypeSpecifier createNamedTypeSpecifier(ITokenDuple identifier, boolean isTypename, + private ICPPASTNamedTypeSpecifier buildNamedTypeSpecifier(ITokenDuple identifier, boolean isTypename, int storageClass, int options, int offset, int endOffset) { - ICPPASTNamedTypeSpecifier declSpec = (ICPPASTNamedTypeSpecifier)createNamedTypeSpecifier(); - IASTName name = createName(identifier); - declSpec.setName(name); + IASTName name = buildName(identifier); + ICPPASTNamedTypeSpecifier declSpec = nodeFactory.newTypedefNameSpecifier(name); declSpec.setIsTypename(isTypename); configureDeclSpec(declSpec, storageClass, options); ((ASTNode) declSpec).setOffsetAndLength(offset, endOffset - offset); return declSpec; } - private ICPPASTSimpleDeclSpecifier createSimpleDeclSpec(int storageClass, int simpleType, + private ICPPASTSimpleDeclSpecifier buildSimpleDeclSpec(int storageClass, int simpleType, int options, int isLong, IASTExpression typeofExpression, int offset, int endOffset) { if (isLong > 1 && !supportLongLong) @@ -2953,7 +2728,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { ICPPASTSimpleDeclSpecifier declSpec= null; if (isLong > 1 || (options & (RESTRICT|COMPLEX|IMAGINARY)) != 0 || typeofExpression != null) { - final IGPPASTSimpleDeclSpecifier gppDeclSpec= createGPPSimpleDeclSpecifier(); + final IGPPASTSimpleDeclSpecifier gppDeclSpec= nodeFactory.newSimpleDeclSpecifierGPP(); gppDeclSpec.setLongLong(isLong > 1); gppDeclSpec.setRestrict((options & RESTRICT) != 0); gppDeclSpec.setComplex((options & COMPLEX) != 0); @@ -2962,7 +2737,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { declSpec= gppDeclSpec; } else { - declSpec = createSimpleDeclSpecifier(); + declSpec = nodeFactory.newSimpleDeclSpecifier(); } configureDeclSpec(declSpec, storageClass, options); @@ -3019,20 +2794,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return false; } - protected IGPPASTSimpleDeclSpecifier createGPPSimpleDeclSpecifier() { - return new GPPASTSimpleDeclSpecifier(); - } - - - protected ICPPASTSimpleDeclSpecifier createSimpleDeclSpecifier() { - return new CPPASTSimpleDeclSpecifier(); - } - - - @Override - protected IASTNamedTypeSpecifier createNamedTypeSpecifier() { - return new CPPASTNamedTypeSpecifier(); - } /** * Parse an elaborated type specifier. @@ -3040,8 +2801,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { * @throws BacktrackException * request a backtrack */ - protected ICPPASTElaboratedTypeSpecifier elaboratedTypeSpecifier() - throws BacktrackException, EndOfFileException { + protected ICPPASTElaboratedTypeSpecifier elaboratedTypeSpecifier() throws BacktrackException, EndOfFileException { // this is an elaborated class specifier IToken t = consume(); int eck = 0; @@ -3067,20 +2827,14 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { // if __attribute__ or __declspec occurs after struct/union/class and before the identifier __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers); - IASTName name = createName(name()); + IASTName name = buildName(name()); - ICPPASTElaboratedTypeSpecifier elaboratedTypeSpec = createElaboratedTypeSpecifier(); + ICPPASTElaboratedTypeSpecifier elaboratedTypeSpec = nodeFactory.newElaboratedTypeSpecifier(eck, name); ((ASTNode) elaboratedTypeSpec).setOffsetAndLength(t.getOffset(), calculateEndOffset(name) - t.getOffset()); - elaboratedTypeSpec.setKind(eck); - elaboratedTypeSpec.setName(name); return elaboratedTypeSpec; } - protected ICPPASTElaboratedTypeSpecifier createElaboratedTypeSpecifier() { - return new CPPASTElaboratedTypeSpecifier(); - } - @Override protected IASTDeclarator initDeclarator(DeclarationOptions option) throws EndOfFileException, BacktrackException, FoundAggregateInitializer { @@ -3215,10 +2969,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return d; } - protected IASTInitializer optionalCPPInitializer(IASTDeclarator d) - throws EndOfFileException, BacktrackException { + protected IASTInitializer optionalCPPInitializer(IASTDeclarator d) throws EndOfFileException, BacktrackException { // handle initializer - if (LT(1) == IToken.tASSIGN) { consume(); try { @@ -3228,8 +2980,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throw eof; } } else if (LT(1) == IToken.tLPAREN) { - if (d instanceof IASTFunctionDeclarator - && d.getNestedDeclarator() == null) { + if (d instanceof IASTFunctionDeclarator && d.getNestedDeclarator() == null) { // constructor initializer doesn't make sense for a function // declarator, // we must have an object to initialize, a function doesn't @@ -3243,25 +2994,19 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { if( astExpression == null ) throwBacktrack( t ); int l = consumeOrEOC(IToken.tRPAREN).getEndOffset(); - ICPPASTConstructorInitializer result = createConstructorInitializer(); + ICPPASTConstructorInitializer result = nodeFactory.newConstructorInitializer(astExpression); ((ASTNode) result).setOffsetAndLength(o, l - o); - result.setExpression(astExpression); return result; } return null; } - protected ICPPASTConstructorInitializer createConstructorInitializer() { - return new CPPASTConstructorInitializer(); - } - - protected IASTInitializer initializerClause(boolean inAggregateInitializer) throws EndOfFileException, BacktrackException { if (LT(1) == IToken.tLBRACE) { int startingOffset = consume().getOffset(); - IASTInitializerList result = createInitializerList(); + IASTInitializerList result = nodeFactory.newInitializerList(); ((ASTNode) result).setOffset(startingOffset); if (LT(1) == (IToken.tRBRACE)) { @@ -3298,22 +3043,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return null; } - IASTInitializerExpression result = createInitializerExpression(); + IASTInitializerExpression result = nodeFactory.newInitializerExpression(assignmentExpression); ((ASTNode) result).setOffsetAndLength(((ASTNode) assignmentExpression)); - result.setExpression(assignmentExpression); return result; } - protected IASTInitializerList createInitializerList() { - return new CPPASTInitializerList(); - } - - - protected IASTInitializerExpression createInitializerExpression() { - return new CPPASTInitializerExpression(); - } - /** * Parse a declarator, as according to the ANSI C++ specification. * declarator : (ptrOperator)* directDeclarator @@ -3367,7 +3102,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { if (option.fAllowAbstract && option.fAllowFunctions) { final IToken mark= mark(); try { - cand1= declarator(pointerOps, createName(), null, startingOffset, endOffset, strategy, option); + cand1= declarator(pointerOps, nodeFactory.newName(), null, startingOffset, endOffset, strategy, option); if (option.fRequireAbstract || !option.fAllowNested) return cand1; @@ -3380,7 +3115,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { // type-ids for new or operator-id: if (!option.fAllowNested) { if (option.fAllowAbstract) { - return declarator(pointerOps, createName(), null, startingOffset, endOffset, strategy, option); + return declarator(pointerOps, nodeFactory.newName(), null, startingOffset, endOffset, strategy, option); } throwBacktrack(LA(1)); } @@ -3420,7 +3155,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { if (!option.fAllowBitField || LT(1) != IToken.tCOLON) throwBacktrack(LA(1)); } - return declarator(pointerOps, createName(), null, startingOffset, endOffset, strategy, option); + return declarator(pointerOps, nodeFactory.newName(), null, startingOffset, endOffset, strategy, option); } private IASTDeclarator declarator(List pointerOps, @@ -3468,7 +3203,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers); if (result == null) { - result= createDeclarator(); + result= nodeFactory.newDeclarator(null); setDeclaratorID(result, declaratorName, nestedDeclarator); } else { endOffset= calculateEndOffset(result); @@ -3492,7 +3227,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { private void setDeclaratorID(IASTDeclarator declarator, IASTName declaratorName, IASTDeclarator nestedDeclarator) { if (nestedDeclarator != null) { declarator.setNestedDeclarator(nestedDeclarator); - declarator.setName(createName()); + declarator.setName(nodeFactory.newName()); } else { declarator.setName(declaratorName); } @@ -3507,7 +3242,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { boolean seenParameter= false; int endOffset= last.getEndOffset(); - final ICPPASTFunctionDeclarator fc= createFunctionDeclarator(); + final ICPPASTFunctionDeclarator fc = nodeFactory.newFunctionDeclarator(null); paramLoop: while(true) { switch (LT(1)) { case IToken.tRPAREN: @@ -3579,8 +3314,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { thendoffset = consume().getEndOffset(); } IASTProblem p = createProblem(IProblem.SYNTAX_ERROR, thoffset, thendoffset-thoffset); - IASTProblemTypeId typeIdProblem = createTypeIDProblem(); - typeIdProblem.setProblem(p); + IASTProblemTypeId typeIdProblem = nodeFactory.newProblemTypeId(p); ((ASTNode) typeIdProblem).setOffsetAndLength(((ASTNode) p)); fc.addExceptionSpecificationTypeId(typeIdProblem); } @@ -3617,7 +3351,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throwBacktrack(LA(1)); final int endOffset = calculateEndOffset(arrayMods.get(arrayMods.size() - 1)); - final IASTArrayDeclarator d = createArrayDeclarator(); + final IASTArrayDeclarator d = nodeFactory.newArrayDeclarator(null); for (IASTArrayModifier m : arrayMods) { d.addArrayModifier(m); } @@ -3636,45 +3370,20 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { final IASTExpression bitField = constantExpression(); final int endOffset = calculateEndOffset(bitField); - IASTFieldDeclarator d = createFieldDeclarator(); - d.setBitFieldSize(bitField); - + IASTFieldDeclarator d = nodeFactory.newFieldDeclarator(null, bitField); ((ASTNode) d).setOffsetAndLength(start, endOffset-start); return d; } - protected IASTProblemTypeId createTypeIDProblem() { - return new CPPASTProblemTypeId(); - } - protected ICPPASTFunctionDeclarator createFunctionDeclarator() { - return new CPPASTFunctionDeclarator(); - } - - - protected IASTFieldDeclarator createFieldDeclarator() { - return new CPPASTFieldDeclarator(); - } - - - protected IASTArrayDeclarator createArrayDeclarator() { - return new CPPASTArrayDeclarator(); - } - - - protected IASTDeclarator createDeclarator() { - return new CPPASTDeclarator(); - } - - protected IASTName consumeTemplatedOperatorName() - throws EndOfFileException, BacktrackException { + protected IASTName consumeTemplatedOperatorName() throws EndOfFileException, BacktrackException { TemplateParameterManager argumentList = TemplateParameterManager.getInstance(); try { if (LT(1) == IToken.t_operator) return operatorId(null, null); try { - return createName(name()); + return buildName(name()); } catch (BacktrackException bt) { } IToken start = null; @@ -3750,16 +3459,14 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { // class name IASTName name = null; if (LT(1) == IToken.tIDENTIFIER) - name = createName(name()); + name = buildName(name()); else - name = createName(); + name = nodeFactory.newName(); // if __attribute__ or __declspec occurs after struct/union/class identifier and before the { or ; __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers); - ICPPASTCompositeTypeSpecifier astClassSpecifier = createClassSpecifier(); - astClassSpecifier.setKey(classKind); - astClassSpecifier.setName(name); + ICPPASTCompositeTypeSpecifier astClassSpecifier = nodeFactory.newCompositeTypeSpecifier(classKind, name); // base clause if (LT(1) == IToken.tCOLON) { @@ -3815,8 +3522,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IToken.t_private: int key= consume().getType(); endOffset= consume(IToken.tCOLON).getEndOffset(); - ICPPASTVisibilityLabel label = createVisibilityLabel(); - label.setVisibility(token2Visibility(key)); + ICPPASTVisibilityLabel label = nodeFactory.newVisibilityLabel(token2Visibility(key)); ((ASTNode) label).setOffsetAndLength(declOffset, endOffset - declOffset); astClassSpecifier.addMemberDeclaration(label); continue loop; @@ -3856,17 +3562,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { ((ASTNode) astClassSpecifier).setOffsetAndLength(offset, endOffset - offset); return astClassSpecifier; } - - - protected ICPPASTCompositeTypeSpecifier createClassSpecifier() { - return new CPPASTCompositeTypeSpecifier(); - } - - - protected ICPPASTVisibilityLabel createVisibilityLabel() { - return new CPPASTVisibilityLabel(); - } - + protected int token2Visibility(int type) { switch (type) { @@ -3890,9 +3586,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { * * @throws BacktrackException */ - protected void baseSpecifier(ICPPASTCompositeTypeSpecifier astClassSpec) - throws EndOfFileException, BacktrackException { - + protected void baseSpecifier(ICPPASTCompositeTypeSpecifier astClassSpec) throws EndOfFileException, BacktrackException { IToken last = consume(); // tCOLON boolean isVirtual = false; @@ -3938,21 +3632,18 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IToken.tCOMPLETION: // to get templates right we need to use the class as the scope ITokenDuple d = name(); - name = createName(d); + name = buildName(d); if (firstToken == null) firstToken = d.getFirstToken(); last = d.getLastToken(); break; case IToken.tCOMMA: if (name == null) - name = createName(); + name = nodeFactory.newName(); consume(); - ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier baseSpec = createBaseSpecifier(); + ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier baseSpec = nodeFactory.newBaseSpecifier(name, visibility, isVirtual); if (firstToken != null) ((ASTNode) baseSpec).setOffsetAndLength(firstToken.getOffset(), last.getEndOffset() - firstToken.getOffset()); - baseSpec.setVirtual(isVirtual); - baseSpec.setVisibility(visibility); - baseSpec.setName(name); astClassSpec.addBaseSpecifier(baseSpec); isVirtual = false; @@ -3964,13 +3655,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IToken.tLBRACE: case IToken.tEOC: if (name == null) - name = createName(); - baseSpec = createBaseSpecifier(); + name = nodeFactory.newName(); + baseSpec = nodeFactory.newBaseSpecifier(name, visibility, isVirtual); if (firstToken != null) ((ASTNode) baseSpec).setOffsetAndLength(firstToken.getOffset(), last.getEndOffset() - firstToken.getOffset()); - baseSpec.setVirtual(isVirtual); - baseSpec.setVisibility(visibility); - baseSpec.setName(name); astClassSpec.addBaseSpecifier(baseSpec); break baseSpecifierLoop; default: @@ -3979,12 +3667,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } } - protected ICPPASTBaseSpecifier createBaseSpecifier() { - return new CPPASTBaseSpecifier(); - } - protected void catchHandlerSequence(List collection) - throws EndOfFileException, BacktrackException { + protected void catchHandlerSequence(List collection) throws EndOfFileException, BacktrackException { if (LT(1) == IToken.tEOC) return; @@ -4009,21 +3693,16 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } catch (BacktrackException bte) { failParse(); IASTProblem p = createProblem(bte); - IASTProblemDeclaration pd = createProblemDeclaration(); - pd.setProblem(p); + IASTProblemDeclaration pd = nodeFactory.newProblemDeclaration(p); ((ASTNode) pd).setOffsetAndLength(((ASTNode) p)); decl = pd; } - ICPPASTCatchHandler handler = createCatchHandler(); - if (decl != null) { - handler.setDeclaration(decl); - } + ICPPASTCatchHandler handler = nodeFactory.newCatchHandler(decl, null); if (LT(1) != IToken.tEOC) { IASTStatement compoundStatement = catchBlockCompoundStatement(); - ((ASTNode) handler).setOffsetAndLength(startOffset, - calculateEndOffset(compoundStatement) - startOffset); + ((ASTNode) handler).setOffsetAndLength(startOffset, calculateEndOffset(compoundStatement) - startOffset); handler.setIsCatchAll(isEllipsis); if (compoundStatement != null) { handler.setCatchBody(compoundStatement); @@ -4054,25 +3733,19 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } final int endOffset = figureEndOffset(declSpec, declarator); - final IASTSimpleDeclaration decl= createSimpleDeclaration(); - decl.setDeclSpecifier(declSpec); + final IASTSimpleDeclaration decl= nodeFactory.newSimpleDeclaration(declSpec); decl.addDeclarator(declarator); ((ASTNode) decl).setOffsetAndLength(startOffset, endOffset - startOffset); return decl; } - protected ICPPASTCatchHandler createCatchHandler() { - return new CPPASTCatchHandler(); - } - protected IASTStatement catchBlockCompoundStatement() - throws BacktrackException, EndOfFileException { - if (mode == ParserMode.QUICK_PARSE - || mode == ParserMode.STRUCTURAL_PARSE) { + protected IASTStatement catchBlockCompoundStatement() throws BacktrackException, EndOfFileException { + if (mode == ParserMode.QUICK_PARSE || mode == ParserMode.STRUCTURAL_PARSE) { IToken curr = LA(1); IToken last = skipOverCompoundStatement(); - IASTCompoundStatement cs = createCompoundStatement(); + IASTCompoundStatement cs = nodeFactory.newCompoundStatement(); ((ASTNode) cs).setOffsetAndLength(curr.getOffset(), last.getEndOffset() - curr.getOffset()); return cs; } else if (mode == ParserMode.COMPLETION_PARSE || mode == ParserMode.SELECTION_PARSE) { @@ -4080,7 +3753,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return compoundStatement(); IToken curr = LA(1); IToken last = skipOverCompoundStatement(); - IASTCompoundStatement cs = createCompoundStatement(); + IASTCompoundStatement cs = nodeFactory.newCompoundStatement(); ((ASTNode) cs).setOffsetAndLength(curr.getOffset(), last.getEndOffset() - curr.getOffset()); return cs; } @@ -4089,7 +3762,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { @Override protected void setupTranslationUnit() throws DOMException { - translationUnit = createTranslationUnit(); + translationUnit = nodeFactory.newTranslationUnit(); translationUnit.setIndex(index); // add built-in names to the scope @@ -4102,19 +3775,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { ASTInternal.addBinding(tuScope, binding); } } - translationUnit.setLocationResolver(scanner.getLocationResolver()); + if(translationUnit instanceof ASTTranslationUnit) + ((ASTTranslationUnit)translationUnit).setLocationResolver(scanner.getLocationResolver()); } - @Override - protected IASTProblemDeclaration createProblemDeclaration() { - return new CPPASTProblemDeclaration(); - } - - protected CPPASTTranslationUnit createTranslationUnit() { - return new CPPASTTranslationUnit(); - } - protected void consumeArrayModifiers(DeclarationOptions option, List collection) throws EndOfFileException, BacktrackException { boolean allowExpression= option == DeclarationOptions.TYPEID_NEW; @@ -4135,64 +3800,28 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { default: throw backtrack; } - IASTArrayModifier arrayMod = createArrayModifier(); + IASTArrayModifier arrayMod = nodeFactory.newArrayModifier(exp); ((ASTNode) arrayMod).setOffsetAndLength(o, l - o); - if (exp != null) { - arrayMod.setConstantExpression(exp); - } collection.add(arrayMod); } return; } - protected IASTArrayModifier createArrayModifier() { - return new CPPASTArrayModifier(); - } - @Override protected IASTTranslationUnit getTranslationUnit() { return translationUnit; } - @Override - protected IASTCompoundStatement createCompoundStatement() { - return new CPPASTCompoundStatement(); - } - - @Override - protected IASTBinaryExpression createBinaryExpression() { - return new CPPASTBinaryExpression(); - } - - @Override - protected IASTConditionalExpression createConditionalExpression() { - return new CPPASTConditionalExpression(); - } - - @Override - protected IASTUnaryExpression createUnaryExpression() { - return new CPPASTUnaryExpression(); - } - - @Override - protected IGNUASTCompoundStatementExpression createCompoundStatementExpression() { - return new CPPASTCompoundStatementExpression(); - } - - @Override - protected IASTExpressionList createExpressionList() { - return new CPPASTExpressionList(); - } @Override protected IASTName createName(IToken token) { IASTName n = null; if (token instanceof OperatorTokenDuple) { - n = createOperatorName((OperatorTokenDuple) token, n); + n = buildOperatorName((OperatorTokenDuple) token, n); } else { - n = new CPPASTName(token.getCharImage()); + n = nodeFactory.newName(token.getCharImage()); } switch (token.getType()) { @@ -4206,123 +3835,18 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return n; } - @Override - protected IASTName createName() { - return new CPPASTName(); - } @Override - protected IASTEnumerator createEnumerator() { - return new CPPASTEnumerator(); - } - - - @Override - protected IASTExpression buildTypeIdExpression(int op, IASTTypeId typeId, - int startingOffset, int endingOffset) { - ICPPASTTypeIdExpression typeIdExpression = createTypeIdExpression(); + protected IASTExpression buildTypeIdExpression(int op, IASTTypeId typeId, int startingOffset, int endingOffset) { + IASTTypeIdExpression typeIdExpression = nodeFactory.newTypeIdExpression(op, typeId); ((ASTNode) typeIdExpression).setOffsetAndLength(startingOffset, endingOffset - startingOffset); - ((ASTNode) typeIdExpression).setLength(endingOffset - startingOffset); - typeIdExpression.setOperator(op); - typeIdExpression.setTypeId(typeId); return typeIdExpression; } - protected ICPPASTTypeIdExpression createTypeIdExpression() { - return new CPPASTTypeIdExpression(); - } + @Override - protected IASTEnumerationSpecifier createEnumerationSpecifier() { - return new CPPASTEnumerationSpecifier(); - } - - @Override - protected IASTLabelStatement createLabelStatement() { - return new CPPASTLabelStatement(); - } - - @Override - protected IASTGotoStatement createGoToStatement() { - return new CPPASTGotoStatement(); - } - - @Override - protected IASTReturnStatement createReturnStatement() { - return new CPPASTReturnStatement(); - } - - protected ICPPASTForStatement createForStatement() { - return new CPPASTForStatement(); - } - - @Override - protected IASTContinueStatement createContinueStatement() { - return new CPPASTContinueStatement(); - } - - @Override - protected IASTDoStatement createDoStatement() { - return new CPPASTDoStatement(); - } - - @Override - protected IASTBreakStatement createBreakStatement() { - return new CPPASTBreakStatement(); - } - - @Override - protected IASTWhileStatement createWhileStatement() { - return new CPPASTWhileStatement(); - } - - @Override - protected IASTNullStatement createNullStatement() { - return new CPPASTNullStatement(); - } - - protected ICPPASTSwitchStatement createSwitchStatement() { - return new CPPASTSwitchStatement(); - } - - protected ICPPASTIfStatement createIfStatement() { - return new CPPASTIfStatement(); - } - - @Override - protected IASTDefaultStatement createDefaultStatement() { - return new CPPASTDefaultStatement(); - } - - @Override - protected IASTCaseStatement createCaseStatement() { - return new CPPASTCaseStatement(); - } - - @Override - protected IASTExpressionStatement createExpressionStatement() { - return new CPPASTExpressionStatement(); - } - - @Override - protected IASTDeclarationStatement createDeclarationStatement() { - return new CPPASTDeclarationStatement(); - } - - @Override - protected IASTASMDeclaration createASMDirective() { - return new CPPASTASMDeclaration(); - } - - @Override - protected IASTCastExpression createCastExpression() { - return new CPPASTCastExpression(); - } - - @Override - protected IASTStatement statement() throws EndOfFileException, - BacktrackException { - + protected IASTStatement statement() throws EndOfFileException, BacktrackException { switch (LT(1)) { // labeled statements case IToken.t_case: @@ -4373,9 +3897,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { IASTStatement tryBlock = compoundStatement(); List catchHandlers = new ArrayList(DEFAULT_CATCH_HANDLER_LIST_SIZE); catchHandlerSequence(catchHandlers); - ICPPASTTryBlockStatement tryStatement = createTryBlockStatement(); + ICPPASTTryBlockStatement tryStatement = nodeFactory.newTryBlockStatement(tryBlock); ((ASTNode) tryStatement).setOffset(startO); - tryStatement.setTryBody(tryBlock); for (int i = 0; i < catchHandlers.size(); ++i) { ICPPASTCatchHandler handler = catchHandlers.get(i); @@ -4385,33 +3908,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return tryStatement; } - - protected ICPPASTTryBlockStatement createTryBlockStatement() { - return new CPPASTTryBlockStatement(); - } - @Override protected void nullifyTranslationUnit() { translationUnit = null; } - @Override - protected IASTProblemStatement createProblemStatement() { - return new CPPASTProblemStatement(); - } - - @Override - protected IASTProblemExpression createProblemExpression() { - return new CPPASTProblemExpression(); - } - - @Override - protected IASTProblem createProblem(int signal, int offset, int length) { - IASTProblem result = new CPPASTProblem(signal, CharArrayUtils.EMPTY, true); - ((ASTNode) result).setOffsetAndLength(offset, length); - ((ASTNode) result).setLength(length); - return result; - } @Override protected IASTStatement parseWhileStatement() throws EndOfFileException, BacktrackException { @@ -4431,19 +3932,14 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { if (LT(1) != IToken.tEOC) while_body = statement(); - ICPPASTWhileStatement while_statement = (ICPPASTWhileStatement) createWhileStatement(); + IASTWhileStatement while_statement; + if (while_condition instanceof IASTExpression) + while_statement = nodeFactory.newWhileStatement((IASTExpression)while_condition, while_body); + else + while_statement = nodeFactory.newWhileStatement((IASTDeclaration)while_condition, while_body); + ((ASTNode) while_statement).setOffsetAndLength(startOffset, (while_body != null ? calculateEndOffset(while_body) : LA(1).getEndOffset()) - startOffset); - if (while_condition instanceof IASTExpression) { - while_statement.setCondition((IASTExpression) while_condition); - } else if (while_condition instanceof IASTDeclaration) { - while_statement.setConditionDeclaration((IASTDeclaration) while_condition); - } - - if (while_body != null) { - while_statement.setBody(while_body); - } - return while_statement; } @@ -4492,7 +3988,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { IASTNode condition= cppStyleCondition(IToken.tRPAREN); if (LT(1) == IToken.tEOC) { // Completing in the condition - ICPPASTIfStatement new_if = createIfStatement(); + ICPPASTIfStatement new_if = nodeFactory.newIfStatement(); if (condition instanceof IASTExpression) new_if.setConditionExpression((IASTExpression) condition); else if (condition instanceof IASTDeclaration) @@ -4507,7 +4003,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { IASTStatement thenClause = statement(); - ICPPASTIfStatement new_if_statement = createIfStatement(); + ICPPASTIfStatement new_if_statement = nodeFactory.newIfStatement(); ((ASTNode) new_if_statement).setOffset(so); if (condition != null && (condition instanceof IASTExpression || condition instanceof IASTDeclaration)) // shouldn't be possible but failure in condition() makes it so @@ -4594,7 +4090,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } IASTStatement switch_body = parseSwitchBody(); - ICPPASTSwitchStatement switch_statement = createSwitchStatement(); + ICPPASTSwitchStatement switch_statement = nodeFactory.newSwitchStatement(); ((ASTNode) switch_statement).setOffsetAndLength(startOffset, (switch_body != null ? calculateEndOffset(switch_body) : LA(1).getEndOffset()) - startOffset); if( switch_condition instanceof IASTExpression ) { @@ -4650,7 +4146,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { default: throw backtrack; } - ICPPASTForStatement for_statement = createForStatement(); + ICPPASTForStatement for_statement = nodeFactory.newForStatement(); IASTStatement for_body = null; if (LT(1) != IToken.tEOC) { for_body = statement(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTExplicitTemplateInstantiation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTExplicitTemplateInstantiation.java index 20b110fec8a..f7568172d68 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTExplicitTemplateInstantiation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTExplicitTemplateInstantiation.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; +import org.eclipse.cdt.core.dom.ast.IASTDeclaration; import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTExplicitTemplateInstantiation; /** @@ -19,7 +20,15 @@ public class GPPASTExplicitTemplateInstantiation extends CPPASTExplicitTemplateInstantiation implements IGPPASTExplicitTemplateInstantiation { - private int mod; + public GPPASTExplicitTemplateInstantiation() { + super(); + } + + public GPPASTExplicitTemplateInstantiation(IASTDeclaration declaration) { + super(declaration); + } + + private int mod; public int getModifier() { return mod; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java index ddd01ad8c20..f251ec625d6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; +import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember; /** @@ -18,7 +19,15 @@ import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember; public class GPPASTPointerToMember extends CPPASTPointerToMember implements IGPPASTPointerToMember { - private boolean isRestrict; + public GPPASTPointerToMember() { + super(); + } + + public GPPASTPointerToMember(IASTName n) { + super(n); + } + + private boolean isRestrict; /* (non-Javadoc) * @see org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer#isRestrict() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/ASTLiteralNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/ASTLiteralNode.java index cbea0b9cb6e..b7e8290130d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/ASTLiteralNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/ASTLiteralNode.java @@ -91,4 +91,8 @@ public class ASTLiteralNode implements IASTNode { public IToken getTrailingSyntax() { throw new UnsupportedOperationException(); } + + public boolean isFrozen() { + return false; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java index 55fdcf96f31..ef557dd8ce3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java @@ -70,6 +70,7 @@ public class PDOMASTAdapter { public int getNodeOffset() { return loc.getNodeOffset(); } + }; } @@ -187,6 +188,10 @@ public class PDOMASTAdapter { UnsupportedOperationException { return fDelegate.getTrailingSyntax(); } + + public boolean isFrozen() { + return fDelegate.isFrozen(); + } } private static class AnonymousEnumeration implements IEnumeration { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractExpression.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractExpression.java index cb16948a251..b3d8e35961e 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractExpression.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractExpression.java @@ -230,7 +230,7 @@ public class ExtractExpression extends ExtractedFunctionConstructionHelper { e.printStackTrace(); } - return new CPPASTNamedTypeSpecifier(name, false); + return new CPPASTNamedTypeSpecifier(name); } private ICPPASTQualifiedName getQname(IBinding classType, IBinding bind) { @@ -258,7 +258,7 @@ public class ExtractExpression extends ExtractedFunctionConstructionHelper { // TODO Auto-generated catch block e.printStackTrace(); } - return new CPPASTNamedTypeSpecifier(name, false); + return new CPPASTNamedTypeSpecifier(name); } private static IASTDeclSpecifier createSimpleDeclSpecifier(int type) { @@ -302,7 +302,7 @@ public class ExtractExpression extends ExtractedFunctionConstructionHelper { } }else if(binding instanceof CPPTypedef) { CPPTypedef typedef = (CPPTypedef) binding; - return new CPPASTNamedTypeSpecifier(new CPPASTName(typedef.getNameCharArray()), false); + return new CPPASTNamedTypeSpecifier(new CPPASTName(typedef.getNameCharArray())); } } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java index 945ff7ceb32..8b3a9c76f0a 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java @@ -48,6 +48,7 @@ import org.eclipse.cdt.core.dom.ast.IASTLabelStatement; import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.INodeFactory; import org.eclipse.cdt.core.dom.ast.IASTNullStatement; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; @@ -71,6 +72,8 @@ import org.eclipse.cdt.core.parser.IProblem; import org.eclipse.cdt.core.parser.util.DebugUtil; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit; +import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; +import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement; /** @@ -113,7 +116,7 @@ public abstract class BuildASTParserAction { protected final IASTTranslationUnit tu; /** Abstract factory for creating AST node objects */ - private final IASTNodeFactory nodeFactory; + private final INodeFactory nodeFactory; /** @@ -154,7 +157,7 @@ public abstract class BuildASTParserAction { * @param tu Root node of the AST, its list of declarations should be empty. * @throws NullPointerException if any of the parameters are null */ - public BuildASTParserAction(IASTNodeFactory nodeFactory, IParserActionTokenProvider parser, IASTTranslationUnit tu) { + public BuildASTParserAction(INodeFactory nodeFactory, IParserActionTokenProvider parser, IASTTranslationUnit tu) { if(nodeFactory == null) throw new NullPointerException("nodeFactory is null"); //$NON-NLS-1$ if(parser == null) @@ -175,12 +178,15 @@ public abstract class BuildASTParserAction { protected void addNameToCompletionNode(IASTName name, String prefix) { if(completionNode == null) { prefix = (prefix == null || prefix.length() == 0) ? null : prefix; - completionNode = nodeFactory.newCompletionNode(prefix, tu); + completionNode = newCompletionNode(prefix, tu); } completionNode.addName(name); } + public ASTCompletionNode newCompletionNode(String prefix, IASTTranslationUnit tu) { + return new ASTCompletionNode((prefix == null || prefix.length() == 0) ? null : prefix, tu); + } /** * Used to combine completion nodes from secondary parsers into @@ -426,6 +432,7 @@ public abstract class BuildASTParserAction { } resolveAmbiguityNodes(); + tu.freeze(); if(TRACE_AST_STACK) System.out.println(astStack); } @@ -443,7 +450,7 @@ public abstract class BuildASTParserAction { * ambiguity nodes were created. */ private void resolveAmbiguityNodes() { - tu.accept(EMPTY_VISITOR); + tu.accept(EMPTY_VISITOR); // TODO make sure the DOM parser still does it this way if (tu instanceof ASTTranslationUnit) { ((ASTTranslationUnit)tu).cleanupAfterAmbiguityResolution(); } @@ -509,7 +516,7 @@ public abstract class BuildASTParserAction { else if(isImplicitInt(decl)) result = expressionStatement; else { - result = nodeFactory.newAmbiguousStatement(declarationStatement, expressionStatement); + result = createAmbiguousStatement(declarationStatement, expressionStatement); setOffsetAndLength(result); } @@ -518,6 +525,9 @@ public abstract class BuildASTParserAction { if(TRACE_AST_STACK) System.out.println(astStack); } + protected abstract IASTAmbiguousStatement createAmbiguousStatement(IASTStatement ... statements); + + /** * Wrap a declaration in a DeclarationStatement. @@ -701,7 +711,7 @@ public abstract class BuildASTParserAction { if(alternateExpr == null || alternateExpr instanceof IASTProblemExpression) astStack.push(expr); else { - IASTNode ambiguityNode = nodeFactory.newAmbiguousExpression(expr, (IASTExpression)alternateExpr); + IASTNode ambiguityNode = createAmbiguousExpression(expr, (IASTExpression)alternateExpr); setOffsetAndLength(ambiguityNode); astStack.push(ambiguityNode); } @@ -710,6 +720,9 @@ public abstract class BuildASTParserAction { } + protected abstract IASTAmbiguousExpression createAmbiguousExpression(IASTExpression ... expressions); + + /** * Lots of rules, no need to list them. * @param operator From IASTUnaryExpression @@ -745,7 +758,7 @@ public abstract class BuildASTParserAction { if(alternateExpr == null || alternateExpr instanceof IASTProblemExpression) astStack.push(expr); else { - IASTNode ambiguityNode = nodeFactory.newAmbiguousExpression(expr, (IASTExpression)alternateExpr); + IASTNode ambiguityNode = createAmbiguousExpression(expr, (IASTExpression)alternateExpr); setOffsetAndLength(ambiguityNode); astStack.push(ambiguityNode); } @@ -1416,15 +1429,14 @@ public abstract class BuildASTParserAction { } - - + /** * statement ::= ERROR_TOKEN */ public void consumeStatementProblem() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - consumeProblem(nodeFactory.newProblemStatement()); + consumeProblem(nodeFactory.newProblemStatement(null)); } /** @@ -1434,7 +1446,7 @@ public abstract class BuildASTParserAction { public void consumeExpressionProblem() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - consumeProblem(nodeFactory.newProblemExpression()); + consumeProblem(nodeFactory.newProblemExpression(null)); } /** @@ -1443,7 +1455,7 @@ public abstract class BuildASTParserAction { public void consumeDeclarationProblem() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - consumeProblem(nodeFactory.newProblemDeclaration()); + consumeProblem(nodeFactory.newProblemDeclaration(null)); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java index 6d5589cefaa..b8df50d1665 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java @@ -44,6 +44,7 @@ import org.eclipse.cdt.core.dom.ast.IASTSwitchStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; +import org.eclipse.cdt.core.dom.ast.c.ICNodeFactory; import org.eclipse.cdt.core.dom.ast.c.ICASTArrayDesignator; import org.eclipse.cdt.core.dom.ast.c.ICASTArrayModifier; import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; @@ -68,6 +69,10 @@ import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99NoCastExpressionParser; import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99Parsersym; import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99SizeofExpressionParser; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; +import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; +import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement; +import org.eclipse.cdt.internal.core.dom.parser.c.CASTAmbiguousExpression; +import org.eclipse.cdt.internal.core.dom.parser.c.CASTAmbiguousStatement; /** * Semantic actions called by the C99 parser to build an AST. @@ -80,14 +85,14 @@ public class C99BuildASTParserAction extends BuildASTParserAction { private final ITokenMap tokenMap; /** Used to create the AST node objects */ - protected final IC99ASTNodeFactory nodeFactory; + protected final ICNodeFactory nodeFactory; /** * @param parser * @param orderedTerminalSymbols When an instance of this class is created for a parser * that parsers token kinds will be mapped back to the base C99 parser's token kinds. */ - public C99BuildASTParserAction(IC99ASTNodeFactory nodeFactory, IParserActionTokenProvider parser, IASTTranslationUnit tu) { + public C99BuildASTParserAction(ICNodeFactory nodeFactory, IParserActionTokenProvider parser, IASTTranslationUnit tu) { super(nodeFactory, parser, tu); this.nodeFactory = nodeFactory; this.tokenMap = new TokenMap(C99Parsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols()); @@ -142,7 +147,8 @@ public class C99BuildASTParserAction extends BuildASTParserAction { IASTName name = createName(parser.getRightIToken()); IASTExpression owner = (IASTExpression) astStack.pop(); - IASTFieldReference expr = nodeFactory.newFieldReference(name, owner, isPointerDereference); + IASTFieldReference expr = nodeFactory.newFieldReference(name, owner); + expr.setIsPointerDereference(isPointerDereference); setOffsetAndLength(expr); astStack.push(expr); @@ -160,7 +166,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { consumeInitializerList(); // closes the scope IASTInitializerList list = (IASTInitializerList) astStack.pop(); IASTTypeId typeId = (IASTTypeId) astStack.pop(); - ICASTTypeIdInitializerExpression expr = nodeFactory.newCTypeIdInitializerExpression(typeId, list); + ICASTTypeIdInitializerExpression expr = nodeFactory.newTypeIdInitializerExpression(typeId, list); setOffsetAndLength(expr); astStack.push(expr); @@ -274,7 +280,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { assert isStatic || isVarSized || hasTypeQualifierList; - ICASTArrayModifier arrayModifier = nodeFactory.newModifiedArrayModifier(); + ICASTArrayModifier arrayModifier = nodeFactory.newModifiedArrayModifier(null); // consume all the stuff between the square brackets into an array modifier arrayModifier.setStatic(isStatic); @@ -300,7 +306,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { public void consumeDirectDeclaratorFunctionDeclaratorKnR() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - ICASTKnRFunctionDeclarator declarator = nodeFactory.newCKnRFunctionDeclarator(); + ICASTKnRFunctionDeclarator declarator = nodeFactory.newKnRFunctionDeclarator(null, null); IASTName[] names = astStack.topScope().toArray(new IASTName[0]); declarator.setParameterNames(names); astStack.closeScope(); @@ -331,7 +337,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { public void consumePointer() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - IASTPointer pointer = nodeFactory.newCPointer(); + IASTPointer pointer = nodeFactory.newPointer(); IToken star = parser.getRightIToken(); setOffsetAndLength(pointer, star); astStack.push(pointer); @@ -347,7 +353,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { public void consumePointerTypeQualifierList() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - ICASTPointer pointer = nodeFactory.newCPointer(); + ICASTPointer pointer = nodeFactory.newPointer(); for(Object o : astStack.closeScope()) { IToken token = (IToken)o; @@ -408,7 +414,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); IASTInitializer initializer = (IASTInitializer)astStack.pop(); - ICASTDesignatedInitializer result = nodeFactory.newCDesignatedInitializer(initializer); + ICASTDesignatedInitializer result = nodeFactory.newDesignatedInitializer(initializer); for(Object o : astStack.closeScope()) result.addDesignator((ICASTDesignator)o); @@ -427,7 +433,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); IASTExpression expr = (IASTExpression) astStack.pop(); - ICASTArrayDesignator designator = nodeFactory.newCArrayDesignator(expr); + ICASTArrayDesignator designator = nodeFactory.newArrayDesignator(expr); setOffsetAndLength(designator); astStack.push(designator); @@ -442,7 +448,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); IASTName name = createName(parser.getRightIToken()); - ICASTFieldDesignator designator = nodeFactory.newCFieldDesignator(name); + ICASTFieldDesignator designator = nodeFactory.newFieldDesignator(name); setOffsetAndLength(designator); astStack.push(designator); @@ -456,7 +462,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { public void consumeDeclarationSpecifiersSimple() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - ICASTSimpleDeclSpecifier declSpec = nodeFactory.newCSimpleDeclSpecifier(); + ICASTSimpleDeclSpecifier declSpec = nodeFactory.newSimpleDeclSpecifier(); for(Object specifier : astStack.closeScope()) setSpecifier(declSpec, specifier); @@ -495,7 +501,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { public void consumeDeclarationSpecifiersTypedefName() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - ICASTTypedefNameSpecifier declSpec = nodeFactory.newCTypedefNameSpecifier(); + ICASTTypedefNameSpecifier declSpec = nodeFactory.newTypedefNameSpecifier(null); for(Object o : astStack.topScope()) { if(o instanceof IToken) { @@ -562,7 +568,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { if(baseKind(parser.getLeftIToken()) == C99Parsersym.TK_EndOfCompletion) return; - IASTDeclSpecifier declSpecifier = nodeFactory.newCSimpleDeclSpecifier(); + IASTDeclSpecifier declSpecifier = nodeFactory.newSimpleDeclSpecifier(); IASTSimpleDeclaration declaration = nodeFactory.newSimpleDeclaration(declSpecifier); setOffsetAndLength(declSpecifier); setOffsetAndLength(declaration); @@ -602,7 +608,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { IASTName name = (hasName) ? createName(parser.getRuleTokens().get(1)) : nodeFactory.newName(); - ICASTCompositeTypeSpecifier typeSpec = nodeFactory.newCCompositeTypeSpecifier(key, name); + ICASTCompositeTypeSpecifier typeSpec = nodeFactory.newCompositeTypeSpecifier(key, name); for(Object o : astStack.closeScope()) typeSpec.addMemberDeclaration((IASTDeclaration)o); @@ -707,7 +713,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { IASTStatement body = (IASTStatement) astStack.pop(); IASTExpression expr = (IASTExpression) astStack.pop(); - IASTSwitchStatement stat = nodeFactory.newSwitchStatment(expr, body); + IASTSwitchStatement stat = nodeFactory.newSwitchStatement(expr, body); setOffsetAndLength(stat); astStack.push(stat); @@ -753,7 +759,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction { declSpecifier = (IASTDeclSpecifier) astStack.pop(); } else { // there are no decl specifiers, implicit int - declSpecifier = nodeFactory.newCSimpleDeclSpecifier(); + declSpecifier = nodeFactory.newSimpleDeclSpecifier(); } IASTFunctionDefinition def = nodeFactory.newFunctionDefinition(declSpecifier, decl, body); @@ -795,4 +801,17 @@ public class C99BuildASTParserAction extends BuildASTParserAction { if(TRACE_AST_STACK) System.out.println(astStack); } + + + + @Override + protected IASTAmbiguousExpression createAmbiguousExpression(IASTExpression... expressions) { + return new CASTAmbiguousExpression(expressions); + } + + + @Override + protected IASTAmbiguousStatement createAmbiguousStatement(IASTStatement... statements) { + return new CASTAmbiguousStatement(statements); + } } \ No newline at end of file diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/IC99ASTNodeFactory.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/IC99ASTNodeFactory.java deleted file mode 100644 index 5b01c30a4df..00000000000 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/IC99ASTNodeFactory.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.core.dom.lrparser.action.c99; - -import org.eclipse.cdt.core.dom.ast.IASTExpression; -import org.eclipse.cdt.core.dom.ast.IASTFieldReference; -import org.eclipse.cdt.core.dom.ast.IASTInitializer; -import org.eclipse.cdt.core.dom.ast.IASTInitializerList; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTTypeId; -import org.eclipse.cdt.core.dom.ast.c.ICASTArrayDesignator; -import org.eclipse.cdt.core.dom.ast.c.ICASTArrayModifier; -import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; -import org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer; -import org.eclipse.cdt.core.dom.ast.c.ICASTFieldDesignator; -import org.eclipse.cdt.core.dom.ast.c.ICASTPointer; -import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; -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.c.ICASTKnRFunctionDeclarator; -import org.eclipse.cdt.core.dom.lrparser.action.IASTNodeFactory; - -/** - * Factory for AST nodes that are just used by C and not by C++. - * - * @author Mike Kucera - */ -public interface IC99ASTNodeFactory extends IASTNodeFactory { - - public IASTFieldReference newFieldReference(IASTName name, IASTExpression owner, boolean isPointerDereference); - - public ICASTTypeIdInitializerExpression newCTypeIdInitializerExpression(IASTTypeId typeId, IASTInitializerList list); - - public ICASTArrayModifier newModifiedArrayModifier(); - - public ICASTKnRFunctionDeclarator newCKnRFunctionDeclarator(); - - public ICASTPointer newCPointer(); - - public ICASTDesignatedInitializer newCDesignatedInitializer(IASTInitializer rhs); - - public ICASTArrayDesignator newCArrayDesignator(IASTExpression exp); - - public ICASTFieldDesignator newCFieldDesignator(IASTName name); - - public ICASTSimpleDeclSpecifier newCSimpleDeclSpecifier(); - - public ICASTTypedefNameSpecifier newCTypedefNameSpecifier(); - - public ICASTCompositeTypeSpecifier newCCompositeTypeSpecifier(int key, IASTName name); - - -} diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java index 12f8fa4f2e8..1ac49dc9708 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java @@ -59,6 +59,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExplicitTemplateInstantiation; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionWithTryBlock; @@ -67,6 +68,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceAlias; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPNodeFactory; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPointerToMember; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; @@ -100,6 +102,11 @@ import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPParsersym; import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPSizeofExpressionParser; import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPTemplateTypeParameterParser; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; +import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; +import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousExpression; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousStatement; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousTemplateArgument; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName; import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; @@ -117,14 +124,14 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { private final ITokenMap tokenMap; /** Used to create the AST node objects */ - protected final ICPPASTNodeFactory nodeFactory; + protected final ICPPNodeFactory nodeFactory; /** * @param parser * @param orderedTerminalSymbols When an instance of this class is created for a parser * that parsers token kinds will be mapped back to the base C99 parser's token kinds. */ - public CPPBuildASTParserAction(ICPPASTNodeFactory nodeFactory, IParserActionTokenProvider parser, IASTTranslationUnit tu) { + public CPPBuildASTParserAction(ICPPNodeFactory nodeFactory, IParserActionTokenProvider parser, IASTTranslationUnit tu) { super(nodeFactory, parser, tu); this.nodeFactory = nodeFactory; this.tokenMap = new TokenMap(CPPParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols()); @@ -186,7 +193,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { IASTExpression placement = (IASTExpression) astStack.pop(); // may be null boolean hasDoubleColon = astStack.pop() != null; - ICPPASTNewExpression newExpression = nodeFactory.newCPPNewExpression(placement, initializer, typeId); + ICPPASTNewExpression newExpression = nodeFactory.newNewExpression(placement, initializer, typeId); newExpression.setIsGlobal(hasDoubleColon); newExpression.setIsNewTypeId(isNewTypeId); @@ -268,7 +275,9 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { IASTName name = (IASTName) astStack.pop(); IASTExpression owner = (IASTExpression) astStack.pop(); - IASTFieldReference expr = nodeFactory.newFieldReference(name, owner, isPointerDereference, hasTemplateKeyword); + ICPPASTFieldReference expr = nodeFactory.newFieldReference(name, owner); + expr.setIsPointerDereference(isPointerDereference); + expr.setIsTemplate(hasTemplateKeyword); setOffsetAndLength(expr); astStack.push(expr); @@ -287,7 +296,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { IToken token = (IToken) astStack.pop(); int type = asICPPASTSimpleTypeConstructorExpressionType(token); - ICPPASTSimpleTypeConstructorExpression typeConstructor = nodeFactory.newCPPSimpleTypeConstructorExpression(type, expression); + ICPPASTSimpleTypeConstructorExpression typeConstructor = nodeFactory.newSimpleTypeConstructorExpression(type, expression); setOffsetAndLength(typeConstructor); astStack.push(typeConstructor); @@ -340,7 +349,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { int endOffset = endOffset(name); IASTName qualifiedName = createQualifiedName(nestedNames, startOffset, endOffset, dColon != null); - ICPPASTTypenameExpression typenameExpr = nodeFactory.newCPPTypenameExpression(qualifiedName, expr, isTemplate); + ICPPASTTypenameExpression typenameExpr = nodeFactory.newTypenameExpression(qualifiedName, expr, isTemplate); setOffsetAndLength(typenameExpr); astStack.push(typenameExpr); @@ -387,7 +396,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { List templateArguments = astStack.closeScope(); IASTName name = (IASTName) astStack.pop(); - ICPPASTTemplateId templateId = nodeFactory.newCPPTemplateId(name); + ICPPASTTemplateId templateId = nodeFactory.newTemplateId(name); for(Object arg : templateArguments) { if(arg instanceof IASTExpression) @@ -422,7 +431,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { IASTTypeId typeId = (IASTTypeId) astStack.pop(); IASTIdExpression idExpression = (IASTIdExpression) result; - ICPPASTAmbiguousTemplateArgument ambiguityNode = nodeFactory.newAmbiguousTemplateArgument(typeId, idExpression); + ICPPASTAmbiguousTemplateArgument ambiguityNode = new CPPASTAmbiguousTemplateArgument(typeId, idExpression); //setOffsetAndLength(ambiguityNode); astStack.push(ambiguityNode); @@ -442,7 +451,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { tokens = tokens.subList(1, tokens.size()); OverloadableOperator operator = getOverloadableOperator(tokens); - ICPPASTOperatorName name = nodeFactory.newCPPOperatorName(operator); + ICPPASTOperatorName name = nodeFactory.newOperatorName(operator.toCharArray()); setOffsetAndLength(name); astStack.push(name); @@ -485,7 +494,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { char[] chars = rep.toCharArray(); IASTTypeId typeId = (IASTTypeId) astStack.pop(); - ICPPASTConversionName name = nodeFactory.newCPPConversionName(chars, typeId); + ICPPASTConversionName name = nodeFactory.newConversionName(chars, typeId); setOffsetAndLength(name); astStack.push(name); @@ -549,10 +558,11 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { IASTName name = (IASTName) astStack.pop(); - ICPPASTQualifiedName qualifiedName = nodeFactory.newCPPQualifiedName(); + ICPPASTQualifiedName qualifiedName = nodeFactory.newQualifiedName(); qualifiedName.addName(name); qualifiedName.setFullyQualified(true); - ((CPPASTQualifiedName)qualifiedName).setSignature("::" + name.toString()); //$NON-NLS-1$ + if(qualifiedName instanceof CPPASTQualifiedName) + ((CPPASTQualifiedName)qualifiedName).setSignature("::" + name.toString()); //$NON-NLS-1$ setOffsetAndLength(qualifiedName); astStack.push(qualifiedName); @@ -573,9 +583,9 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { IASTSwitchStatement stat; if(condition instanceof IASTExpression) - stat = nodeFactory.newSwitchStatment((IASTExpression)condition, body); + stat = nodeFactory.newSwitchStatement((IASTExpression)condition, body); else - stat = nodeFactory.newSwitchStatment((IASTDeclaration)condition, body); + stat = nodeFactory.newSwitchStatement((IASTDeclaration)condition, body); setOffsetAndLength(stat); @@ -802,7 +812,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { if(!endsWithColonColon && !startsWithColonColon && names.size() == 1) return names.getFirst(); // its actually an unqualified name - ICPPASTQualifiedName qualifiedName = nodeFactory.newCPPQualifiedName(); + ICPPASTQualifiedName qualifiedName = nodeFactory.newQualifiedName(); qualifiedName.setFullyQualified(startsWithColonColon); setOffsetAndLength(qualifiedName, startOffset, endOffset - startOffset); for(IASTName name : reverseIterable(names)) @@ -1170,7 +1180,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { public void consumeDeclarationSpecifiersSimple() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - ICPPASTDeclSpecifier declSpec = nodeFactory.newCPPSimpleDeclSpecifier(); + ICPPASTDeclSpecifier declSpec = nodeFactory.newSimpleDeclSpecifier(); for(Object token : astStack.closeScope()) setSpecifier(declSpec, (IToken)token); @@ -1217,7 +1227,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { IASTName typeName = findFirstAndRemove(topScope, IASTName.class); // TODO what does the second argument mean? - ICPPASTNamedTypeSpecifier declSpec = nodeFactory.newCPPNamedTypeSpecifier(typeName, false); + ICPPASTNamedTypeSpecifier declSpec = nodeFactory.newTypedefNameSpecifier(typeName); // now apply the rest of the specifiers for(Object token : topScope) @@ -1286,14 +1296,14 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { // to be interpreted as a named type specifier for content assist to work. else if(matchTokens(ruleTokens, tokenMap, TK_Completion, TK_EndOfCompletion)) { IASTName name = createName(parser.getLeftIToken()); - declSpecifier = nodeFactory.newCPPNamedTypeSpecifier(name, false); + declSpecifier = nodeFactory.newTypedefNameSpecifier(name); setOffsetAndLength(declSpecifier, offset(name), length(name)); declarators = Collections.emptyList(); // throw away the bogus declarator } // can happen if implicit int is used else if(declSpecifier == null) { - declSpecifier = nodeFactory.newCPPSimpleDeclSpecifier(); + declSpecifier = nodeFactory.newSimpleDeclSpecifier(); setOffsetAndLength(declSpecifier, parser.getLeftIToken().getStartOffset(), 0); } @@ -1304,7 +1314,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { ruleTokens.size() >= 2 && baseKind(nameToken = ruleTokens.get(ruleTokens.size() - 2)) == TK_identifier) { - declSpecifier = nodeFactory.newCPPSimpleDeclSpecifier(); + declSpecifier = nodeFactory.newSimpleDeclSpecifier(); for(IToken t : ruleTokens.subList(0, ruleTokens.size()-1)) setSpecifier(declSpecifier, t); @@ -1493,7 +1503,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { if(className == null) className = nodeFactory.newName(); - ICPPASTCompositeTypeSpecifier classSpecifier = nodeFactory.newCPPCompositeTypeSpecifier(key, className); + ICPPASTCompositeTypeSpecifier classSpecifier = nodeFactory.newCompositeTypeSpecifier(key, className); for(Object base : baseSpecifiers) classSpecifier.addBaseSpecifier((ICPPASTBaseSpecifier)base); @@ -1523,7 +1533,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { public void consumePointer() { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); - IASTPointer pointer = nodeFactory.newCPPPointer(); + IASTPointer pointer = nodeFactory.newPointer(); List tokens = astStack.closeScope(); addCVQualifiersToPointer(pointer, tokens); setOffsetAndLength(pointer); @@ -1620,7 +1630,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); IASTName name = nodeFactory.newName(); - ICPPASTFunctionDeclarator declarator = nodeFactory.newCPPFunctionDeclarator(name); + ICPPASTFunctionDeclarator declarator = nodeFactory.newFunctionDeclarator(name); for(Object typeId : astStack.closeScope()) { declarator.addExceptionSpecificationTypeId((IASTTypeId) typeId); @@ -1713,12 +1723,11 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { ICPPASTFunctionDefinition definition; if (isTryBlockDeclarator) { ICPPASTFunctionWithTryBlock tryblock= nodeFactory.newFunctionTryBlock(declSpec, declarator, body); - for(Object handler : handlers) { + for(Object handler : handlers) tryblock.addCatchHandler((ICPPASTCatchHandler)handler); - } - definition= tryblock; + definition = tryblock; } else { - definition= (ICPPASTFunctionDefinition) nodeFactory.newFunctionDefinition(declSpec, declarator, body); + definition = nodeFactory.newFunctionDefinition(declSpec, declarator, body); } @@ -1873,8 +1882,16 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { } - - + @Override + protected IASTAmbiguousExpression createAmbiguousExpression(IASTExpression... expressions) { + return new CPPASTAmbiguousExpression(expressions); + } + + + @Override + protected IASTAmbiguousStatement createAmbiguousStatement(IASTStatement... statements) { + return new CPPASTAmbiguousStatement(statements); + } } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/ICPPASTNodeFactory.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/ICPPASTNodeFactory.java deleted file mode 100644 index 6cc42a5f2f1..00000000000 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/ICPPASTNodeFactory.java +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.core.dom.lrparser.action.cpp; - -import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; -import org.eclipse.cdt.core.dom.ast.IASTDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTExpression; -import org.eclipse.cdt.core.dom.ast.IASTFieldReference; -import org.eclipse.cdt.core.dom.ast.IASTForStatement; -import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTIdExpression; -import org.eclipse.cdt.core.dom.ast.IASTIfStatement; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTPointer; -import org.eclipse.cdt.core.dom.ast.IASTStatement; -import org.eclipse.cdt.core.dom.ast.IASTSwitchStatement; -import org.eclipse.cdt.core.dom.ast.IASTTypeId; -import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTAmbiguousTemplateArgument; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCatchHandler; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExplicitTemplateInstantiation; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionWithTryBlock; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamedTypeSpecifier; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceAlias; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPointerToMember; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTReferenceOperator; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleDeclSpecifier; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeTemplateParameter; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateSpecialization; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisibilityLabel; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; -import org.eclipse.cdt.core.dom.lrparser.action.IASTNodeFactory; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousDeclaration; -import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; - -/** - * TODO remove CPP from method names. - * - * @author Mike Kucera - */ -@SuppressWarnings("restriction") -public interface ICPPASTNodeFactory extends IASTNodeFactory { - - public ICPPASTOperatorName newCPPOperatorName(OverloadableOperator op); - - public ICPPASTNewExpression newCPPNewExpression(IASTExpression placement, IASTExpression initializer, IASTTypeId typeId); - - public IASTFieldReference newFieldReference(IASTName name, IASTExpression owner, boolean isPointerDereference, boolean isTemplate); - - public ICPPASTTemplateId newCPPTemplateId(IASTName templateName); - - public ICPPASTConversionName newCPPConversionName(char[] name, IASTTypeId typeId); - - public ICPPASTQualifiedName newCPPQualifiedName(); - - public IASTSwitchStatement newSwitchStatment(IASTDeclaration controller, IASTStatement body); - - public IASTIfStatement newIfStatement(IASTDeclaration condition, IASTStatement then, IASTStatement elseClause); - - public IASTForStatement newForStatement(IASTStatement init, IASTDeclaration condition, - IASTExpression iterationExpression, IASTStatement body); - - public IASTWhileStatement newWhileStatement(IASTDeclaration condition, IASTStatement body); - - public ICPPASTDeleteExpression newDeleteExpression(IASTExpression operand); - - public ICPPASTSimpleDeclSpecifier newCPPSimpleDeclSpecifier(); - - public ICPPASTSimpleTypeConstructorExpression newCPPSimpleTypeConstructorExpression(int type, IASTExpression expression); - - public ICPPASTTypenameExpression newCPPTypenameExpression(IASTName qualifiedName, IASTExpression expr, boolean isTemplate); - - public ICPPASTNamespaceAlias newNamespaceAlias(IASTName alias, IASTName qualifiedName); - - public ICPPASTUsingDeclaration newUsingDeclaration(IASTName name); - - public ICPPASTUsingDirective newUsingDirective(IASTName name); - - public ICPPASTLinkageSpecification newLinkageSpecification(String name); - - public ICPPASTNamespaceDefinition newNamespaceDefinition(IASTName name); - - public ICPPASTTemplateDeclaration newTemplateDeclaration(IASTDeclaration declaration); - - public ICPPASTExplicitTemplateInstantiation newExplicitTemplateInstantiation(IASTDeclaration declaration); - - public ICPPASTTemplateSpecialization newTemplateSpecialization(IASTDeclaration declaration); - - public ICPPASTTryBlockStatement newTryBlockStatement(IASTStatement body); - - public ICPPASTCatchHandler newCatchHandler(IASTDeclaration decl, IASTStatement body); - - public ICPPASTVisibilityLabel newVisibilityLabel(int visibility); - - public ICPPASTBaseSpecifier newBaseSpecifier(IASTName name, int visibility, boolean isVirtual); - - public ICPPASTCompositeTypeSpecifier newCPPCompositeTypeSpecifier(int key, IASTName name); - - public ICPPASTNamedTypeSpecifier newCPPNamedTypeSpecifier(IASTName name, boolean typename); - - public IASTPointer newCPPPointer(); - - public ICPPASTReferenceOperator newReferenceOperator(); - - public ICPPASTPointerToMember newPointerToMember(IASTName name); - - public ICPPASTConstructorInitializer newConstructorInitializer(IASTExpression exp); - - public ICPPASTFunctionDeclarator newCPPFunctionDeclarator(IASTName name); - - public ICPPASTConstructorChainInitializer newConstructorChainInitializer(IASTName name, IASTExpression expr); - - public ICPPASTFunctionWithTryBlock newFunctionTryBlock(IASTDeclSpecifier declSpecifier, IASTFunctionDeclarator declarator, - IASTStatement bodyStatement); - - public ICPPASTSimpleTypeTemplateParameter newSimpleTypeTemplateParameter(int type, IASTName name, IASTTypeId typeId); - - public ICPPASTTemplatedTypeTemplateParameter newTemplatedTypeTemplateParameter(IASTName name, IASTExpression idExpression); - - public IASTAmbiguousDeclaration newAmbiguousDeclaration(IASTDeclaration... declarations); - - public ICPPASTAmbiguousTemplateArgument newAmbiguousTemplateArgument(IASTTypeId typeId, IASTIdExpression idExpression); -} diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/c99/C99Language.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/c99/C99Language.java index 294d4a538ca..98215dde0a7 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/c99/C99Language.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/c99/C99Language.java @@ -16,7 +16,6 @@ import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage; import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration; import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.model.IContributedModelBuilder; @@ -24,6 +23,7 @@ import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99Parser; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; import org.eclipse.cdt.internal.core.dom.parser.c.CASTTranslationUnit; /** @@ -84,7 +84,7 @@ public class C99Language extends BaseExtensibleLanguage { */ @Override protected IASTTranslationUnit createASTTranslationUnit(IIndex index, IScanner preprocessor) { - IASTTranslationUnit tu = C99ASTNodeFactory.DEFAULT_INSTANCE.newTranslationUnit(); + IASTTranslationUnit tu = CNodeFactory.getDefault().newTranslationUnit(); tu.setIndex(index); if(tu instanceof CASTTranslationUnit) { ((CASTTranslationUnit)tu).setLocationResolver(preprocessor.getLocationResolver()); diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/cpp/ISOCPPLanguage.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/cpp/ISOCPPLanguage.java index b0520e006e7..a7a639bd35f 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/cpp/ISOCPPLanguage.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/cpp/ISOCPPLanguage.java @@ -16,7 +16,6 @@ import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage; import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration; -import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory; import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration; import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.model.IContributedModelBuilder; @@ -24,6 +23,7 @@ import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPParser; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTranslationUnit; /** @@ -86,7 +86,7 @@ public class ISOCPPLanguage extends BaseExtensibleLanguage { */ @Override protected IASTTranslationUnit createASTTranslationUnit(IIndex index, IScanner preprocessor) { - IASTTranslationUnit tu = CPPASTNodeFactory.DEFAULT_INSTANCE.newTranslationUnit(); + IASTTranslationUnit tu = CPPNodeFactory.getDefault().newTranslationUnit(); tu.setIndex(index); if(tu instanceof CPPASTTranslationUnit) { ((CPPASTTranslationUnit)tu).setLocationResolver(preprocessor.getLocationResolver()); diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99ExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99ExpressionParser.java index 0bb87602f03..c4ac669ba18 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99ExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99ExpressionParser.java @@ -24,8 +24,8 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; public class C99ExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -170,7 +170,7 @@ public C99ExpressionParser() { // constructor } private void initActions(IASTTranslationUnit tu) { - action = new C99BuildASTParserAction ( C99ASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action = new C99BuildASTParserAction ( CNodeFactory.getDefault() , this, tu); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99NoCastExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99NoCastExpressionParser.java index 69c3b52f1dc..a44f952df90 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99NoCastExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99NoCastExpressionParser.java @@ -24,8 +24,8 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; public class C99NoCastExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -170,7 +170,7 @@ public C99NoCastExpressionParser() { // constructor } private void initActions(IASTTranslationUnit tu) { - action = new C99BuildASTParserAction ( C99ASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action = new C99BuildASTParserAction ( CNodeFactory.getDefault() , this, tu); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99Parser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99Parser.java index 4ede761463c..95ef80f25ad 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99Parser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99Parser.java @@ -24,8 +24,8 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; public class C99Parser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -170,7 +170,7 @@ public C99Parser() { // constructor } private void initActions(IASTTranslationUnit tu) { - action = new C99BuildASTParserAction ( C99ASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action = new C99BuildASTParserAction ( CNodeFactory.getDefault() , this, tu); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99SizeofExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99SizeofExpressionParser.java index 8e62cf5d5f1..27159c72728 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99SizeofExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/c99/C99SizeofExpressionParser.java @@ -24,8 +24,8 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; public class C99SizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -170,7 +170,7 @@ public C99SizeofExpressionParser() { // constructor } private void initActions(IASTTranslationUnit tu) { - action = new C99BuildASTParserAction ( C99ASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action = new C99BuildASTParserAction ( CNodeFactory.getDefault() , this, tu); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPExpressionParser.java index afd3352e9f1..23812493802 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPExpressionParser.java @@ -19,7 +19,6 @@ import java.util.*; import org.eclipse.cdt.core.dom.ast.*; import org.eclipse.cdt.core.dom.ast.cpp.*; -import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider; @@ -27,6 +26,7 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory; public class CPPExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -175,7 +175,7 @@ private void initActions(IASTTranslationUnit tu) { // binding resolution actions need access to IASTName nodes, temporary action = new CPPParserAction (); //action.resolver = new C99TypedefTrackerParserAction (this); - action.builder = new CPPBuildASTParserAction ( CPPASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action.builder = new CPPBuildASTParserAction ( CPPNodeFactory.getDefault() , this, tu); //action.builder.setTokenMap(CPPParsersym.orderedTerminalSymbols); // comment this line to use with backtracking parser diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java index ee731b6e27b..08dd551c97f 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java @@ -19,7 +19,6 @@ import java.util.*; import org.eclipse.cdt.core.dom.ast.*; import org.eclipse.cdt.core.dom.ast.cpp.*; -import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider; @@ -27,6 +26,7 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory; public class CPPNoCastExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -175,7 +175,7 @@ private void initActions(IASTTranslationUnit tu) { // binding resolution actions need access to IASTName nodes, temporary action = new CPPParserAction (); //action.resolver = new C99TypedefTrackerParserAction (this); - action.builder = new CPPBuildASTParserAction ( CPPASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action.builder = new CPPBuildASTParserAction ( CPPNodeFactory.getDefault() , this, tu); //action.builder.setTokenMap(CPPParsersym.orderedTerminalSymbols); // comment this line to use with backtracking parser diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoFunctionDeclaratorParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoFunctionDeclaratorParser.java index 256efc06acc..464f26bc6b1 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoFunctionDeclaratorParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoFunctionDeclaratorParser.java @@ -19,7 +19,6 @@ import java.util.*; import org.eclipse.cdt.core.dom.ast.*; import org.eclipse.cdt.core.dom.ast.cpp.*; -import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider; @@ -27,6 +26,7 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory; public class CPPNoFunctionDeclaratorParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -175,7 +175,7 @@ private void initActions(IASTTranslationUnit tu) { // binding resolution actions need access to IASTName nodes, temporary action = new CPPParserAction (); //action.resolver = new C99TypedefTrackerParserAction (this); - action.builder = new CPPBuildASTParserAction ( CPPASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action.builder = new CPPBuildASTParserAction ( CPPNodeFactory.getDefault() , this, tu); //action.builder.setTokenMap(CPPParsersym.orderedTerminalSymbols); // comment this line to use with backtracking parser diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPParser.java index 804b8cba91a..cf19493f476 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPParser.java @@ -19,7 +19,6 @@ import java.util.*; import org.eclipse.cdt.core.dom.ast.*; import org.eclipse.cdt.core.dom.ast.cpp.*; -import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider; @@ -27,6 +26,7 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory; public class CPPParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -175,7 +175,7 @@ private void initActions(IASTTranslationUnit tu) { // binding resolution actions need access to IASTName nodes, temporary action = new CPPParserAction (); //action.resolver = new C99TypedefTrackerParserAction (this); - action.builder = new CPPBuildASTParserAction ( CPPASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action.builder = new CPPBuildASTParserAction ( CPPNodeFactory.getDefault() , this, tu); //action.builder.setTokenMap(CPPParsersym.orderedTerminalSymbols); // comment this line to use with backtracking parser diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPSizeofExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPSizeofExpressionParser.java index 469357f230b..f339bcee8e5 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPSizeofExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPSizeofExpressionParser.java @@ -19,7 +19,6 @@ import java.util.*; import org.eclipse.cdt.core.dom.ast.*; import org.eclipse.cdt.core.dom.ast.cpp.*; -import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider; @@ -27,6 +26,7 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory; public class CPPSizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -175,7 +175,7 @@ private void initActions(IASTTranslationUnit tu) { // binding resolution actions need access to IASTName nodes, temporary action = new CPPParserAction (); //action.resolver = new C99TypedefTrackerParserAction (this); - action.builder = new CPPBuildASTParserAction ( CPPASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action.builder = new CPPBuildASTParserAction ( CPPNodeFactory.getDefault() , this, tu); //action.builder.setTokenMap(CPPParsersym.orderedTerminalSymbols); // comment this line to use with backtracking parser diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPTemplateTypeParameterParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPTemplateTypeParameterParser.java index 10039c579b3..51b528762e6 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPTemplateTypeParameterParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPTemplateTypeParameterParser.java @@ -19,7 +19,6 @@ import java.util.*; import org.eclipse.cdt.core.dom.ast.*; import org.eclipse.cdt.core.dom.ast.cpp.*; -import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider; @@ -27,6 +26,7 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory; public class CPPTemplateTypeParameterParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { @@ -175,7 +175,7 @@ private void initActions(IASTTranslationUnit tu) { // binding resolution actions need access to IASTName nodes, temporary action = new CPPParserAction (); //action.resolver = new C99TypedefTrackerParserAction (this); - action.builder = new CPPBuildASTParserAction ( CPPASTNodeFactory.DEFAULT_INSTANCE , this, tu); + action.builder = new CPPBuildASTParserAction ( CPPNodeFactory.getDefault() , this, tu); //action.builder.setTokenMap(CPPParsersym.orderedTerminalSymbols); // comment this line to use with backtracking parser diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/parser/upc/UPCASTNodeFactory.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/parser/upc/UPCASTNodeFactory.java index 5b7f3c54c15..ee0a3f3039c 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/parser/upc/UPCASTNodeFactory.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/parser/upc/UPCASTNodeFactory.java @@ -21,10 +21,15 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTTypedefNameSpecifier; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; +import org.eclipse.cdt.core.dom.upc.ast.IUPCASTCompositeTypeSpecifier; +import org.eclipse.cdt.core.dom.upc.ast.IUPCASTElaboratedTypeSpecifier; +import org.eclipse.cdt.core.dom.upc.ast.IUPCASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTForallStatement; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression; +import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement; +import org.eclipse.cdt.core.dom.upc.ast.IUPCASTTypedefNameSpecifier; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; import org.eclipse.cdt.internal.core.dom.parser.upc.ast.UPCASTCompositeTypeSpecifier; import org.eclipse.cdt.internal.core.dom.parser.upc.ast.UPCASTElaboratedTypeSpecifier; import org.eclipse.cdt.internal.core.dom.parser.upc.ast.UPCASTEnumerationSpecifier; @@ -45,7 +50,8 @@ import org.eclipse.cdt.internal.core.dom.parser.upc.ast.UPCASTUnarySizeofExpress * declaration specifiers. These UPC specific nodes add support * for 'strict', 'relaxed' and 'shared'. */ -public class UPCASTNodeFactory extends C99ASTNodeFactory { +@SuppressWarnings("restriction") +public class UPCASTNodeFactory extends CNodeFactory { public static final UPCASTNodeFactory DEFAULT_INSTANCE = new UPCASTNodeFactory(); @@ -101,28 +107,28 @@ public class UPCASTNodeFactory extends C99ASTNodeFactory { * Override to return UPC version of decl specifier. */ @Override - public ICASTSimpleDeclSpecifier newCSimpleDeclSpecifier() { + public IUPCASTSimpleDeclSpecifier newSimpleDeclSpecifier() { return new UPCASTSimpleDeclSpecifier(); } @Override - public ICASTCompositeTypeSpecifier newCCompositeTypeSpecifier(int key, IASTName name) { + public IUPCASTCompositeTypeSpecifier newCompositeTypeSpecifier(int key, IASTName name) { return new UPCASTCompositeTypeSpecifier(key, name); } @Override - public ICASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name) { + public IUPCASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name) { return new UPCASTElaboratedTypeSpecifier(kind, name); } @Override - public ICASTEnumerationSpecifier newEnumerationSpecifier(IASTName name) { + public IUPCASTEnumerationSpecifier newEnumerationSpecifier(IASTName name) { return new UPCASTEnumerationSpecifier(name); } @Override - public ICASTTypedefNameSpecifier newCTypedefNameSpecifier() { - return new UPCASTTypedefNameSpecifier(); + public IUPCASTTypedefNameSpecifier newTypedefNameSpecifier(IASTName name) { + return new UPCASTTypedefNameSpecifier(name); } } diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/upc/UPCLanguage.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/upc/UPCLanguage.java index 90fd09b0470..01ce11c287f 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/upc/UPCLanguage.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/upc/UPCLanguage.java @@ -16,7 +16,6 @@ import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage; import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration; import org.eclipse.cdt.core.dom.parser.upc.DOMToUPCTokenMap; import org.eclipse.cdt.core.dom.parser.upc.UPCKeyword; @@ -25,6 +24,7 @@ import org.eclipse.cdt.core.model.IContributedModelBuilder; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.ParserLanguage; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; import org.eclipse.cdt.internal.core.dom.parser.c.CASTTranslationUnit; import org.eclipse.cdt.internal.core.dom.parser.upc.UPCParser; @@ -92,7 +92,7 @@ public class UPCLanguage extends BaseExtensibleLanguage { */ @Override protected IASTTranslationUnit createASTTranslationUnit(IIndex index, IScanner preprocessor) { - IASTTranslationUnit tu = C99ASTNodeFactory.DEFAULT_INSTANCE.newTranslationUnit(); + IASTTranslationUnit tu = CNodeFactory.getDefault().newTranslationUnit(); tu.setIndex(index); if(tu instanceof CASTTranslationUnit) { ((CASTTranslationUnit)tu).setLocationResolver(preprocessor.getLocationResolver()); diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCExpressionParser.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCExpressionParser.java index 414f4b808ca..974d33b2455 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCExpressionParser.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCExpressionParser.java @@ -24,7 +24,6 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; import org.eclipse.cdt.core.dom.parser.upc.UPCASTNodeFactory; @@ -33,6 +32,7 @@ import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression; import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; public class UPCExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCNoCastExpressionParser.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCNoCastExpressionParser.java index db15600741c..2246467b429 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCNoCastExpressionParser.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCNoCastExpressionParser.java @@ -24,7 +24,6 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; import org.eclipse.cdt.core.dom.parser.upc.UPCASTNodeFactory; @@ -33,6 +32,7 @@ import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression; import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; public class UPCNoCastExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java index c3ec37202a3..7e0ebad6e12 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java @@ -24,7 +24,6 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; import org.eclipse.cdt.core.dom.parser.upc.UPCASTNodeFactory; @@ -33,6 +32,7 @@ import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression; import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; public class UPCParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCSizeofExpressionParser.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCSizeofExpressionParser.java index 9440f5a5b62..c986a62f790 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCSizeofExpressionParser.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCSizeofExpressionParser.java @@ -24,7 +24,6 @@ import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; -import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; import org.eclipse.cdt.core.dom.parser.upc.UPCASTNodeFactory; @@ -33,6 +32,7 @@ import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement; import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression; import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; public class UPCSizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser { diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/ast/UPCASTTypedefNameSpecifier.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/ast/UPCASTTypedefNameSpecifier.java index d50615945f6..b244e14176f 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/ast/UPCASTTypedefNameSpecifier.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/ast/UPCASTTypedefNameSpecifier.java @@ -28,6 +28,12 @@ public class UPCASTTypedefNameSpecifier extends CASTTypedefNameSpecifier public UPCASTTypedefNameSpecifier() { } + + + + public UPCASTTypedefNameSpecifier(IASTName name) { + super(name); + } public UPCASTTypedefNameSpecifier(IASTName name, IASTExpression blockSizeExpression) { super(name);