/* * Copyright 2010 Pablo Arrighi, Alex Concha, Miguel Lezama for version 1. * Copyright 2013 Pablo Arrighi, Miguel Lezama, Kevin Mazet for version 2. * * This file is part of GOOL. * * GOOL is free software: you can redistribute it and/or modify it under the terms of the GNU * General Public License as published by the Free Software Foundation, version 3. * * GOOL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License version 3 for more details. * * You should have received a copy of the GNU General Public License along with GOOL, * in the file COPYING.txt. If not, see <http://www.gnu.org/licenses/>. */ package gool.recognizer.cpp.ast; import gool.recognizer.cpp.ast.declaration.ASTCppDeclaration; import gool.recognizer.cpp.ast.declaration.ASTCppFunctionDefinition; import gool.recognizer.cpp.ast.declaration.ASTCppSimpleDeclaration; import gool.recognizer.cpp.ast.declaration.ASTCppVisibilityLabel; import gool.recognizer.cpp.ast.declarator.ASTCppArrayDeclarator; import gool.recognizer.cpp.ast.declarator.ASTCppDeclarator; import gool.recognizer.cpp.ast.declarator.ASTCppFieldDeclarator; import gool.recognizer.cpp.ast.declarator.ASTCppFunctionDeclarator; import gool.recognizer.cpp.ast.declspecifier.ASTCppCompositeTypeSpecifier; import gool.recognizer.cpp.ast.declspecifier.ASTCppDeclSpecifier; import gool.recognizer.cpp.ast.declspecifier.ASTCppEnumerationSpecifier; import gool.recognizer.cpp.ast.declspecifier.ASTCppNamedTypeSpecifier; import gool.recognizer.cpp.ast.declspecifier.ASTCppSimpleDeclSpecifier; import gool.recognizer.cpp.ast.expression.ASTCppArraySubscriptExpression; import gool.recognizer.cpp.ast.expression.ASTCppBinaryExpression; import gool.recognizer.cpp.ast.expression.ASTCppCastExpression; import gool.recognizer.cpp.ast.expression.ASTCppConditionalExpression; import gool.recognizer.cpp.ast.expression.ASTCppExpression; import gool.recognizer.cpp.ast.expression.ASTCppExpressionList; import gool.recognizer.cpp.ast.expression.ASTCppFieldReference; import gool.recognizer.cpp.ast.expression.ASTCppFunctionCallExpression; import gool.recognizer.cpp.ast.expression.ASTCppIdExpression; import gool.recognizer.cpp.ast.expression.ASTCppLiteralExpression; import gool.recognizer.cpp.ast.expression.ASTCppUnaryExpression; import gool.recognizer.cpp.ast.initializer.ASTCppConstructorInitializer; import gool.recognizer.cpp.ast.initializer.ASTCppInitializer; import gool.recognizer.cpp.ast.initializer.ASTCppInitializerExpression; import gool.recognizer.cpp.ast.name.ASTCppName; import gool.recognizer.cpp.ast.other.ASTCppBaseSpecifier; import gool.recognizer.cpp.ast.other.ASTCppEnumerator; import gool.recognizer.cpp.ast.other.ASTCppIncludeStatement; import gool.recognizer.cpp.ast.other.ASTCppParameterDeclaration; import gool.recognizer.cpp.ast.other.ASTCppTranslationUnit; import gool.recognizer.cpp.ast.statement.ASTCppCatchHandler; import gool.recognizer.cpp.ast.statement.ASTCppCompoundStatement; import gool.recognizer.cpp.ast.statement.ASTCppDeclarationStatement; import gool.recognizer.cpp.ast.statement.ASTCppDefaultStatement; import gool.recognizer.cpp.ast.statement.ASTCppDoStatement; import gool.recognizer.cpp.ast.statement.ASTCppExpressionStatement; import gool.recognizer.cpp.ast.statement.ASTCppForStatement; import gool.recognizer.cpp.ast.statement.ASTCppIfStatement; import gool.recognizer.cpp.ast.statement.ASTCppReturnStatement; import gool.recognizer.cpp.ast.statement.ASTCppStatement; import gool.recognizer.cpp.ast.statement.ASTCppSwitchStatement; import gool.recognizer.cpp.ast.statement.ASTCppTryBlockStatement; import gool.recognizer.cpp.ast.statement.ASTCppWhileStatement; import gool.recognizer.cpp.visitor.IVisitorASTCpp; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; 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.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.IASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.IASTEqualsInitializer; 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.IASTIdExpression; import org.eclipse.cdt.core.dom.ast.IASTIfStatement; import org.eclipse.cdt.core.dom.ast.IASTInitializer; 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.IASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorIncludeStatement; 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; import org.eclipse.cdt.core.dom.ast.IASTSwitchStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; 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.ICPPASTConstructorInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisibilityLabel; /** * Represents a node of the C++ AST. */ public abstract class ASTCppNode { public abstract Object accept(IVisitorASTCpp visitor, Object data); public ASTCppNode(IASTNode node) { } public static ASTCppNode transforme(IASTNode node){ return mapNode(node); } /** * Transforms a C++ CDT node in a C++ node. * @param node * @return */ private static ASTCppNode mapNode(IASTNode node){ if(node instanceof IASTTranslationUnit) return new ASTCppTranslationUnit(node); if(node instanceof IASTPreprocessorIncludeStatement) return new ASTCppIncludeStatement(node); if(node instanceof IASTSimpleDeclaration) return new ASTCppSimpleDeclaration(node); if(node instanceof IASTFunctionDefinition) return new ASTCppFunctionDefinition(node); if(node instanceof ICPPASTVisibilityLabel) return new ASTCppVisibilityLabel(node); if(node instanceof IASTDeclaration) return new ASTCppDeclaration(node); if(node instanceof IASTCompositeTypeSpecifier) return new ASTCppCompositeTypeSpecifier(node); if(node instanceof IASTSimpleDeclSpecifier) return new ASTCppSimpleDeclSpecifier(node); if(node instanceof IASTNamedTypeSpecifier) return new ASTCppNamedTypeSpecifier(node); if(node instanceof IASTEnumerationSpecifier) return new ASTCppEnumerationSpecifier(node); if(node instanceof IASTDeclSpecifier) return new ASTCppDeclSpecifier(node); if(node instanceof IASTEnumerationSpecifier.IASTEnumerator) return new ASTCppEnumerator(node); if(node instanceof ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier) return new ASTCppBaseSpecifier(node); if(node instanceof IASTArrayDeclarator) return new ASTCppArrayDeclarator(node); if(node instanceof IASTFieldDeclarator) return new ASTCppFieldDeclarator(node); if(node instanceof IASTFunctionDeclarator) return new ASTCppFunctionDeclarator(node); if(node instanceof IASTDeclarator) return new ASTCppDeclarator(node); if(node instanceof IASTName) return new ASTCppName(node); if(node instanceof IASTCompoundStatement) return new ASTCppCompoundStatement(node); if(node instanceof IASTDeclarationStatement) return new ASTCppDeclarationStatement(node); if(node instanceof IASTDefaultStatement) return new ASTCppDefaultStatement(node); if(node instanceof IASTDoStatement) return new ASTCppDoStatement(node); if(node instanceof IASTExpressionStatement) return new ASTCppExpressionStatement(node); if(node instanceof IASTForStatement) return new ASTCppForStatement(node); if(node instanceof IASTIfStatement) return new ASTCppIfStatement(node); if(node instanceof IASTReturnStatement) return new ASTCppReturnStatement(node); if(node instanceof IASTWhileStatement) return new ASTCppWhileStatement(node); if(node instanceof IASTSwitchStatement) return new ASTCppSwitchStatement(node); if(node instanceof ICPPASTTryBlockStatement) return new ASTCppTryBlockStatement(node); if(node instanceof ICPPASTCatchHandler) return new ASTCppCatchHandler(node); if(node instanceof IASTStatement) return new ASTCppStatement(node); if(node instanceof IASTArraySubscriptExpression) return new ASTCppArraySubscriptExpression(node); if(node instanceof IASTBinaryExpression) return new ASTCppBinaryExpression(node); if(node instanceof IASTCastExpression) return new ASTCppCastExpression(node); if(node instanceof IASTConditionalExpression) return new ASTCppConditionalExpression(node); if(node instanceof IASTExpressionList) return new ASTCppExpressionList(node); if(node instanceof IASTFieldReference) return new ASTCppFieldReference(node); if(node instanceof IASTFunctionCallExpression) return new ASTCppFunctionCallExpression(node); if(node instanceof IASTIdExpression) return new ASTCppIdExpression(node); if(node instanceof IASTLiteralExpression) return new ASTCppLiteralExpression(node); if(node instanceof IASTUnaryExpression) return new ASTCppUnaryExpression(node); if(node instanceof IASTExpression) return new ASTCppExpression(node); if(node instanceof IASTEqualsInitializer) return new ASTCppInitializerExpression(node); if(node instanceof ICPPASTConstructorInitializer) return new ASTCppConstructorInitializer(node); if(node instanceof IASTInitializer) return new ASTCppInitializer(node); if(node instanceof IASTParameterDeclaration) return new ASTCppParameterDeclaration(node); return null ; } }