From 4067732ffafca0dd8edde7b51104a2f432c586bf Mon Sep 17 00:00:00 2001 From: Federico Tomassetti Date: Sun, 16 Oct 2016 18:27:22 +0200 Subject: [PATCH] remove TypeDeclaration.solveSymbol --- .../ClassOrInterfaceDeclarationContext.java | 3 +- .../contexts/CompilationUnitContext.java | 7 +- .../contexts/FieldAccessContext.java | 3 +- .../JavaParserClassDeclaration.java | 6 +- .../JavaParserEnumDeclaration.java | 5 -- .../JavaParserInterfaceDeclaration.java | 5 -- .../declarations/JavaParserTypeParameter.java | 12 +--- .../JavaParserTypeVariableDeclaration.java | 5 -- .../JavassistClassDeclaration.java | 2 +- .../JavassistInterfaceDeclaration.java | 5 -- .../ReflectionClassDeclaration.java | 2 +- .../ReflectionInterfaceDeclaration.java | 2 +- .../symbolsolver/resolution/SymbolSolver.java | 44 ++++++++++-- .../JavaParserClassDeclarationTest.java | 33 --------- .../resolution/SymbolSolverTest.java | 72 +++++++++++++++++++ .../model/declarations/TypeDeclaration.java | 10 --- 16 files changed, 127 insertions(+), 89 deletions(-) create mode 100644 java-symbol-solver-core/src/test/java/me/tomassetti/symbolsolver/resolution/SymbolSolverTest.java diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/ClassOrInterfaceDeclarationContext.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/ClassOrInterfaceDeclarationContext.java index a59e9305fb..b25ebeba1a 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/ClassOrInterfaceDeclarationContext.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/ClassOrInterfaceDeclarationContext.java @@ -22,6 +22,7 @@ import me.tomassetti.symbolsolver.model.usages.typesystem.TypeParameter; import me.tomassetti.symbolsolver.resolution.MethodResolutionLogic; import me.tomassetti.symbolsolver.resolution.SymbolDeclarator; +import me.tomassetti.symbolsolver.resolution.SymbolSolver; import java.util.ArrayList; import java.util.List; @@ -53,7 +54,7 @@ public SymbolReference solveSymbol(String name, Type // then among inherited fields for (ReferenceType ancestor : getDeclaration().getAncestors()) { - SymbolReference ref = ancestor.getTypeDeclaration().solveSymbol(name, typeSolver); + SymbolReference ref = new SymbolSolver(typeSolver).solveSymbolInType(ancestor.getTypeDeclaration(), name); if (ref.isSolved() && ref.getCorrespondingDeclaration().asField().accessLevel() != AccessLevel.PRIVATE) { return ref; } diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/CompilationUnitContext.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/CompilationUnitContext.java index ead5d5bc21..49339c0b01 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/CompilationUnitContext.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/CompilationUnitContext.java @@ -13,6 +13,7 @@ import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration; import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserInterfaceDeclaration; import me.tomassetti.symbolsolver.resolution.MethodResolutionLogic; +import me.tomassetti.symbolsolver.resolution.SymbolSolver; import java.util.List; @@ -37,7 +38,7 @@ public SymbolReference solveSymbol(String name, Type String memberName = getMember(itName); SymbolReference type = this.solveType(typeName, typeSolver); if (type.isSolved()) { - return type.getCorrespondingDeclaration().solveSymbol(memberName, typeSolver); + return new SymbolSolver(typeSolver).solveSymbolInType(type.getCorrespondingDeclaration(), memberName); } else { itName = typeName; } @@ -51,7 +52,7 @@ public SymbolReference solveSymbol(String name, Type if (importDecl.getName() instanceof QualifiedNameExpr) { String qName = importDecl.getName().toString(); me.tomassetti.symbolsolver.model.declarations.TypeDeclaration importedType = typeSolver.solveType(qName); - SymbolReference ref = importedType.solveSymbol(name, typeSolver); + SymbolReference ref = new SymbolSolver(typeSolver).solveSymbolInType(importedType, name); if (ref.isSolved()) { return ref; } @@ -67,7 +68,7 @@ public SymbolReference solveSymbol(String name, Type if (memberName.equals(name)) { me.tomassetti.symbolsolver.model.declarations.TypeDeclaration importedType = typeSolver.solveType(typeName); - return importedType.solveSymbol(memberName, typeSolver); + return new SymbolSolver(typeSolver).solveSymbolInType(importedType, memberName); } } else { throw new UnsupportedOperationException("C"); diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/FieldAccessContext.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/FieldAccessContext.java index f672a005ad..a8ce8e8433 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/FieldAccessContext.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/contexts/FieldAccessContext.java @@ -13,6 +13,7 @@ import me.tomassetti.symbolsolver.model.usages.typesystem.Type; import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade; import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFactory; +import me.tomassetti.symbolsolver.resolution.SymbolSolver; import java.util.List; import java.util.Optional; @@ -30,7 +31,7 @@ public SymbolReference solveSymbol(String name, Type if (wrappedNode.getFieldExpr().toString().equals(name)) { if (wrappedNode.getScope() instanceof ThisExpr) { Type typeOfThis = JavaParserFacade.get(typeSolver).getTypeOfThisIn(wrappedNode); - return typeOfThis.asReferenceType().getTypeDeclaration().solveSymbol(name, typeSolver); + return new SymbolSolver(typeSolver).solveSymbolInType(typeOfThis.asReferenceType().getTypeDeclaration(), name); } } return JavaParserFactory.getContext(wrappedNode.getParentNode(), typeSolver).solveSymbol(name, typeSolver); diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclaration.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclaration.java index 8fe4262d13..44f53bc42b 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclaration.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclaration.java @@ -318,11 +318,7 @@ public boolean hasField(String name) { } } - @Override - public SymbolReference solveSymbol(String name, TypeSolver typeSolver) { - return getContext().solveSymbol(name, typeSolver); - } - + @Deprecated @Override public SymbolReference solveType(String name, TypeSolver typeSolver) { if (this.wrappedNode.getName().equals(name)) { diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java index 8f3852dc2b..43335adc80 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java @@ -279,11 +279,6 @@ public List getAllFields() { return fields; } - @Override - public SymbolReference solveSymbol(String substring, TypeSolver typeSolver) { - return getContext().solveSymbol(substring, typeSolver); - } - @Override public SymbolReference solveType(String substring, TypeSolver typeSolver) { throw new UnsupportedOperationException(); diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserInterfaceDeclaration.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserInterfaceDeclaration.java index 29b9b7c68f..7c25190fd6 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserInterfaceDeclaration.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserInterfaceDeclaration.java @@ -254,11 +254,6 @@ public boolean hasField(String name) { throw new UnsupportedOperationException("Derived fields"); } - @Override - public SymbolReference solveSymbol(String substring, TypeSolver typeSolver) { - return getContext().solveSymbol(substring, typeSolver); - } - @Override public SymbolReference solveType(String name, TypeSolver typeSolver) { if (this.wrappedNode.getName().equals(name)) { diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserTypeParameter.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserTypeParameter.java index 227ded6370..e507208461 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserTypeParameter.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserTypeParameter.java @@ -3,19 +3,18 @@ import com.github.javaparser.ast.Node; import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; import com.github.javaparser.ast.type.ClassOrInterfaceType; +import me.tomassetti.symbolsolver.core.resolution.Context; +import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade; import me.tomassetti.symbolsolver.logic.AbstractTypeDeclaration; import me.tomassetti.symbolsolver.model.declarations.FieldDeclaration; import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration; import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration; -import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration; -import me.tomassetti.symbolsolver.core.resolution.Context; -import me.tomassetti.symbolsolver.model.resolution.SymbolReference; import me.tomassetti.symbolsolver.model.declarations.TypeParameterDeclaration; +import me.tomassetti.symbolsolver.model.resolution.SymbolReference; import me.tomassetti.symbolsolver.model.resolution.TypeSolver; import me.tomassetti.symbolsolver.model.usages.typesystem.ReferenceType; import me.tomassetti.symbolsolver.model.usages.typesystem.ReferenceTypeImpl; import me.tomassetti.symbolsolver.model.usages.typesystem.Type; -import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade; import java.util.ArrayList; import java.util.Collections; @@ -136,11 +135,6 @@ public List getAllFields() { return new ArrayList<>(); } - @Override - public SymbolReference solveSymbol(String substring, TypeSolver typeSolver) { - throw new UnsupportedOperationException(); - } - @Override public SymbolReference solveType(String substring, TypeSolver typeSolver) { throw new UnsupportedOperationException(); diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserTypeVariableDeclaration.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserTypeVariableDeclaration.java index adb0d3c3c1..437c028d61 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserTypeVariableDeclaration.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserTypeVariableDeclaration.java @@ -88,11 +88,6 @@ public boolean hasField(String name) { public List getAllFields() { return new ArrayList<>(); } - - @Override - public SymbolReference solveSymbol(String substring, TypeSolver typeSolver) { - return SymbolReference.unsolved(ValueDeclaration.class); - } @Override public SymbolReference solveType(String substring, TypeSolver typeSolver) { diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javassistmodel/JavassistClassDeclaration.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javassistmodel/JavassistClassDeclaration.java index be82017a78..9a8228ed22 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javassistmodel/JavassistClassDeclaration.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javassistmodel/JavassistClassDeclaration.java @@ -173,7 +173,7 @@ public Optional solveMethodAsUsage(String name, List paramete return Optional.empty(); } - @Override + @Deprecated public SymbolReference solveSymbol(String name, TypeSolver typeSolver) { for (CtField field : ctClass.getDeclaredFields()) { if (field.getName().equals(name)) { diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javassistmodel/JavassistInterfaceDeclaration.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javassistmodel/JavassistInterfaceDeclaration.java index 7f3214ea90..5ade905e21 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javassistmodel/JavassistInterfaceDeclaration.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/javassistmodel/JavassistInterfaceDeclaration.java @@ -206,11 +206,6 @@ public boolean isAssignableBy(TypeDeclaration other) { throw new UnsupportedOperationException(); } - @Override - public SymbolReference solveSymbol(String substring, TypeSolver typeSolver) { - throw new UnsupportedOperationException(); - } - @Override public SymbolReference solveType(String substring, TypeSolver typeSolver) { throw new UnsupportedOperationException(); diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/reflectionmodel/ReflectionClassDeclaration.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/reflectionmodel/ReflectionClassDeclaration.java index f65ff386b7..6295bfd6e9 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/reflectionmodel/ReflectionClassDeclaration.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/reflectionmodel/ReflectionClassDeclaration.java @@ -254,7 +254,7 @@ public List getAllFields() { return fields; } - @Override + @Deprecated public SymbolReference solveSymbol(String name, TypeSolver typeSolver) { for (Field field : clazz.getFields()) { if (field.getName().equals(name)) { diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/reflectionmodel/ReflectionInterfaceDeclaration.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/reflectionmodel/ReflectionInterfaceDeclaration.java index c0f07ab8c4..245190288a 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/reflectionmodel/ReflectionInterfaceDeclaration.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/reflectionmodel/ReflectionInterfaceDeclaration.java @@ -228,7 +228,7 @@ public boolean canBeAssignedTo(TypeDeclaration other, TypeSolver typeSolver) { return false; }*/ - @Override + @Deprecated public SymbolReference solveSymbol(String name, TypeSolver typeSolver) { for (Field field : clazz.getFields()) { if (field.getName().equals(name)) { diff --git a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/resolution/SymbolSolver.java b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/resolution/SymbolSolver.java index 1b5ca63630..5eae53d2c7 100644 --- a/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/resolution/SymbolSolver.java +++ b/java-symbol-solver-core/src/main/java/me/tomassetti/symbolsolver/resolution/SymbolSolver.java @@ -3,18 +3,24 @@ import com.github.javaparser.ast.Node; import com.github.javaparser.ast.type.ClassOrInterfaceType; import com.github.javaparser.ast.type.ReferenceType; +import me.tomassetti.symbolsolver.core.resolution.Context; +import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFactory; +import me.tomassetti.symbolsolver.javaparsermodel.UnsolvedSymbolException; +import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration; +import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration; +import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserInterfaceDeclaration; +import me.tomassetti.symbolsolver.javassistmodel.JavassistClassDeclaration; import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration; import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration; import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration; -import me.tomassetti.symbolsolver.model.usages.MethodUsage; -import me.tomassetti.symbolsolver.core.resolution.Context; import me.tomassetti.symbolsolver.model.resolution.SymbolReference; import me.tomassetti.symbolsolver.model.resolution.TypeSolver; import me.tomassetti.symbolsolver.model.resolution.Value; +import me.tomassetti.symbolsolver.model.usages.MethodUsage; import me.tomassetti.symbolsolver.model.usages.typesystem.ReferenceTypeImpl; import me.tomassetti.symbolsolver.model.usages.typesystem.Type; -import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFactory; -import me.tomassetti.symbolsolver.javaparsermodel.UnsolvedSymbolException; +import me.tomassetti.symbolsolver.reflectionmodel.ReflectionClassDeclaration; +import me.tomassetti.symbolsolver.reflectionmodel.ReflectionInterfaceDeclaration; import java.util.List; import java.util.Optional; @@ -108,4 +114,34 @@ public Type solveTypeUsage(String name, Context context) { ReferenceTypeImpl typeUsage = new ReferenceTypeImpl(typeDeclaration, typeSolver); return typeUsage; } + + /** + * Solve any possible visible symbols including: fields, internal types, type variables, the type itself or its containers. + * + * It should contain its own private fields but not inherited private fields. + */ + public SymbolReference solveSymbolInType(TypeDeclaration typeDeclaration, String name) { + if (typeDeclaration instanceof JavaParserClassDeclaration) { + Context ctx = ((JavaParserClassDeclaration)typeDeclaration).getContext(); + return ctx.solveSymbol(name, typeSolver); + } + if (typeDeclaration instanceof JavaParserInterfaceDeclaration) { + Context ctx = ((JavaParserInterfaceDeclaration)typeDeclaration).getContext(); + return ctx.solveSymbol(name, typeSolver); + } + if (typeDeclaration instanceof JavaParserEnumDeclaration) { + Context ctx = ((JavaParserEnumDeclaration)typeDeclaration).getContext(); + return ctx.solveSymbol(name, typeSolver); + } + if (typeDeclaration instanceof ReflectionClassDeclaration) { + return ((ReflectionClassDeclaration)typeDeclaration).solveSymbol(name, typeSolver); + } + if (typeDeclaration instanceof ReflectionInterfaceDeclaration) { + return ((ReflectionInterfaceDeclaration)typeDeclaration).solveSymbol(name, typeSolver); + } + if (typeDeclaration instanceof JavassistClassDeclaration) { + return ((JavassistClassDeclaration)typeDeclaration).solveSymbol(name, typeSolver); + } + return SymbolReference.unsolved(ValueDeclaration.class); + } } diff --git a/java-symbol-solver-core/src/test/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclarationTest.java b/java-symbol-solver-core/src/test/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclarationTest.java index 19e99c4320..d7d08a497b 100644 --- a/java-symbol-solver-core/src/test/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclarationTest.java +++ b/java-symbol-solver-core/src/test/java/me/tomassetti/symbolsolver/javaparsermodel/declarations/JavaParserClassDeclarationTest.java @@ -748,39 +748,6 @@ public void testSolveMethodNotExistingBecauseOfTypeParameters() { assertEquals(false, res.isSolved()); } - @Test - public void testSolveSymbolUnexisting() { - JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); - - SymbolReference res = constructorDeclaration.solveSymbol("unexisting", typeSolver); - assertEquals(false, res.isSolved()); - } - - @Test - public void testSolveSymbolToDeclaredField() { - JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); - - SymbolReference res = constructorDeclaration.solveSymbol("name", typeSolver); - assertEquals(true, res.isSolved()); - assertEquals(true, res.getCorrespondingDeclaration().isField()); - } - - @Test - public void testSolveSymbolToInheritedPublicField() { - JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); - - SymbolReference res = constructorDeclaration.solveSymbol("NODE_BY_BEGIN_POSITION", typeSolver); - assertEquals(true, res.isSolved()); - assertEquals(true, res.getCorrespondingDeclaration().isField()); - } - - @Test - public void testSolveSymbolToInheritedPrivateField() { - JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); - - SymbolReference res = constructorDeclaration.solveSymbol("parentNode", typeSolver); - assertEquals(false, res.isSolved()); - } /// /// Assignability diff --git a/java-symbol-solver-core/src/test/java/me/tomassetti/symbolsolver/resolution/SymbolSolverTest.java b/java-symbol-solver-core/src/test/java/me/tomassetti/symbolsolver/resolution/SymbolSolverTest.java new file mode 100644 index 0000000000..5c8b5f502e --- /dev/null +++ b/java-symbol-solver-core/src/test/java/me/tomassetti/symbolsolver/resolution/SymbolSolverTest.java @@ -0,0 +1,72 @@ +package me.tomassetti.symbolsolver.resolution; + +import me.tomassetti.symbolsolver.AbstractTest; +import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration; +import me.tomassetti.symbolsolver.model.declarations.ValueDeclaration; +import me.tomassetti.symbolsolver.model.resolution.SymbolReference; +import me.tomassetti.symbolsolver.model.resolution.TypeSolver; +import me.tomassetti.symbolsolver.resolution.typesolvers.CombinedTypeSolver; +import me.tomassetti.symbolsolver.resolution.typesolvers.JavaParserTypeSolver; +import me.tomassetti.symbolsolver.resolution.typesolvers.JreTypeSolver; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; + +import static org.junit.Assert.assertEquals; + +/** + * @author Federico Tomassetti + */ +public class SymbolSolverTest extends AbstractTest { + + private TypeSolver typeSolverNewCode; + private SymbolSolver symbolSolver; + + @Before + public void setup() { + + File srcNewCode = adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-core")); + CombinedTypeSolver combinedTypeSolverNewCode = new CombinedTypeSolver(); + combinedTypeSolverNewCode.add(new JreTypeSolver()); + combinedTypeSolverNewCode.add(new JavaParserTypeSolver(srcNewCode)); + combinedTypeSolverNewCode.add(new JavaParserTypeSolver(adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-generated-sources")))); + typeSolverNewCode = combinedTypeSolverNewCode; + + symbolSolver = new SymbolSolver(typeSolverNewCode); + } + + @Test + public void testSolveSymbolUnexisting() { + JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); + + SymbolReference res = symbolSolver.solveSymbolInType(constructorDeclaration, "unexisting"); + assertEquals(false, res.isSolved()); + } + + @Test + public void testSolveSymbolToDeclaredField() { + JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); + + SymbolReference res = symbolSolver.solveSymbolInType(constructorDeclaration, "name"); + assertEquals(true, res.isSolved()); + assertEquals(true, res.getCorrespondingDeclaration().isField()); + } + + @Test + public void testSolveSymbolToInheritedPublicField() { + JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); + + SymbolReference res = symbolSolver.solveSymbolInType(constructorDeclaration, "NODE_BY_BEGIN_POSITION"); + assertEquals(true, res.isSolved()); + assertEquals(true, res.getCorrespondingDeclaration().isField()); + } + + @Test + public void testSolveSymbolToInheritedPrivateField() { + JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); + + SymbolReference res = symbolSolver.solveSymbolInType(constructorDeclaration, "parentNode"); + assertEquals(false, res.isSolved()); + } +} diff --git a/java-symbol-solver-model/src/main/java/me/tomassetti/symbolsolver/model/declarations/TypeDeclaration.java b/java-symbol-solver-model/src/main/java/me/tomassetti/symbolsolver/model/declarations/TypeDeclaration.java index 6ec84fff8c..5f6a0e2327 100644 --- a/java-symbol-solver-model/src/main/java/me/tomassetti/symbolsolver/model/declarations/TypeDeclaration.java +++ b/java-symbol-solver-model/src/main/java/me/tomassetti/symbolsolver/model/declarations/TypeDeclaration.java @@ -143,16 +143,6 @@ default List getDeclaredFields() { /// Resolution /// - /** - * Solve any possible visible symbols including: fields, internal types, type variables, the type itself or its containers. - * - * It should contain its own private fields but not inherited private fields. - * - * Deprecated because resolution logic should be outside declarations. - */ - @Deprecated - SymbolReference solveSymbol(String name, TypeSolver typeSolver); - /** * Try to solve a symbol just in the declaration, it does not delegate to the container. *