diff options
author | dhardtke <accounts@pcprofil.de> | 2018-02-02 15:17:19 +0100 |
---|---|---|
committer | dhardtke <accounts@pcprofil.de> | 2018-02-02 15:17:19 +0100 |
commit | d480a861f333d971a5c3c6ed89c3c347cadd6cd0 (patch) | |
tree | 0286c41a2f984965bdfd6900bed61d7d03c8191a /javaparser-symbol-solver-testing | |
parent | fc0a1b721f63bd05ff54cfbb68488b32a6023ae2 (diff) | |
download | javaparser-d480a861f333d971a5c3c6ed89c3c347cadd6cd0.tar.gz |
Add test for #1364
Diffstat (limited to 'javaparser-symbol-solver-testing')
-rw-r--r-- | javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue1364.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue1364.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue1364.java new file mode 100644 index 000000000..e2bbade0c --- /dev/null +++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue1364.java @@ -0,0 +1,91 @@ +package com.github.javaparser.symbolsolver; + +import com.github.javaparser.JavaParser; +import com.github.javaparser.ParseResult; +import com.github.javaparser.ParseStart; +import com.github.javaparser.ParserConfiguration; +import com.github.javaparser.Providers; +import com.github.javaparser.ast.CompilationUnit; +import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; +import com.github.javaparser.ast.expr.MethodCallExpr; +import com.github.javaparser.ast.expr.SimpleName; +import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration; +import com.github.javaparser.symbolsolver.javaparsermodel.UnsolvedSymbolException; +import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration; +import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; +import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; +import com.github.javaparser.symbolsolver.resolution.AbstractResolutionTest; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * @author Dominik Hardtke + * @since 02.02.2018 + */ +public class Issue1364 extends AbstractResolutionTest { + private JavaParser javaParser; + + @Before + public void setup() { + ClassOrInterfaceDeclaration fakeObject = new ClassOrInterfaceDeclaration(); + fakeObject.setName(new SimpleName("java.lang.Object")); + + TypeSolver typeSolver = new TypeSolver() { + @Override + public TypeSolver getParent() { + return null; + } + + @Override + public void setParent(TypeSolver parent) { + } + + @Override + public SymbolReference<ResolvedReferenceTypeDeclaration> tryToSolveType(String name) { + if ("java.lang.Object".equals(name)) { + // custom handling + return SymbolReference.solved(new JavaParserClassDeclaration(fakeObject, this)); + } + + return SymbolReference.unsolved(ResolvedReferenceTypeDeclaration.class); + } + }; + + ParserConfiguration config = new ParserConfiguration(); + config.setSymbolResolver(new JavaSymbolSolver(typeSolver)); + javaParser = new JavaParser(config); + } + + @Test(timeout = 1000) + public void resolveSubClassOfObject() { + String code = String.join(System.lineSeparator(), + "package graph;", + "public class Vertex {", + " public static void main(String[] args) {", + " System.out.println();", + " }", + "}" + ); + + ParseResult<CompilationUnit> parseResult = javaParser.parse(ParseStart.COMPILATION_UNIT, Providers.provider(code)); + assertTrue(parseResult.isSuccessful()); + assertTrue(parseResult.getResult().isPresent()); + + List<MethodCallExpr> methodCallExprs = parseResult.getResult().get().findAll(MethodCallExpr.class); + assertEquals(1, methodCallExprs.size()); + + try { + methodCallExprs.get(0).calculateResolvedType(); + fail("An UnsolvedSymbolException should be thrown"); + } catch (UnsolvedSymbolException ignored) { + // all is fine if an UnsolvedSymbolException is thrown + } + } +} + |