| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package signature.converter; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotSame; |
| import static org.junit.Assert.assertSame; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.IOException; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.junit.Test; |
| |
| import signature.converter.util.AbstractConvertTest; |
| import signature.converter.util.CompilationUnit; |
| import signature.model.IAnnotation; |
| import signature.model.IApi; |
| import signature.model.IArrayType; |
| import signature.model.IClassDefinition; |
| import signature.model.IClassReference; |
| import signature.model.IConstructor; |
| import signature.model.IField; |
| import signature.model.IMethod; |
| import signature.model.IPackage; |
| import signature.model.IParameter; |
| import signature.model.IParameterizedType; |
| import signature.model.ITypeReference; |
| import signature.model.ITypeVariableDefinition; |
| import signature.model.ITypeVariableReference; |
| import signature.model.Kind; |
| import signature.model.Modifier; |
| import signature.model.impl.SigPrimitiveType; |
| import signature.model.util.ModelUtil; |
| |
| public abstract class ConvertClassTest extends AbstractConvertTest { |
| |
| @Test |
| public void convertPackageClassTest() throws IOException { |
| IApi api = convert(new CompilationUnit("a.b.A", "package a.b; public class A{}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a.b"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.b.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals("a.b", sigPackage.getName()); |
| assertEquals(1, sigPackage.getClasses().size()); |
| } |
| |
| @Test |
| public void convertClassClassTest() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public class A{}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| } |
| |
| @Test |
| public void convertClassInterfaceTest() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public interface A{}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.INTERFACE, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| } |
| |
| @Test |
| public void convertClassEnumTest() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public enum A{}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.ENUM, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| } |
| |
| @Test |
| public void convertClassAnnotationTest() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public @interface A{}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.ANNOTATION, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| } |
| |
| @Test |
| public void convertAnnotationTest() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; @Deprecated public class A{}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| assertEquals(1, sigClass.getAnnotations().size()); |
| IAnnotation annotation = sigClass.getAnnotations().iterator().next(); |
| assertEquals("java.lang.Deprecated", annotation.getType().getClassDefinition().getQualifiedName()); |
| } |
| |
| @Test |
| public void convertAnnotationOnFieldTest() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", |
| "package a; " + |
| "public class A{" + |
| " @Deprecated" + |
| " public int f;" + |
| "}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| assertEquals(1, sigClass.getFields().size()); |
| IField field = sigClass.getFields().iterator().next(); |
| assertEquals("f", field.getName()); |
| assertEquals(1, field.getAnnotations().size()); |
| IAnnotation annotation = field.getAnnotations().iterator().next(); |
| assertEquals("java.lang.Deprecated", annotation.getType().getClassDefinition().getQualifiedName()); |
| } |
| |
| @Test |
| public void convertGenericClass0() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public class A<T> {}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| //test type variable |
| assertEquals(1, sigClass.getTypeParameters().size()); |
| ITypeVariableDefinition variable = sigClass.getTypeParameters().get(0); |
| assertEquals("T", variable.getName()); |
| //test type variable bound |
| assertEquals(1, variable.getUpperBounds().size()); |
| IClassReference bound = (IClassReference) variable.getUpperBounds().get(0); |
| assertEquals("java.lang.Object", bound.getClassDefinition().getQualifiedName()); |
| } |
| |
| @Test |
| public void convertGenericClass00() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public class A<T extends Integer> {}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| //test type variable |
| assertEquals(1, sigClass.getTypeParameters().size()); |
| ITypeVariableDefinition variable = sigClass.getTypeParameters().get(0); |
| assertEquals("T", variable.getName()); |
| //test type variable bound |
| assertEquals(1, variable.getUpperBounds().size()); |
| IClassReference bound = (IClassReference) variable.getUpperBounds().get(0); |
| assertEquals("java.lang.Integer", bound.getClassDefinition().getQualifiedName()); |
| } |
| |
| @Test |
| public void convertGenericClass1() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public class A<S,T> {}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| //test type variable |
| assertEquals(2, sigClass.getTypeParameters().size()); |
| ITypeVariableDefinition variableS = sigClass.getTypeParameters().get(0); |
| assertEquals("S", variableS.getName()); |
| //test type variable bound |
| assertEquals(1, variableS.getUpperBounds().size()); |
| IClassReference boundS = (IClassReference) variableS.getUpperBounds().get(0); |
| assertEquals("java.lang.Object", boundS.getClassDefinition().getQualifiedName()); |
| |
| ITypeVariableDefinition variableT = sigClass.getTypeParameters().get(1); |
| assertEquals("T", variableT.getName()); |
| //test type variable bound |
| assertEquals(1, variableT.getUpperBounds().size()); |
| IClassReference boundT = (IClassReference) variableT.getUpperBounds().get(0); |
| assertEquals("java.lang.Object", boundT.getClassDefinition().getQualifiedName()); |
| } |
| |
| @Test |
| public void convertGenericClass2() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public class A<S,T extends S> {}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| //test type variable |
| assertEquals(2, sigClass.getTypeParameters().size()); |
| ITypeVariableDefinition variableS = sigClass.getTypeParameters().get(0); |
| assertEquals("S", variableS.getName()); |
| //test type variable bound |
| assertEquals(1, variableS.getUpperBounds().size()); |
| IClassReference boundS = (IClassReference) variableS.getUpperBounds().get(0); |
| assertEquals("java.lang.Object", boundS.getClassDefinition().getQualifiedName()); |
| |
| ITypeVariableDefinition variableT = sigClass.getTypeParameters().get(1); |
| assertEquals("T", variableT.getName()); |
| //test type variable bound |
| assertEquals(1, variableT.getUpperBounds().size()); |
| ITypeVariableReference boundT = (ITypeVariableReference) variableT.getUpperBounds().get(0); |
| assertSame(variableS, boundT.getTypeVariableDefinition()); |
| } |
| |
| @Test |
| public void convertClassImplementsInterface0() throws IOException { |
| IApi api = convert(new CompilationUnit("a.A", "package a; public class A implements Cloneable {}")); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| |
| assertEquals(1, sigClass.getInterfaces().size()); |
| IClassDefinition clonable = ((IClassReference) sigClass.getInterfaces().iterator().next()).getClassDefinition(); |
| assertEquals("java.lang.Cloneable", clonable.getQualifiedName()); |
| assertEquals(Kind.INTERFACE, clonable.getKind()); |
| } |
| |
| @Test |
| public void convertClassImplementsInterface1() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A implements I {}"); |
| CompilationUnit interfaceSrc = new CompilationUnit("a.I", "package a; public interface I {}"); |
| IApi api = convert(classSrc, interfaceSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| |
| IClassDefinition sigInterface = ModelUtil.getClass(sigPackage, "I"); |
| assertEquals("a.I", sigInterface.getQualifiedName()); |
| assertEquals("I", sigInterface.getName()); |
| assertEquals(Kind.INTERFACE, sigInterface.getKind()); |
| assertTrue(sigInterface.getModifiers().contains(Modifier.PUBLIC)); |
| |
| assertEquals(1, sigClass.getInterfaces().size()); |
| IClassReference interfaze = (IClassReference) sigClass.getInterfaces().iterator().next(); |
| assertEquals(Kind.INTERFACE, interfaze.getClassDefinition().getKind()); |
| assertSame(sigInterface, interfaze.getClassDefinition()); |
| } |
| |
| @Test |
| public void convertClassImplementsGenericInterface0() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A implements I<String> {}"); |
| CompilationUnit interfaceSrc = new CompilationUnit("a.I", "package a; public interface I<T> {}"); |
| IApi api = convert(classSrc, interfaceSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| |
| IClassDefinition sigInterface = ModelUtil.getClass(sigPackage, "I"); |
| assertEquals("a.I", sigInterface.getQualifiedName()); |
| assertEquals("I", sigInterface.getName()); |
| assertEquals(Kind.INTERFACE, sigInterface.getKind()); |
| assertTrue(sigInterface.getModifiers().contains(Modifier.PUBLIC)); |
| |
| assertEquals(1, sigClass.getInterfaces().size()); |
| IParameterizedType interfaze = (IParameterizedType) sigClass.getInterfaces().iterator().next(); |
| //compare raw type "I" |
| assertSame(sigInterface, interfaze.getRawType().getClassDefinition()); |
| //test type argument string |
| assertEquals(1, interfaze.getTypeArguments().size()); |
| IClassReference string = (IClassReference) interfaze.getTypeArguments().get(0); |
| assertEquals("java.lang.String", string.getClassDefinition().getQualifiedName()); |
| } |
| |
| @Test |
| public void convertGenericClassImplementsGenericInterface() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A<T> implements I<T> {}"); |
| CompilationUnit interfaceSrc = new CompilationUnit("a.I", "package a; public interface I<T> {}"); |
| IApi api = convert(classSrc, interfaceSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals("a.A", sigClass.getQualifiedName()); |
| assertEquals("A", sigClass.getName()); |
| assertEquals(Kind.CLASS, sigClass.getKind()); |
| assertTrue(sigClass.getModifiers().contains(Modifier.PUBLIC)); |
| |
| //get type variable from class |
| assertEquals(1, sigClass.getTypeParameters().size()); |
| ITypeVariableDefinition classTypeVar = sigClass.getTypeParameters().get(0); |
| assertEquals("T", classTypeVar.getName()); |
| assertSame(sigClass, classTypeVar.getGenericDeclaration()); |
| |
| //inspect interface |
| IClassDefinition sigInterface = ModelUtil.getClass(sigPackage, "I"); |
| assertEquals("a.I", sigInterface.getQualifiedName()); |
| assertEquals("I", sigInterface.getName()); |
| assertEquals(Kind.INTERFACE, sigInterface.getKind()); |
| assertTrue(sigInterface.getModifiers().contains(Modifier.PUBLIC)); |
| |
| //get type variable from interface |
| assertEquals(1, sigInterface.getTypeParameters().size()); |
| ITypeVariableDefinition interfaceTypeVar = sigInterface.getTypeParameters().get(0); |
| |
| //get implemented interface from A |
| assertEquals(1, sigClass.getInterfaces().size()); |
| IParameterizedType interfaze = (IParameterizedType) sigClass.getInterfaces().iterator().next(); |
| |
| //compare raw type "I" |
| assertSame(sigInterface, interfaze.getRawType().getClassDefinition()); |
| |
| //test if type variable of A is type argument of I |
| assertEquals(1, interfaze.getTypeArguments().size()); |
| ITypeVariableReference argument = (ITypeVariableReference) interfaze.getTypeArguments().get(0); |
| assertSame(sigClass, argument.getTypeVariableDefinition().getGenericDeclaration()); |
| assertEquals(classTypeVar, argument.getTypeVariableDefinition()); |
| |
| //test that the two type parameters are not equal |
| assertNotSame(classTypeVar, interfaceTypeVar); |
| assertEquals(classTypeVar.getName(), interfaceTypeVar.getName()); |
| assertNotSame(classTypeVar.getGenericDeclaration(), interfaceTypeVar.getGenericDeclaration()); |
| } |
| |
| @Test |
| public void convertConstructor0() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A { public A(){} }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals(1, sigClass.getConstructors().size()); |
| IConstructor constructor = sigClass.getConstructors().iterator().next(); |
| assertTrue(constructor.getModifiers().contains(Modifier.PUBLIC)); |
| } |
| |
| @Test |
| public void convertConstructor1a() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A { public class B{ } }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A.B"); |
| assertEquals(1, sigClass.getConstructors().size()); |
| IConstructor constructor = sigClass.getConstructors().iterator().next(); |
| assertTrue(constructor.getModifiers().contains(Modifier.PUBLIC)); |
| } |
| |
| @Test |
| public void convertConstructor1b() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A { protected class B{ } }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A.B"); |
| assertEquals(1, sigClass.getConstructors().size()); |
| IConstructor constructor = sigClass.getConstructors().iterator().next(); |
| assertTrue(constructor.getModifiers().contains(Modifier.PROTECTED)); |
| } |
| |
| @Test |
| public void convertConstructor2() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A {}"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals(1, sigClass.getConstructors().size()); |
| } |
| |
| @Test |
| public void convertConstructor3() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A { public class B { public B(){}} }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A.B"); |
| assertEquals(1, sigClass.getConstructors().size()); |
| } |
| |
| @Test |
| public void convertConstructorWithException() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A { public A() throws NullPointerException{} }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals(1, sigClass.getConstructors().size()); |
| IConstructor constructor = sigClass.getConstructors().iterator().next(); |
| assertTrue(constructor.getModifiers().contains(Modifier.PUBLIC)); |
| assertEquals(1, constructor.getExceptions().size()); |
| IClassReference exception = (IClassReference) constructor.getExceptions().iterator().next(); |
| assertEquals("java.lang.NullPointerException", exception.getClassDefinition().getQualifiedName()); |
| } |
| |
| @Test |
| public void convertConstructorWithParameter() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A { public A(String param){} }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals(1, sigClass.getConstructors().size()); |
| IConstructor constructor = sigClass.getConstructors().iterator().next(); |
| assertTrue(constructor.getModifiers().contains(Modifier.PUBLIC)); |
| assertEquals(1, constructor.getParameters().size()); |
| IParameter param = constructor.getParameters().get(0); |
| assertEquals("java.lang.String", ((IClassReference)param.getType()).getClassDefinition().getQualifiedName()); |
| } |
| |
| @Test |
| public void convertConstructorWithGenericParameter() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A<T> { public A(T param){} }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals(1, sigClass.getConstructors().size()); |
| IConstructor constructor = sigClass.getConstructors().iterator().next(); |
| assertTrue(constructor.getModifiers().contains(Modifier.PUBLIC)); |
| assertEquals(1, constructor.getParameters().size()); |
| IParameter param = constructor.getParameters().get(0); |
| ITypeVariableDefinition paramType = ((ITypeVariableReference)param.getType()).getTypeVariableDefinition(); |
| assertEquals("T", paramType.getName()); |
| assertSame(sigClass, paramType.getGenericDeclaration()); |
| } |
| |
| @Test |
| public void convertVoidMethod() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A { public void m(){} }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals(1, sigClass.getMethods().size()); |
| IMethod method = sigClass.getMethods().iterator().next(); |
| assertTrue(method.getModifiers().contains(Modifier.PUBLIC)); |
| assertEquals("m", method.getName()); |
| assertSame(SigPrimitiveType.VOID_TYPE, method.getReturnType()); |
| } |
| |
| @Test |
| public void convertArrayMethod() throws IOException { |
| CompilationUnit classSrc = new CompilationUnit("a.A", "package a; public class A { public String[] m(){ return null; } }"); |
| IApi api = convert(classSrc); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| assertEquals(1, sigClass.getMethods().size()); |
| IMethod method = sigClass.getMethods().iterator().next(); |
| assertTrue(method.getModifiers().contains(Modifier.PUBLIC)); |
| assertEquals("m", method.getName()); |
| IArrayType arrayType = (IArrayType) method.getReturnType(); |
| IClassDefinition clazz = ((IClassReference) arrayType.getComponentType()).getClassDefinition(); |
| assertEquals("java.lang.String", clazz.getQualifiedName()); |
| } |
| |
| @Test |
| public void testParameterConformance1() throws IOException { |
| IApi api = convert(new CompilationUnit("test.A", |
| "package test; " + |
| "import java.util.List;" + |
| "public class A<T> {" + |
| " public String[] a;" + |
| " public String[] b;" + |
| " public List<String> c;" + |
| " public List<String> d;" + |
| " public List<T> e;" + |
| " public List<T> f;" + |
| "}" |
| )); |
| IPackage p = ModelUtil.getPackage(api, "test"); |
| assertEquals("test", p.getName()); |
| IClassDefinition c = ModelUtil.getClass(p, "A"); |
| assertEquals("A", c.getName()); |
| assertEquals("test.A", c.getQualifiedName()); |
| |
| Map<String, IField> fields = new HashMap<String, IField>(); |
| for(IField f : c.getFields()){ |
| fields.put(f.getName(), f); |
| } |
| assertSame(((IClassReference)((IArrayType)fields.get("a").getType()).getComponentType()).getClassDefinition(), ((IClassReference)((IArrayType)fields.get("b").getType()).getComponentType()).getClassDefinition()); |
| assertSame(((IParameterizedType)fields.get("c").getType()).getRawType().getClassDefinition(), ((IParameterizedType)fields.get("d").getType()).getRawType().getClassDefinition()); |
| assertSame(((IParameterizedType)fields.get("e").getType()).getRawType().getClassDefinition(), ((IParameterizedType)fields.get("f").getType()).getRawType().getClassDefinition()); |
| |
| ITypeReference type = fields.get("f").getType(); |
| assertTrue(type instanceof IParameterizedType); |
| ITypeReference typeArgument = ((IParameterizedType)type).getTypeArguments().get(0); |
| ITypeVariableDefinition typeParameter = c.getTypeParameters().get(0); |
| assertSame(((ITypeVariableReference)typeArgument).getTypeVariableDefinition(), typeParameter); |
| } |
| |
| @Test |
| public void testParameterConformance2() throws IOException { |
| IApi api = convert(new CompilationUnit("test.A", |
| "package test; " + |
| "public class A<T> {" + |
| " public <T> T foo(T t){return null;}" + |
| "}" |
| )); |
| IPackage p = ModelUtil.getPackage(api, "test"); |
| assertEquals("test", p.getName()); |
| |
| IPackage sigPackage = ModelUtil.getPackage(api, "test"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| ITypeVariableDefinition t = sigClass.getTypeParameters().get(0); |
| |
| IMethod sigMethod = sigClass.getMethods().iterator().next(); |
| ITypeVariableDefinition t1 = sigMethod.getTypeParameters().get(0); |
| IParameter param = sigMethod.getParameters().get(0); |
| ITypeReference t2 = param.getType(); |
| ITypeReference t3 = sigMethod.getReturnType(); |
| |
| assertSame(t1, ((ITypeVariableReference)t2).getTypeVariableDefinition()); |
| assertSame(((ITypeVariableReference)t2).getTypeVariableDefinition(), ((ITypeVariableReference)t3).getTypeVariableDefinition()); |
| |
| assertNotSame(t, t1); |
| } |
| |
| @Test |
| public void testInnerReferenceToOuterTypeVariable() throws IOException { |
| IApi api = convert(new CompilationUnit("test.A", |
| "package test; " + |
| "public class A<T> {" + |
| " public class B {" + |
| " public T f;" + |
| " } " + |
| "}" |
| )); |
| IPackage p = ModelUtil.getPackage(api, "test"); |
| assertEquals("test", p.getName()); |
| |
| IPackage sigPackage = ModelUtil.getPackage(api, "test"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| ITypeVariableDefinition t = sigClass.getTypeParameters().get(0); |
| |
| IClassDefinition innerClass = ModelUtil.getClass(sigPackage, "A.B"); |
| IField field = ModelUtil.getField(innerClass, "f"); |
| |
| assertSame(t, ((ITypeVariableReference)field.getType()).getTypeVariableDefinition()); |
| } |
| |
| |
| @Test |
| public void convertTypeVariableMultipleUpperBound() throws IOException { |
| String source = |
| "package a; " + |
| "public class A<T extends Comparable<T> & java.io.Serializable> {}"; |
| IApi api = convert(new CompilationUnit("a.A", source)); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition sigClass = ModelUtil.getClass(sigPackage, "A"); |
| |
| List<ITypeVariableDefinition> typeParameters = sigClass.getTypeParameters(); |
| assertEquals(1, typeParameters.size()); |
| |
| ITypeVariableDefinition typeVariable = typeParameters.get(0); |
| List<ITypeReference> upperBounds = typeVariable.getUpperBounds(); |
| assertEquals(2, upperBounds.size()); |
| ITypeReference firstBound = upperBounds.get(0); |
| ITypeReference secondBound = upperBounds.get(1); |
| |
| assertTrue(firstBound instanceof IParameterizedType); |
| |
| IParameterizedType parametrizedType = (IParameterizedType)firstBound; |
| |
| IClassReference rawType = parametrizedType.getRawType(); |
| assertEquals("Comparable", rawType.getClassDefinition().getName()); |
| assertEquals(1, parametrizedType.getTypeArguments().size()); |
| ITypeVariableReference variable = (ITypeVariableReference) parametrizedType.getTypeArguments().get(0); |
| assertSame(typeVariable, variable.getTypeVariableDefinition()); |
| |
| assertTrue(secondBound instanceof IClassReference); |
| IClassReference secondBoundClass = (IClassReference) secondBound; |
| assertEquals("Serializable", secondBoundClass.getClassDefinition().getName()); |
| } |
| |
| @Test |
| public void convertPrivateStaticInnerClass0() throws IOException { |
| String source = |
| "package a; " + |
| "public class A { " + |
| " private static class I{}" + |
| " private transient Object i = new I(); " + |
| "}"; |
| IApi api = convert(Visibility.PRIVATE, new CompilationUnit("a.A", source)); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition innerClass = ModelUtil.getClass(sigPackage, "A.I"); |
| assertEquals("A.I", innerClass.getName()); |
| Set<IConstructor> constructors = innerClass.getConstructors(); |
| assertEquals(1, constructors.size()); |
| } |
| |
| @Test |
| public void convertPrivateStaticInnerClass1() throws IOException { |
| String source = |
| "package a; " + |
| "public class A {" + |
| " private static class B {" + |
| " public static class C {}" + |
| " }" + |
| "}"; |
| IApi api = convert(new CompilationUnit("a.A", source)); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| assertEquals(1, sigPackage.getClasses().size()); |
| } |
| |
| /** |
| * Tests whether the first constructor argument is removed. |
| */ |
| @Test |
| public void convertNonStaticInnerClassConstructor0() throws IOException { |
| String source = |
| "package a; " + |
| "public class A {" + |
| " public class B {" + |
| " public B(){}" + |
| " }" + |
| "}"; |
| IApi api = convert(new CompilationUnit("a.A", source)); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition innerClass = ModelUtil.getClass(sigPackage, "A.B"); |
| assertEquals(1, innerClass.getConstructors().size()); |
| Set<IConstructor> constructors = innerClass.getConstructors(); |
| IConstructor first = constructors.iterator().next(); |
| //implicit A.this reference must be removed |
| assertEquals(0, first.getParameters().size()); |
| } |
| |
| /** |
| * Tests whether the first constructor argument is removed. |
| */ |
| @Test |
| public void convertNonStaticInnerClassConstructor1() throws IOException { |
| String source = |
| "package a; " + |
| "public class A {" + |
| " public class B {}" + |
| "}"; |
| IApi api = convert(new CompilationUnit("a.A", source)); |
| IPackage sigPackage = ModelUtil.getPackage(api, "a"); |
| IClassDefinition innerClass = ModelUtil.getClass(sigPackage, "A.B"); |
| assertEquals(1, innerClass.getConstructors().size()); |
| Set<IConstructor> constructors = innerClass.getConstructors(); |
| IConstructor first = constructors.iterator().next(); |
| //implicit A.this reference must be removed |
| assertEquals(0, first.getParameters().size()); |
| } |
| |
| |
| |
| } |