@Test public void solveSymbolAsValueReferringToUnknownElement() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("zzz", new MemoryTypeSolver()); assertEquals(false, ref.isPresent()); }
@Test public void solveMethodAsUsageOverrideCase() throws ParseException { CompilationUnit cu = parseSample("ClassWithMethods"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<MethodUsage> ref = context.solveMethodAsUsage("foo1", ImmutableList.of(), new ReflectionTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("A", ref.get().declaringType().getName()); assertEquals(0, ref.get().getNoParams()); }
@Test public void solveMethodAsUsageWithPrimitiveParameters() throws ParseException { CompilationUnit cu = parseSample("ClassWithMethods"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); ResolvedType intType = ResolvedPrimitiveType.INT; Optional<MethodUsage> ref = context.solveMethodAsUsage("foo3", ImmutableList.of(intType), new ReflectionTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("A", ref.get().declaringType().getName()); assertEquals(1, ref.get().getNoParams()); }
@Test public void solveUnexistingGenericType() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypeVariables"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<ResolvedType> d = context.solveGenericType("D", new MemoryTypeSolver()); assertEquals(false, d.isPresent()); }
@Test public void solveSymbolAsValueReferringToInterfaceInheritedInstanceField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); ClassOrInterfaceDeclarationContext context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("o", new MemoryTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("int", ref.get().getType().describe()); }
@Test public void solveSymbolAsValueReferringToInheritedInstanceField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("k", new MemoryTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("boolean", ref.get().getType().describe()); }
@Test public void solveSymbolAsValueReferringToDeclaredInstanceField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("i", new MemoryTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("int", ref.get().getType().describe()); }
@Test public void solveSymbolAsValueReferringToInheritedStaticField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("m", new MemoryTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("char", ref.get().getType().describe()); }
@Test public void solveMethodAsUsageWithMoreSpecializedParameter() throws ParseException { CompilationUnit cu = parseSample("ClassWithMethods"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); ResolvedType stringType = new ReferenceTypeImpl(new ReflectionClassDeclaration(String.class, typeSolver), typeSolver); Optional<MethodUsage> ref = context.solveMethodAsUsage("foo4", ImmutableList.of(stringType), new ReflectionTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("A", ref.get().declaringType().getName()); assertEquals(1, ref.get().getNoParams()); }
@Test public void solveTypeRefToItself() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypes"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("A", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); }
@Test public void solveTypeRefToJavaLangObject() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypes"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("java.lang.Object", new ReflectionTypeSolver()); assertEquals(true, ref.isSolved()); }
@Test public void solveTypeRefToInternalOfInternalClass() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypes"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("C", new MemoryTypeSolver()); assertEquals(false, ref.isSolved()); }
@Test public void solveTypeRefToUnexisting() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypes"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("Foo", new MemoryTypeSolver()); assertEquals(false, ref.isSolved()); }
@Test public void solveTypeRefToQualifiedInternalOfInternalClass() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypes"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("B.C", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); }
@Test public void solveTypeRefToAnotherClassInFile() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypes"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("Super", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); }
@Test public void solveMethodInheritedCase() throws ParseException { CompilationUnit cu = parseSample("ClassWithMethods"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedMethodDeclaration> ref = context.solveMethod("foo2", ImmutableList.of(), false, new ReflectionTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("Super", ref.getCorrespondingDeclaration().declaringType().getName()); assertEquals(0, ref.getCorrespondingDeclaration().getNumberOfParams()); }
@Test public void solveMethodWithPrimitiveParameters() throws ParseException { CompilationUnit cu = parseSample("ClassWithMethods"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); ResolvedType intType = ResolvedPrimitiveType.INT; SymbolReference<ResolvedMethodDeclaration> ref = context.solveMethod("foo3", ImmutableList.of(intType), false, new ReflectionTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("A", ref.getCorrespondingDeclaration().declaringType().getName()); assertEquals(1, ref.getCorrespondingDeclaration().getNumberOfParams()); }
@Test public void solveSymbolReferringToDeclaredStaticField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("j", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("long", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToInheritedStaticField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("m", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("char", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToDeclaredInstanceField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("i", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("int", ref.getCorrespondingDeclaration().getType().describe()); }