blob: 819c020599edc312137390b196ca6b8c1b7affc1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2016 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:
* Mike Kucera (IBM Corporation) - initial API and implementation
* Markus Schorn (Wind River Systems)
* Thomas Corbat (IFS)
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast.cpp;
import org.eclipse.cdt.core.dom.ast.IASTBinaryTypeIdExpression;
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.IASTInitializer;
import org.eclipse.cdt.core.dom.ast.IASTInitializerClause;
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.IASTReturnStatement;
import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IASTToken;
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.cpp.ICPPUnaryTypeTransformation.Operator;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTArrayRangeDesignator;
import org.eclipse.cdt.core.dom.parser.cpp.ICPPASTAttributeSpecifier;
import org.eclipse.cdt.core.parser.IScanner;
/**
* Factory for AST nodes for the C++ programming language.
*
* @since 5.1
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface ICPPNodeFactory extends INodeFactory {
/**
* @since 5.5
*/
public ICPPASTAliasDeclaration newAliasDeclaration(IASTName aliasName, ICPPASTTypeId aliasedType);
/**
* @since 5.2
*/
@Override
public ICPPASTArrayDeclarator newArrayDeclarator(IASTName name);
/**
* @since 6.0
*/
public ICPPASTArrayDesignator newArrayDesignator(ICPPASTExpression exp);
/**
* @since 6.0
*/
public IGPPASTArrayRangeDesignator newArrayRangeDesignatorGPP(ICPPASTExpression floor, ICPPASTExpression ceiling);
@Override
public ICPPASTArraySubscriptExpression newArraySubscriptExpression(IASTExpression arrayExpr, IASTExpression subscript);
/**
* @since 5.2
*/
public ICPPASTArraySubscriptExpression newArraySubscriptExpression(IASTExpression arrayExpr, IASTInitializerClause subscript);
/**
* @since 5.7
*/
public ICPPASTAttribute newAttribute(char[] name, char[] scope, IASTToken argumentClause, boolean packExpansion);
/**
* @since 6.0
*/
public ICPPASTAttributeList newAttributeList();
/**
* @since 5.8
*/
public ICPPASTBaseSpecifier newBaseSpecifier(ICPPASTNameSpecifier nameSpecifier, int visibility, boolean isVirtual);
@Override
public ICPPASTBinaryExpression newBinaryExpression(int op, IASTExpression expr1, IASTExpression expr2);
/**
* @since 5.2
*/
public ICPPASTBinaryExpression newBinaryExpression(int op, IASTExpression expr1, IASTInitializerClause expr2);
/**
* @since 5.3
*/
public IASTExpression newBinaryTypeIdExpression(IASTBinaryTypeIdExpression.Operator op, IASTTypeId type1, IASTTypeId type2);
/**
* @since 5.3
*/
public ICPPASTCapture newCapture();
@Override
public ICPPASTCastExpression newCastExpression(int operator, IASTTypeId typeId, IASTExpression operand);
public ICPPASTCatchHandler newCatchHandler(IASTDeclaration decl, IASTStatement body);
/**
* @since 5.7
*/
public ICPPASTClassVirtSpecifier newClassVirtSpecifier(ICPPASTClassVirtSpecifier.SpecifierKind kind);
@Override
public ICPPASTCompositeTypeSpecifier newCompositeTypeSpecifier(int key, IASTName name);
/**
* @since 5.2
*/
public ICPPASTConstructorChainInitializer newConstructorChainInitializer(IASTName id, IASTInitializer initializer);
/**
* @since 5.2
*/
public ICPPASTConstructorInitializer newConstructorInitializer(IASTInitializerClause[] args);
public ICPPASTConversionName newConversionName(IASTTypeId typeId);
/**
* @since 5.2
*/
@Override
public ICPPASTDeclarator newDeclarator(IASTName name);
/**
* @since 5.6
*/
public ICPPASTDecltypeSpecifier newDecltypeSpecifier(ICPPASTExpression decltypeExpression);
public ICPPASTDeleteExpression newDeleteExpression(IASTExpression operand);
/**
* @since 6.0
*/
public ICPPASTDesignatedInitializer newDesignatedInitializer(ICPPASTInitializerClause initializer);
@Override
public ICPPASTElaboratedTypeSpecifier newElaboratedTypeSpecifier(int kind, IASTName name);
/**
* @since 5.2
*/
public ICPPASTEnumerationSpecifier newEnumerationSpecifier(boolean isScoped, IASTName name, ICPPASTDeclSpecifier baseType);
public ICPPASTExplicitTemplateInstantiation newExplicitTemplateInstantiation(IASTDeclaration declaration);
@Override
public ICPPASTExpressionList newExpressionList();
/**
* @since 5.2
*/
@Override
public ICPPASTFieldDeclarator newFieldDeclarator(IASTName name, IASTExpression bitFieldSize);
/**
* @since 6.0
*/
public ICPPASTFieldDesignator newFieldDesignator(IASTName name);
@Override
public ICPPASTFieldReference newFieldReference(IASTName name, IASTExpression owner);
public ICPPASTForStatement newForStatement();
public ICPPASTForStatement newForStatement(IASTStatement init, IASTDeclaration condition,
IASTExpression iterationExpression, IASTStatement body);
@Override
public ICPPASTForStatement newForStatement(IASTStatement init, IASTExpression condition,
IASTExpression iterationExpression, IASTStatement body);
/**
* @since 5.2
*/
@Override
public ICPPASTFunctionCallExpression newFunctionCallExpression(IASTExpression idExpr, IASTInitializerClause[] arguments);
@Override
public ICPPASTFunctionDeclarator newFunctionDeclarator(IASTName name);
@Override
public ICPPASTFunctionDefinition newFunctionDefinition(IASTDeclSpecifier declSpecifier,
IASTFunctionDeclarator declarator, IASTStatement bodyStatement);
public ICPPASTFunctionWithTryBlock newFunctionTryBlock(IASTDeclSpecifier declSpecifier, IASTFunctionDeclarator declarator,
IASTStatement bodyStatement);
public ICPPASTIfStatement newIfStatement();
public ICPPASTIfStatement newIfStatement(IASTDeclaration condition, IASTStatement then, IASTStatement elseClause);
@Override
public ICPPASTIfStatement newIfStatement(IASTExpression condition, IASTStatement then, IASTStatement elseClause);
/**
* @since 5.2
*/
@Override
public ICPPASTInitializerList newInitializerList();
/**
* @since 5.3
*/
public ICPPASTLambdaExpression newLambdaExpression();
public ICPPASTLinkageSpecification newLinkageSpecification(String literal);
@Override
public ICPPASTLiteralExpression newLiteralExpression(int kind, String rep);
/**
* @since 6.5
*/
public ICPPASTLiteralExpression newLiteralExpression(int kind, String rep, char[] numericCompilerSuffixes);
public ICPPASTNamespaceAlias newNamespaceAlias(IASTName alias, IASTName qualifiedName);
public ICPPASTNamespaceDefinition newNamespaceDefinition(IASTName name);
/**
* @since 6.0
*/
public ICPPASTNaryTypeIdExpression newNaryTypeIdExpression(ICPPASTNaryTypeIdExpression.Operator operator,
ICPPASTTypeId[] operands);
/**
* @since 5.2
*/
public ICPPASTNewExpression newNewExpression(IASTInitializerClause[] placement, IASTInitializer initializer, IASTTypeId typeId);
public ICPPASTOperatorName newOperatorName(char[] name);
/**
* Creates a new pack expansion expression for the given pattern.
* @since 5.2
*/
public ICPPASTPackExpansionExpression newPackExpansionExpression(IASTExpression pattern);
@Override
public ICPPASTParameterDeclaration newParameterDeclaration(IASTDeclSpecifier declSpec, IASTDeclarator declarator);
public ICPPASTPointerToMember newPointerToMember(IASTName name);
public IASTProblemTypeId newProblemTypeId(IASTProblem problem);
/**
* Creates a {@link ICPPASTQualifiedName}.
* @since 5.7
*/
public ICPPASTQualifiedName newQualifiedName(ICPPASTName name);
/**
* Creates an {@link ICPPASTQualifiedName} and adds name qualifiers for the
* elements of {@code nameQualifiers}. {@code nameQualifiers} cannot contain decltype specifiers
* for creation of {@link ICPPASTDecltypeSpecifier}.
* @since 5.11
*/
public ICPPASTQualifiedName newQualifiedName(String[] nameQualifiers, String name);
/**
* @since 5.9
*/
@Override
public ICPPASTName newName();
/**
* @since 5.9
*/
@Override
public ICPPASTName newName(char[] name);
/**
* @since 6.1
*/
@Override
public ICPPASTName newName(String name);
/**
* @since 5.11
*/
public ICPPASTNamedTypeSpecifier newNamedTypeSpecifier(IASTName name);
/**
* Creates a range based for statement.
* @since 5.3
*/
public ICPPASTRangeBasedForStatement newRangeBasedForStatement();
/**
* Creates an lvalue or rvalue reference operator.
* @since 5.2
*/
public ICPPASTReferenceOperator newReferenceOperator(boolean isRValueReference);
/**
* @since 5.2
*/
public IASTReturnStatement newReturnStatement(IASTInitializerClause retValue);
@Override
public ICPPASTSimpleDeclSpecifier newSimpleDeclSpecifier();
/**
* @since 5.2
*/
public ICPPASTSimpleTypeConstructorExpression newSimpleTypeConstructorExpression(ICPPASTDeclSpecifier declSpec, IASTInitializer initializer);
public ICPPASTSimpleTypeTemplateParameter newSimpleTypeTemplateParameter(int type, IASTName name, IASTTypeId typeId);
/**
* Creates a new static assertion declaration with the given condition and message.
* @since 5.2
*/
public ICPPASTStaticAssertDeclaration newStaticAssertion(IASTExpression condition, ICPPASTLiteralExpression message);
public ICPPASTSwitchStatement newSwitchStatement();
public ICPPASTSwitchStatement newSwitchStatement(IASTDeclaration controller, IASTStatement body);
@Override
public ICPPASTSwitchStatement newSwitchStatement(IASTExpression controlloer, IASTStatement body);
public ICPPASTTemplateDeclaration newTemplateDeclaration(IASTDeclaration declaration);
public ICPPASTTemplatedTypeTemplateParameter newTemplatedTypeTemplateParameter(IASTName name, IASTExpression defaultValue);
public ICPPASTTemplateId newTemplateId(IASTName templateName);
public ICPPASTTemplateSpecialization newTemplateSpecialization(IASTDeclaration declaration);
/**
* Creates a new translation unit that cooperates with the given scanner in order
* to track macro-expansions and location information.
* @scanner the preprocessor the translation unit interacts with.
* @since 5.2
*/
@Override
public ICPPASTTranslationUnit newTranslationUnit(IScanner scanner);
public ICPPASTTryBlockStatement newTryBlockStatement(IASTStatement body);
@Override
public ICPPASTNamedTypeSpecifier newTypedefNameSpecifier(IASTName name);
/**
* @since 5.2
*/
@Override
public ICPPASTTypeId newTypeId(IASTDeclSpecifier declSpecifier, IASTDeclarator declarator);
@Override
public ICPPASTTypeIdExpression newTypeIdExpression(int operator, IASTTypeId typeId);
/**
* @since 5.6
*/
public ICPPASTTypeTransformationSpecifier newTypeTransformationSpecifier(Operator kind, ICPPASTTypeId typeId);
@Override
public ICPPASTUnaryExpression newUnaryExpression(int operator, IASTExpression operand);
public ICPPASTUsingDeclaration newUsingDeclaration(IASTName name);
public ICPPASTUsingDirective newUsingDirective(IASTName name);
/**
* @since 5.7
*/
public ICPPASTVirtSpecifier newVirtSpecifier(ICPPASTVirtSpecifier.SpecifierKind kind);
public ICPPASTVisibilityLabel newVisibilityLabel(int visibility);
public ICPPASTWhileStatement newWhileStatement();
public ICPPASTWhileStatement newWhileStatement(IASTDeclaration condition, IASTStatement body);
@Override
public ICPPASTWhileStatement newWhileStatement(IASTExpression condition, IASTStatement body);
/**
* @deprecated Replaced by {@link #newConstructorChainInitializer(IASTName, IASTInitializer)}
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public ICPPASTConstructorChainInitializer newConstructorChainInitializer(IASTName memberInitializerId, IASTExpression initializerValue);
/**
* @deprecated Replaced by {@link #newConstructorInitializer(IASTInitializerClause[])}.
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public ICPPASTConstructorInitializer newConstructorInitializer(IASTExpression exp);
/**
* @deprecated Replaced by {@link #newBaseSpecifier(ICPPASTNameSpecifier, int, boolean)}
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public ICPPASTBaseSpecifier newBaseSpecifier(IASTName name, int visibility, boolean isVirtual);
/**
* @deprecated Replaced by {@link #newFunctionCallExpression(IASTExpression, IASTInitializerClause[])}.
* @noreference This method is not intended to be referenced by clients.
*/
@Override
@Deprecated
public ICPPASTFunctionCallExpression newFunctionCallExpression(IASTExpression idExpr, IASTExpression argList);
/**
* @deprecated Replaced by {@link #newNewExpression(IASTInitializerClause[], IASTInitializer, IASTTypeId)}
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public ICPPASTNewExpression newNewExpression(IASTExpression placement, IASTExpression initializer, IASTTypeId typeId);
/**
* @deprecated Replaced by {@link #newQualifiedName(ICPPASTName)}.
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public ICPPASTQualifiedName newQualifiedName();
/**
* @deprecated Replaced by {@link #newReferenceOperator(boolean)}.
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public ICPPASTReferenceOperator newReferenceOperator();
/**
* @deprecated Replaced by {@link #newSimpleTypeConstructorExpression(ICPPASTDeclSpecifier, IASTInitializer)}
* @noreference This method is not intended to be referenced by clients.
*/
@Deprecated
public ICPPASTTypenameExpression newTypenameExpression(IASTName qualifiedName, IASTExpression expr, boolean isTemplate);
/**
* @deprecated Use newAttributeList() instead.
* @noreference This method is not intended to be referenced by clients.
* @since 5.7
*/
@Deprecated
public ICPPASTAttributeSpecifier newAttributeSpecifier();
}