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 extends ICASTDesignator> 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