1 /* 2 * Copyright 2016 Federico Tomassetti 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.github.javaparser.symbolsolver.reflectionmodel; 18 19 import com.github.javaparser.resolution.declarations.ResolvedInterfaceDeclaration; 20 import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration; 21 import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration; 22 import com.github.javaparser.resolution.types.ResolvedReferenceType; 23 import com.github.javaparser.resolution.types.ResolvedTypeVariable; 24 import com.github.javaparser.symbolsolver.AbstractTest; 25 import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; 26 import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl; 27 import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver; 28 import com.google.common.collect.ImmutableList; 29 import org.junit.Test; 30 31 import java.util.Collection; 32 import java.util.HashMap; 33 import java.util.List; 34 import java.util.Map; 35 import java.util.stream.Collectors; 36 37 import static org.junit.Assert.assertEquals; 38 39 public class ReflectionInterfaceDeclarationTest extends AbstractTest { 40 41 @Test 42 public void testGetDeclaredMethods() { 43 TypeSolver typeResolver = new ReflectionTypeSolver(); 44 ResolvedReferenceTypeDeclaration list = new ReflectionInterfaceDeclaration(List.class, typeResolver); 45 List<ResolvedMethodDeclaration> methods = list.getDeclaredMethods().stream() 46 .sorted((a, b) -> a.getName().compareTo(b.getName())) 47 .collect(Collectors.toList()); 48 if (isJava9()) { 49 assertEquals(40, methods.size()); 50 assertEquals("clear", methods.get(4).getName()); 51 assertEquals(true, methods.get(4).isAbstract()); 52 assertEquals(0, methods.get(4).getNumberOfParams()); 53 assertEquals("contains", methods.get(5).getName()); 54 assertEquals(true, methods.get(5).isAbstract()); 55 assertEquals(1, methods.get(5).getNumberOfParams()); 56 assertEquals(true, methods.get(5).getParam(0).getType().isReferenceType()); 57 assertEquals(Object.class.getCanonicalName(), methods.get(5).getParam(0).getType().asReferenceType().getQualifiedName()); 58 } else { 59 assertEquals(28, methods.size()); 60 assertEquals("clear", methods.get(4).getName()); 61 assertEquals(true, methods.get(4).isAbstract()); 62 assertEquals(0, methods.get(4).getNumberOfParams()); 63 assertEquals("contains", methods.get(5).getName()); 64 assertEquals(true, methods.get(5).isAbstract()); 65 assertEquals(1, methods.get(5).getNumberOfParams()); 66 assertEquals(true, methods.get(5).getParam(0).getType().isReferenceType()); 67 assertEquals(Object.class.getCanonicalName(), methods.get(5).getParam(0).getType().asReferenceType().getQualifiedName()); 68 } 69 } 70 71 @Test 72 public void testAllAncestors() { 73 TypeSolver typeResolver = new ReflectionTypeSolver(); 74 ResolvedInterfaceDeclaration list = new ReflectionInterfaceDeclaration(List.class, typeResolver); 75 Map<String, ResolvedReferenceType> ancestors = new HashMap<>(); 76 list.getAllAncestors().forEach(a -> ancestors.put(a.getQualifiedName(), a)); 77 assertEquals(3, ancestors.size()); 78 79 ResolvedTypeVariable typeVariable = new ResolvedTypeVariable(list.getTypeParameters().get(0)); 80 assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(Collection.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.util.Collection")); 81 assertEquals(new ReferenceTypeImpl(new ReflectionClassDeclaration(Object.class, typeResolver), typeResolver), ancestors.get("java.lang.Object")); 82 assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(Iterable.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.lang.Iterable")); 83 } 84 85 } 86