Home | History | Annotate | Download | only in reflectionmodel
      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