Home | History | Annotate | Download | only in converter
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      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 signature.converter;
     18 
     19 import static org.junit.Assert.*;
     20 
     21 import java.io.IOException;
     22 import java.lang.reflect.Field;
     23 import java.lang.reflect.ParameterizedType;
     24 import org.junit.Test;
     25 
     26 import signature.converter.util.AbstractConvertTest;
     27 import signature.converter.util.CompilationUnit;
     28 import signature.model.IApi;
     29 import signature.model.IClassDefinition;
     30 import signature.model.IField;
     31 import signature.model.IPackage;
     32 import signature.model.IParameterizedType;
     33 import signature.model.ITypeReference;
     34 import signature.model.util.ModelUtil;
     35 
     36 public abstract class ConvertParameterizedTypeTest extends AbstractConvertTest {
     37     /**
     38      * [L, a, /, A, $, B, <, L, j, a, v, a, /, l, a, n, g, /, I, n, t, e, g, e, r, ;, >, ;]
     39      * '$' - separated
     40      * @throws IOException
     41      */
     42     @Test
     43     public void convertParameterizedType() throws IOException {
     44         String source =
     45         "package a; " +
     46         "public class A{" +
     47         "  public class B<T> {} " +
     48         "  public A.B<Integer> f; "+
     49         "}";
     50         IApi api = convert(new CompilationUnit("a.A", source));
     51         IPackage sigPackage = ModelUtil.getPackage(api, "a");
     52         IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A");
     53         IField field = ModelUtil.getField(sigClass, "f");
     54 
     55         ITypeReference type = field.getType();
     56         assertTrue(type instanceof IParameterizedType);
     57 
     58         IParameterizedType parametrizedType = (IParameterizedType)type;
     59         ITypeReference ownerType = parametrizedType.getOwnerType();
     60         assertNotNull(ownerType);
     61     }
     62 
     63     @Test
     64     public void convertWildcardLowerBound() throws IOException {
     65         String clazz =
     66         "package a; " +
     67         "public final class A<T> implements I<T>{ " +
     68         " abstract class Super{} " +
     69         " final class Sub extends Super implements I<T>{} " +
     70         "}";
     71         String interfaze =
     72             "package a; " +
     73             "public interface I <T>{}";
     74         IApi api = convert(Visibility.PRIVATE, new CompilationUnit("a.A", clazz),new CompilationUnit("a.I", interfaze));
     75         IPackage sigPackage = ModelUtil.getPackage(api, "a");
     76         IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A.Sub");
     77         System.out.println(sigClass);
     78     }
     79 
     80     public class A{
     81       public class B<T> {}
     82       public A.B<Integer> f;
     83     }
     84 
     85     @Test
     86     public void reflectionTest0() throws SecurityException, NoSuchFieldException{
     87         Field field = A.class.getDeclaredField("f");
     88         ParameterizedType paramType = (ParameterizedType)field.getGenericType();
     89         assertNotNull(paramType.getOwnerType());
     90     }
     91 
     92     public static class C<T>{}
     93 
     94     ConvertParameterizedTypeTest.C<String> f;
     95 
     96       @Test
     97       public void reflectionTest1() throws SecurityException, NoSuchFieldException{
     98           Field field = ConvertParameterizedTypeTest.class.getDeclaredField("f");
     99           ParameterizedType paramType = (ParameterizedType)field.getGenericType();
    100           assertNotNull(paramType.getOwnerType());
    101       }
    102 
    103       public static class E<T>{
    104           static class F<Q>{}
    105           E.F<String> f;
    106       }
    107 
    108 
    109      @Test
    110     public void reflectionTest2() throws SecurityException, NoSuchFieldException {
    111         Field field = E.class.getDeclaredField("f");
    112         ParameterizedType paramType = (ParameterizedType) field.getGenericType();
    113         assertNotNull(paramType.getOwnerType());
    114     }
    115 }
    116