diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/VariableResolutionTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/VariableResolutionTest.java new file mode 100644 index 0000000000..d7fa31a444 --- /dev/null +++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/resolution/VariableResolutionTest.java @@ -0,0 +1,44 @@ +package com.github.javaparser.symbolsolver.resolution; + +import com.github.javaparser.ast.CompilationUnit; +import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; +import com.github.javaparser.ast.body.MethodDeclaration; +import com.github.javaparser.ast.expr.MethodCallExpr; +import com.github.javaparser.resolution.MethodUsage; +import com.github.javaparser.symbolsolver.javaparser.Navigator; +import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; +import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class VariableResolutionTest extends AbstractResolutionTest { + + @Test + void variableResolutionNoBlockStmt() { + // Test without nested block statement + + CompilationUnit cu = parseSample("VariableResolutionInVariousScopes"); + ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "VariableResolutionInVariousScopes"); + + MethodDeclaration method = Navigator.demandMethod(clazz, "noBlock"); + MethodCallExpr callExpr = method.findFirst(MethodCallExpr.class).get(); + MethodUsage methodUsage = JavaParserFacade.get(new ReflectionTypeSolver()).solveMethodAsUsage(callExpr); + + assertTrue(methodUsage.declaringType().getQualifiedName().equals("java.lang.String")); + } + + @Test + void variableResolutionWithBlockStmt() { + // Test without nested block statement + + CompilationUnit cu = parseSample("VariableResolutionInVariousScopes"); + ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "VariableResolutionInVariousScopes"); + + MethodDeclaration method = Navigator.demandMethod(clazz, "withBlock"); + MethodCallExpr callExpr = method.findFirst(MethodCallExpr.class).get(); + MethodUsage methodUsage = JavaParserFacade.get(new ReflectionTypeSolver()).solveMethodAsUsage(callExpr); + + assertTrue(methodUsage.declaringType().getQualifiedName().equals("java.lang.String")); + } +} diff --git a/javaparser-symbol-solver-testing/src/test/resources/VariableResolutionInVariousScopes.java.txt b/javaparser-symbol-solver-testing/src/test/resources/VariableResolutionInVariousScopes.java.txt new file mode 100644 index 0000000000..a322f7d318 --- /dev/null +++ b/javaparser-symbol-solver-testing/src/test/resources/VariableResolutionInVariousScopes.java.txt @@ -0,0 +1,15 @@ +package testcase; + +public class VariableResolutionInVariousScopes { + public void withBlock() { + String s = ""; + { + s.length(); + } + } + + public void noBlock() { + String s = ""; + s.length(); + } +} \ No newline at end of file