@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 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 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 solveSymbolAsValueReferringToDeclaredStaticField() throws ParseException { CompilationUnit cu = parseSample("AnEnum"); com.github.javaparser.ast.body.EnumDeclaration enumDeclaration = Navigator.demandEnum(cu, "MyEnum"); Context context = new EnumDeclarationContext(enumDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("j", new MemoryTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("long", ref.get().getType().describe()); }
@Test public void solveSymbolAsValueReferringToValue() throws ParseException { CompilationUnit cu = parseSample("AnEnum"); com.github.javaparser.ast.body.EnumDeclaration enumDeclaration = Navigator.demandEnum(cu, "MyEnum"); Context context = new EnumDeclarationContext(enumDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("E1", new MemoryTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("MyEnum", ref.get().getType().describe()); }
@Test public void solveSymbolAsValueReferringToDeclaredInstanceField() throws ParseException { CompilationUnit cu = parseSample("AnEnum"); com.github.javaparser.ast.body.EnumDeclaration enumDeclaration = Navigator.demandEnum(cu, "MyEnum"); Context context = new EnumDeclarationContext(enumDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("i", new MemoryTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("int", ref.get().getType().describe()); }
@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 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 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 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 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(expected = UnsolvedSymbolException.class) public void aClassInDefaultPackageCanBeAccessedFromOutsideTheDefaultPackageImportingIt() { String code = "package myPackage; import B; class A extends B {}"; MemoryTypeSolver memoryTypeSolver = new MemoryTypeSolver(); memoryTypeSolver.addDeclaration("B", new MyClassDeclaration("B")); ClassOrInterfaceType jpType = JavaParser.parse(code).getClassByName("A").get().getExtendedTypes(0); ResolvedType resolvedType = JavaParserFacade.get(memoryTypeSolver).convertToUsage(jpType); assertEquals("B", resolvedType.asReferenceType().getQualifiedName()); }
@Test(expected = UnsolvedSymbolException.class) public void aClassInDefaultPackageCanBeAccessedFromOutsideTheDefaultPackageWithoutImportingIt() { String code = "package myPackage; class A extends B {}"; MemoryTypeSolver memoryTypeSolver = new MemoryTypeSolver(); memoryTypeSolver.addDeclaration("B", new MyClassDeclaration("B")); ResolvedType resolvedType = JavaParserFacade.get(memoryTypeSolver).convertToUsage(JavaParser.parse(code).getClassByName("A").get().getExtendedTypes(0)); assertEquals("B", resolvedType.asReferenceType().getQualifiedName()); } }
@Test public void solveTypeRefToLocalClass() throws ParseException { CompilationUnit cu = parseSample("MethodWithTypes"); ClassOrInterfaceDeclaration cd = Navigator.demandClass(cu, "Main"); MethodDeclaration md = Navigator.demandMethod(cd, "methodWithLocalTypes"); Context context = new MethodContext(md, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("LocalClass", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); } }
@Test public void solveSymbolReferringToDeclaredInstanceField() throws ParseException { CompilationUnit cu = parseSample("AnEnum"); com.github.javaparser.ast.body.EnumDeclaration enumDeclaration = Navigator.demandEnum(cu, "MyEnum"); Context context = new EnumDeclarationContext(enumDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("i", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("int", 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()); }
@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()); }