JavaParserFactory.java revision 99c0277ff34b0d97af1019ac91f20a19db364410
1683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti/* 2683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Copyright 2016 Federico Tomassetti 3683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * 4683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Licensed under the Apache License, Version 2.0 (the "License"); 5683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * you may not use this file except in compliance with the License. 6683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * You may obtain a copy of the License at 7683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * 8683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * http://www.apache.org/licenses/LICENSE-2.0 9683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * 10683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Unless required by applicable law or agreed to in writing, software 11683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * distributed under the License is distributed on an "AS IS" BASIS, 12683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * See the License for the specific language governing permissions and 14683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * limitations under the License. 15683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti */ 16683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti 179c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettipackage com.github.javaparser.symbolsolver.javaparsermodel; 18d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti 1949719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassettiimport com.github.javaparser.ast.CompilationUnit; 2049719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassettiimport com.github.javaparser.ast.Node; 21d787c16867577551b1711d01f382a26af1d7a322Federico Tomassettiimport com.github.javaparser.ast.body.*; 2249719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassettiimport com.github.javaparser.ast.expr.FieldAccessExpr; 2349719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassettiimport com.github.javaparser.ast.expr.LambdaExpr; 2449719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassettiimport com.github.javaparser.ast.expr.MethodCallExpr; 2549719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassettiimport com.github.javaparser.ast.expr.VariableDeclarationExpr; 26d787c16867577551b1711d01f382a26af1d7a322Federico Tomassettiimport com.github.javaparser.ast.stmt.*; 279c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.javaparsermodel.contexts.*; 289c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.javaparsermodel.declarators.FieldSymbolDeclarator; 299c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.javaparsermodel.declarators.VariableSymbolDeclarator; 309c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.resolution.SymbolDeclarator; 319c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.core.resolution.Context; 329c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.model.resolution.TypeSolver; 339c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.javaparsermodel.declarators.NoSymbolDeclarator; 349c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.javaparsermodel.declarators.ParameterSymbolDeclarator; 35d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti 3699c0277ff34b0d97af1019ac91f20a19db364410Federico Tomassettiimport static com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode; 373e4b012ca278ee33e9e02984367028cb1adf4bf5Federico Tomassetti 38d787c16867577551b1711d01f382a26af1d7a322Federico Tomassettipublic class JavaParserFactory { 39d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti 4049719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti public static Context getContext(Node node, TypeSolver typeSolver) { 41c1e95efcb4b0a373530aa107edb2164bf6c21ac7Federico Tomassetti if (node == null) { 42c1e95efcb4b0a373530aa107edb2164bf6c21ac7Federico Tomassetti return null; 43c1e95efcb4b0a373530aa107edb2164bf6c21ac7Federico Tomassetti } else if (node instanceof CompilationUnit) { 4449719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti return new CompilationUnitContext((CompilationUnit) node, typeSolver); 45bac18a129c45335e69d811b3872fcb938e1f0ff8Federico Tomassetti } else if (node instanceof ForeachStmt) { 4649719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti return new ForechStatementContext((ForeachStmt) node, typeSolver); 47bac18a129c45335e69d811b3872fcb938e1f0ff8Federico Tomassetti } else if (node instanceof ForStmt) { 4849719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti return new ForStatementContext((ForStmt) node, typeSolver); 4949719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti } else if (node instanceof LambdaExpr) { 500e81f51c40996b42cb262dc2397126cee8f60965Federico Tomassetti return new LambdaExprContext((LambdaExpr) node, typeSolver); 51d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti } else if (node instanceof MethodDeclaration) { 5249719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti return new MethodContext((MethodDeclaration) node, typeSolver); 53ee35b15a04539af508d29081ac5c7f8f6fadba4aFederico Tomassetti } else if (node instanceof ConstructorDeclaration) { 5449719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti return new ConstructorContext((ConstructorDeclaration) node, typeSolver); 55d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti } else if (node instanceof ClassOrInterfaceDeclaration) { 5649719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti return new ClassOrInterfaceDeclarationContext((ClassOrInterfaceDeclaration) node, typeSolver); 572f49331fb22511346eea8800d27907de44409d5bFederico Tomassetti } else if (node instanceof MethodCallExpr) { 5849719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti return new MethodCallExprContext((MethodCallExpr) node, typeSolver); 59d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti } else if (node instanceof EnumDeclaration) { 6049719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti return new EnumDeclarationContext((EnumDeclaration) node, typeSolver); 6180f951258992f75441239c79e0f31eda7d47e107Federico Tomassetti } else if (node instanceof FieldAccessExpr) { 620e81f51c40996b42cb262dc2397126cee8f60965Federico Tomassetti return new FieldAccessContext((FieldAccessExpr) node, typeSolver); 63d0348de241a6cf6be9c51500870ee1fb26172101Federico Tomassetti } else if (node instanceof SwitchEntryStmt) { 640e81f51c40996b42cb262dc2397126cee8f60965Federico Tomassetti return new SwitchEntryContext((SwitchEntryStmt) node, typeSolver); 65bac18a129c45335e69d811b3872fcb938e1f0ff8Federico Tomassetti } else if (node instanceof Statement) { 660e81f51c40996b42cb262dc2397126cee8f60965Federico Tomassetti return new StatementContext((Statement) node, typeSolver); 67d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti } else { 683e4b012ca278ee33e9e02984367028cb1adf4bf5Federico Tomassetti return getContext(getParentNode(node), typeSolver); 69d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti } 70d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti } 71d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti 7249719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti public static SymbolDeclarator getSymbolDeclarator(Node node, TypeSolver typeSolver) { 73c8d91389efa6f0d989d1b7d1e1aebec9d04106e7Federico Tomassetti if (node instanceof FieldDeclaration) { 742f49331fb22511346eea8800d27907de44409d5bFederico Tomassetti return new FieldSymbolDeclarator((FieldDeclaration) node, typeSolver); 75b931fdff234a0313a34e920059c1f5135fdd5204Federico Tomassetti } else if (node instanceof Parameter) { 762f49331fb22511346eea8800d27907de44409d5bFederico Tomassetti return new ParameterSymbolDeclarator((Parameter) node, typeSolver); 7752ce3a035f37392b37e54c9c7d9b003356d77643Federico Tomassetti } else if (node instanceof ExpressionStmt) { 786c297529e31036058837adbaa57cee652d4cc918Federico Tomassetti ExpressionStmt expressionStmt = (ExpressionStmt) node; 7952ce3a035f37392b37e54c9c7d9b003356d77643Federico Tomassetti if (expressionStmt.getExpression() instanceof VariableDeclarationExpr) { 806c297529e31036058837adbaa57cee652d4cc918Federico Tomassetti return new VariableSymbolDeclarator((VariableDeclarationExpr) (expressionStmt.getExpression()), typeSolver); 8152ce3a035f37392b37e54c9c7d9b003356d77643Federico Tomassetti } else { 8289a5a11330d58030a4d21a46cf96ccbe7fd073cfselslack return new NoSymbolDeclarator(node, typeSolver); 8352ce3a035f37392b37e54c9c7d9b003356d77643Federico Tomassetti } 846c297529e31036058837adbaa57cee652d4cc918Federico Tomassetti } else if (node instanceof IfStmt) { 8589a5a11330d58030a4d21a46cf96ccbe7fd073cfselslack return new NoSymbolDeclarator(node, typeSolver); 86bac18a129c45335e69d811b3872fcb938e1f0ff8Federico Tomassetti } else if (node instanceof ForeachStmt) { 8749719b4acbe10e3714ceb4f7040acac34709f558Federico Tomassetti ForeachStmt foreachStmt = (ForeachStmt) node; 88bac18a129c45335e69d811b3872fcb938e1f0ff8Federico Tomassetti return new VariableSymbolDeclarator((VariableDeclarationExpr) (foreachStmt.getVariable()), typeSolver); 89c8d91389efa6f0d989d1b7d1e1aebec9d04106e7Federico Tomassetti } else { 9089a5a11330d58030a4d21a46cf96ccbe7fd073cfselslack return new NoSymbolDeclarator(node, typeSolver); 91c8d91389efa6f0d989d1b7d1e1aebec9d04106e7Federico Tomassetti } 92d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti } 93d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti 94d787c16867577551b1711d01f382a26af1d7a322Federico Tomassetti} 95