@Test public void solveExistingGenericType() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypeVariables"); Context context = new CompilationUnitContext(cu, typeSolver); Optional<ResolvedType> a = context.solveGenericType("A", new MemoryTypeSolver()); Optional<ResolvedType> b = context.solveGenericType("B", new MemoryTypeSolver()); Optional<ResolvedType> c = context.solveGenericType("C", new MemoryTypeSolver()); assertEquals(false, a.isPresent()); assertEquals(false, b.isPresent()); assertEquals(false, c.isPresent()); }
@Test public void solveTypeInSamePackage() throws ParseException { CompilationUnit cu = parseSample("CompilationUnitWithImports"); Context context = new CompilationUnitContext(cu, typeSolver); ResolvedReferenceTypeDeclaration otherClass = EasyMock.createMock(ResolvedReferenceTypeDeclaration.class); EasyMock.expect(otherClass.getQualifiedName()).andReturn("com.foo.OtherClassInSamePackage"); MemoryTypeSolver memoryTypeSolver = new MemoryTypeSolver(); memoryTypeSolver.addDeclaration("com.foo.OtherClassInSamePackage", otherClass); EasyMock.replay(otherClass); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("OtherClassInSamePackage", memoryTypeSolver); assertEquals(true, ref.isSolved()); assertEquals("com.foo.OtherClassInSamePackage", ref.getCorrespondingDeclaration().getQualifiedName()); }
@Test public void solveUnexistingGenericType() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypeVariables"); Context context = new CompilationUnitContext(cu, typeSolver); Optional<ResolvedType> d = context.solveGenericType("D", new MemoryTypeSolver()); assertEquals(false, d.isPresent()); }
@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 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(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 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 aClassInDefaultPackageCanBeAccessedFromTheDefaultPackage() { String code = "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 public void solveExistingGenericType() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypeVariables"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<ResolvedType> a = context.solveGenericType("A", new MemoryTypeSolver()); Optional<ResolvedType> b = context.solveGenericType("B", new MemoryTypeSolver()); Optional<ResolvedType> c = context.solveGenericType("C", new MemoryTypeSolver()); assertEquals(true, a.isPresent()); assertEquals("A", a.get().describe()); assertEquals(true, a.get().isTypeVariable()); assertEquals(true, b.isPresent()); assertEquals("B", b.get().describe()); assertEquals(true, b.get().isTypeVariable()); assertEquals(true, c.isPresent()); assertEquals("C", c.get().describe()); assertEquals(true, c.get().isTypeVariable()); }
@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 solveSymbolAsValueReferringToDeclaredStaticField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); Optional<Value> ref = context.solveSymbolAsValue("j", new MemoryTypeSolver()); assertEquals(true, ref.isPresent()); assertEquals("long", 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()); }