public AarTypeSolver(File aarFile) throws IOException { this.aarFile = aarFile; JarFile jarFile = new JarFile(aarFile); ZipEntry classesJarEntry = jarFile.getEntry("classes.jar"); if (classesJarEntry == null) { throw new IllegalArgumentException(String.format("The given file (%s) is malformed: entry classes.jar was not found", aarFile.getAbsolutePath())); } delegate = new JarTypeSolver(jarFile.getInputStream(classesJarEntry)); }
public static JarTypeSolver getJarTypeSolver(String pathToJar) throws IOException { if (instance == null) { instance = new JarTypeSolver(pathToJar); } else { instance.addPathToJar(pathToJar); } return instance; }
public static JarTypeSolver getJarTypeSolver(String pathToJar) throws IOException { if (instance == null) { instance = new JarTypeSolver(pathToJar); } else { instance.addPathToJar(pathToJar); } return instance; }
@Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (javaMatcher.matches(file)) { if (current_root == null || !file.startsWith(current_root)) { current_root = getRoot(file).orElse(null); } } else if (jarMatcher.matches(file)) { typeSolver.add(new JarTypeSolver(file.toString())); } return CONTINUE; }
@Before public void setup() throws IOException { String pathToJar = adaptPath("src/test/resources/issue257/issue257.jar"); File jar = new File(pathToJar); typeSolver = new CombinedTypeSolver(new JarTypeSolver(jar.getAbsolutePath()), new ReflectionTypeSolver()); }
@Before public void setup() throws IOException { String pathToJar = adaptPath("src/test/resources/javaparser-core-3.0.0-alpha.2.jar"); typeSolver = new CombinedTypeSolver(new JarTypeSolver(pathToJar), new ReflectionTypeSolver()); }
@Before public void setup() throws IOException { final String pathToMainJar = adaptPath("src/test/resources/javassist_symbols/main_jar/main_jar.jar"); final String pathToIncludedJar = adaptPath("src/test/resources/javassist_symbols/included_jar/included_jar.jar"); typeSolver = new CombinedTypeSolver(new JarTypeSolver(pathToIncludedJar), new JarTypeSolver(pathToMainJar), new ReflectionTypeSolver()); symbolSolver = new SymbolSolver(typeSolver); interfaceDeclarationStandalone = (JavassistInterfaceDeclaration) typeSolver.solveType("com.github.javaparser.javasymbolsolver.javassist_symbols.main_jar.StandaloneInterface"); interfaceDeclarationSubInterfaceOwnJar = (JavassistInterfaceDeclaration) typeSolver.solveType("com.github.javaparser.javasymbolsolver.javassist_symbols.main_jar.SubInterfaceOwnJar"); interfaceDeclarationSubInterfaceIncludedJar = (JavassistInterfaceDeclaration) typeSolver.solveType("com.github.javaparser.javasymbolsolver.javassist_symbols.main_jar.SubInterfaceIncludedJar"); interfaceDeclarationSubInterfaceExcludedJar = (JavassistInterfaceDeclaration) typeSolver.solveType("com.github.javaparser.javasymbolsolver.javassist_symbols.main_jar.SubInterfaceExcludedJar"); }
@Before public void setup() throws IOException { final String pathToMainJar = adaptPath("src/test/resources/javassist_symbols/main_jar/main_jar.jar"); final String pathToIncludedJar = adaptPath("src/test/resources/javassist_symbols/included_jar/included_jar.jar"); typeSolver = new CombinedTypeSolver(new JarTypeSolver(pathToIncludedJar), new JarTypeSolver(pathToMainJar), new ReflectionTypeSolver()); symbolSolver = new SymbolSolver(typeSolver); enumDeclarationConcrete = (JavassistEnumDeclaration) typeSolver.solveType("com.github.javaparser.javasymbolsolver.javassist_symbols.main_jar.ConcreteEnum"); enumDeclarationInterfaceUserOwnJar = (JavassistEnumDeclaration) typeSolver.solveType("com.github.javaparser.javasymbolsolver.javassist_symbols.main_jar.EnumInterfaceUserOwnJar"); enumDeclarationInterfaceUserIncludedJar = (JavassistEnumDeclaration) typeSolver.solveType("com.github.javaparser.javasymbolsolver.javassist_symbols.main_jar.EnumInterfaceUserIncludedJar"); enumDeclarationInterfaceUserExcludedJar = (JavassistEnumDeclaration) typeSolver.solveType("com.github.javaparser.javasymbolsolver.javassist_symbols.main_jar.EnumInterfaceUserExcludedJar"); }
@Test public void resolveReferenceToLambdaParam() throws ParseException, IOException { CompilationUnit cu = parseSample("Navigator"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Navigator"); MethodDeclaration method = Navigator.demandMethod(clazz, "findType"); MethodCallExpr callToGetName = Navigator.findMethodCall(method, "getName"); Expression referenceToT = callToGetName.getScope().get(); String pathToJar = adaptPath("src/test/resources/javaparser-core-2.1.0.jar"); TypeSolver typeSolver = new CombinedTypeSolver(new ReflectionTypeSolver(), new JarTypeSolver(pathToJar)); ResolvedType typeOfT = JavaParserFacade.get(typeSolver).getType(referenceToT); assertEquals("? super com.github.javaparser.ast.body.TypeDeclaration", typeOfT.describe()); }
@Test public void resolveTypeUsageOfMethodInGenericClass() throws ParseException, IOException { CompilationUnit cu = parseSample("Navigator"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Navigator"); MethodDeclaration method = Navigator.demandMethod(clazz, "findType"); MethodCallExpr callToStream = Navigator.findMethodCall(method, "stream"); String pathToJar = adaptPath("src/test/resources/javaparser-core-2.1.0.jar"); TypeSolver typeSolver = new CombinedTypeSolver(new ReflectionTypeSolver(), new JarTypeSolver(pathToJar)); MethodUsage filterUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToStream); assertEquals("java.util.stream.Stream<com.github.javaparser.ast.body.TypeDeclaration>", filterUsage.returnType().describe()); }
@Test public void solveSymbolAsValueReferringToStaticallyImportedValue() throws ParseException, IOException { CompilationUnit cu = parseSample("CompilationUnitSymbols"); Context context = new CompilationUnitContext(cu, typeSolver); CombinedTypeSolver typeSolver = new CombinedTypeSolver(); typeSolver.add(new ReflectionTypeSolver()); typeSolver.add(new JarTypeSolver(adaptPath("src/test/resources/junit-4.8.1.jar"))); Optional<Value> ref = context.solveSymbolAsValue("out", typeSolver); assertEquals(true, ref.isPresent()); assertEquals("java.io.PrintStream", ref.get().getType().describe()); }
@Test public void solveSymbolAsValueReferringToStaticallyImportedUsingAsteriskValue() throws ParseException, IOException { CompilationUnit cu = parseSample("CompilationUnitSymbols"); Context context = new CompilationUnitContext(cu, typeSolver); CombinedTypeSolver typeSolver = new CombinedTypeSolver(); typeSolver.add(new ReflectionTypeSolver()); typeSolver.add(new JarTypeSolver(adaptPath("src/test/resources/junit-4.8.1.jar"))); Optional<Value> ref = context.solveSymbolAsValue("err", typeSolver); assertEquals(true, ref.isPresent()); assertEquals("java.io.PrintStream", ref.get().getType().describe()); }
@Test public void resolveTypeUsageOfCascadeMethodInGenericClass() throws ParseException, IOException { CompilationUnit cu = parseSample("Navigator"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Navigator"); MethodDeclaration method = Navigator.demandMethod(clazz, "findType"); MethodCallExpr callToFilter = Navigator.findMethodCall(method, "filter"); String pathToJar = adaptPath("src/test/resources/javaparser-core-2.1.0.jar"); TypeSolver typeSolver = new CombinedTypeSolver(new ReflectionTypeSolver(), new JarTypeSolver(pathToJar)); MethodUsage filterUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToFilter); assertEquals("java.util.stream.Stream<com.github.javaparser.ast.body.TypeDeclaration>", filterUsage.returnType().describe()); }
@Test public void resolveLambdaType() throws ParseException, IOException { CompilationUnit cu = parseSample("Navigator"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Navigator"); MethodDeclaration method = Navigator.demandMethod(clazz, "findType"); MethodCallExpr callToFilter = Navigator.findMethodCall(method, "filter"); Expression lambdaExpr = callToFilter.getArguments().get(0); String pathToJar = adaptPath("src/test/resources/javaparser-core-2.1.0.jar"); TypeSolver typeSolver = new CombinedTypeSolver(new ReflectionTypeSolver(), new JarTypeSolver(pathToJar)); ResolvedType typeOfLambdaExpr = JavaParserFacade.get(typeSolver).getType(lambdaExpr); assertEquals("java.util.function.Predicate<? super com.github.javaparser.ast.body.TypeDeclaration>", typeOfLambdaExpr.describe()); }
@Test public void resolveReferenceToCallOnLambdaParam() throws ParseException, IOException { CompilationUnit cu = parseSample("Navigator"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Navigator"); MethodDeclaration method = Navigator.demandMethod(clazz, "findType"); MethodCallExpr callToGetName = Navigator.findMethodCall(method, "getName"); String pathToJar = adaptPath("src/test/resources/javaparser-core-2.1.0.jar"); TypeSolver typeSolver = new CombinedTypeSolver(new ReflectionTypeSolver(), new JarTypeSolver(pathToJar)); MethodUsage methodUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(callToGetName); assertEquals("getName", methodUsage.getName()); assertEquals("com.github.javaparser.ast.body.TypeDeclaration", methodUsage.declaringType().getQualifiedName()); }
@Test public void solveTypeNotImported() throws ParseException, IOException { CompilationUnit cu = parseSample("CompilationUnitWithImports"); Context context = new CompilationUnitContext(cu, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("org.junit.Assume", new JarTypeSolver(adaptPath("src/test/resources/junit-4.8.1.jar"))); assertEquals(true, ref.isSolved()); assertEquals("org.junit.Assume", ref.getCorrespondingDeclaration().getQualifiedName()); }
@Test public void solveTypeImported() throws ParseException, IOException { CompilationUnit cu = parseSample("CompilationUnitWithImports"); Context context = new CompilationUnitContext(cu, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("Assert", new JarTypeSolver(adaptPath("src/test/resources/junit-4.8.1.jar"))); assertEquals(true, ref.isSolved()); assertEquals("org.junit.Assert", ref.getCorrespondingDeclaration().getQualifiedName()); }
@Test public void solveSymbolReferringToStaticallyImportedUsingAsteriskValue() throws ParseException, IOException { CompilationUnit cu = parseSample("CompilationUnitSymbols"); Context context = new CompilationUnitContext(cu, typeSolver); CombinedTypeSolver typeSolver = new CombinedTypeSolver(); typeSolver.add(new ReflectionTypeSolver()); typeSolver.add(new JarTypeSolver(adaptPath("src/test/resources/junit-4.8.1.jar"))); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("err", typeSolver); assertEquals(true, ref.isSolved()); assertEquals("java.io.PrintStream", ref.getCorrespondingDeclaration().getType().asReferenceType().getQualifiedName()); }
@Test public void solveSymbolReferringToStaticallyImportedValue() throws ParseException, IOException { CompilationUnit cu = parseSample("CompilationUnitSymbols"); Context context = new CompilationUnitContext(cu, typeSolver); CombinedTypeSolver typeSolver = new CombinedTypeSolver(); typeSolver.add(new ReflectionTypeSolver()); typeSolver.add(new JarTypeSolver(adaptPath("src/test/resources/junit-4.8.1.jar"))); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("out", typeSolver); assertEquals(true, ref.isSolved()); assertEquals("java.io.PrintStream", ref.getCorrespondingDeclaration().getType().asReferenceType().getQualifiedName()); }
@Test public void initial() throws IOException { String pathToJar = adaptPath("src/test/resources/javaparser-core-2.1.0.jar"); JarTypeSolver jarTypeSolver = new JarTypeSolver(pathToJar); assertEquals(true, jarTypeSolver.tryToSolveType("com.github.javaparser.SourcesHelper").isSolved()); assertEquals(true, jarTypeSolver.tryToSolveType("com.github.javaparser.Token").isSolved()); assertEquals(true, jarTypeSolver.tryToSolveType("com.github.javaparser.ASTParser.JJCalls").isSolved()); assertEquals(false, jarTypeSolver.tryToSolveType("com.github.javaparser.ASTParser.Foo").isSolved()); assertEquals(false, jarTypeSolver.tryToSolveType("com.github.javaparser.Foo").isSolved()); assertEquals(false, jarTypeSolver.tryToSolveType("Foo").isSolved()); }