/******************************************************************************* | |
* Copyright (c) 2012 Oracle. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0, which accompanies this distribution | |
* and is available at http://www.eclipse.org/legal/epl-v10.html. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation | |
******************************************************************************/ | |
package org.eclipse.jpt.common.core.tests.internal.resource.java; | |
import java.io.File; | |
import java.net.URL; | |
import org.eclipse.core.runtime.FileLocator; | |
import org.eclipse.jpt.common.core.internal.resource.java.binary.BinaryTypeCache; | |
import org.eclipse.jpt.common.core.resource.java.AnnotationDefinition; | |
import org.eclipse.jpt.common.core.resource.java.JavaResourceField; | |
import org.eclipse.jpt.common.core.resource.java.JavaResourceMethod; | |
import org.eclipse.jpt.common.core.resource.java.JavaResourceType; | |
import org.eclipse.jpt.common.core.resource.java.NestableAnnotationDefinition; | |
@SuppressWarnings("nls") | |
public class BinaryTypeTests | |
extends JavaResourceModelTestCase { | |
private static URL JAR_URL = BinaryTypeTests.class.getResource("binmodel.jar"); | |
private static String SUPERCLASS_CLASS_NAME = BinaryTypeTests.class.getPackage().getName() + ".binmodel.GenericSuperclass"; | |
private static String SUBCLASS_CLASS_NAME = BinaryTypeTests.class.getPackage().getName() + ".binmodel.GenericSubclass"; | |
public BinaryTypeTests(String name) { | |
super(name); | |
} | |
@Override | |
protected AnnotationDefinition[] annotationDefinitions() { | |
return new AnnotationDefinition[] { | |
DeprecatedAnnotationDefinition.instance() }; | |
} | |
@Override | |
protected NestableAnnotationDefinition[] nestableAnnotationDefinitions() { | |
return new NestableAnnotationDefinition[0]; | |
} | |
@Override | |
protected void setUp() throws Exception { | |
super.setUp(); | |
getJavaProject().addJar(new File(FileLocator.resolve(JAR_URL).toURI()).getAbsolutePath()); | |
} | |
public void testInheritedAttributeTypes() throws Exception { | |
BinaryTypeCache typeCache = new BinaryTypeCache(buildAnnotationProvider()); | |
JavaResourceType superclassType = | |
(JavaResourceType) typeCache.addType(getJavaProject().getJavaProject().findType(SUPERCLASS_CLASS_NAME)); | |
JavaResourceType subclassType = | |
(JavaResourceType) typeCache.addType(getJavaProject().getJavaProject().findType(SUBCLASS_CLASS_NAME)); | |
// generic field 1 -> Object, String | |
JavaResourceField genericField1 = superclassType.getField("genericField1"); | |
assertEquals("java.lang.Object", superclassType.getAttributeTypeBinding(genericField1).getQualifiedName()); | |
assertEquals("java.lang.String", subclassType.getAttributeTypeBinding(genericField1).getQualifiedName()); | |
// generic field 2 -> Object, Number | |
JavaResourceField genericField2 = superclassType.getField("genericField2"); | |
assertEquals("java.lang.Object", superclassType.getAttributeTypeBinding(genericField2).getQualifiedName()); | |
assertEquals("java.lang.Number", subclassType.getAttributeTypeBinding(genericField2).getQualifiedName()); | |
// generic method 1 -> Object, String | |
JavaResourceMethod genericMethod1 = superclassType.getMethod("genericMethod1"); | |
assertEquals("java.lang.Object", superclassType.getAttributeTypeBinding(genericMethod1).getQualifiedName()); | |
assertEquals("java.lang.String", subclassType.getAttributeTypeBinding(genericMethod1).getQualifiedName()); | |
// generic method 1 -> Object, Number | |
JavaResourceMethod genericMethod2 = superclassType.getMethod("genericMethod2"); | |
assertEquals("java.lang.Object", superclassType.getAttributeTypeBinding(genericMethod2).getQualifiedName()); | |
assertEquals("java.lang.Number", subclassType.getAttributeTypeBinding(genericMethod2).getQualifiedName()); | |
} | |
public void testGeneralTypeAPI() throws Exception { | |
BinaryTypeCache typeCache = new BinaryTypeCache(buildAnnotationProvider()); | |
JavaResourceType superclassType = | |
(JavaResourceType) typeCache.addType(getJavaProject().getJavaProject().findType(SUPERCLASS_CLASS_NAME)); | |
JavaResourceType subclassType = | |
(JavaResourceType) typeCache.addType(getJavaProject().getJavaProject().findType(SUBCLASS_CLASS_NAME)); | |
// superclass qualified name | |
assertEquals("java.lang.Object", superclassType.getSuperclassQualifiedName()); | |
assertEquals(SUPERCLASS_CLASS_NAME, subclassType.getSuperclassQualifiedName()); | |
// has any annotated fields/methods | |
assertFalse(superclassType.hasAnyAnnotatedFields()); | |
assertFalse(superclassType.hasAnyAnnotatedMethods()); | |
assertTrue(subclassType.hasAnyAnnotatedFields()); | |
assertTrue(subclassType.hasAnyAnnotatedMethods()); | |
// has equals/hashcode method | |
assertFalse(superclassType.hasEqualsMethod()); | |
assertFalse(superclassType.hasHashCodeMethod()); | |
assertTrue(subclassType.hasEqualsMethod()); | |
assertTrue(subclassType.hasHashCodeMethod()); | |
// has xxx no arg constructor | |
assertTrue(superclassType.hasNoArgConstructor()); | |
assertFalse(superclassType.hasPrivateNoArgConstructor()); | |
assertTrue(superclassType.hasPublicNoArgConstructor()); | |
assertTrue(superclassType.hasPublicOrProtectedNoArgConstructor()); | |
assertTrue(subclassType.hasNoArgConstructor()); | |
assertTrue(subclassType.hasPrivateNoArgConstructor()); | |
assertFalse(subclassType.hasPublicNoArgConstructor()); | |
assertFalse(subclassType.hasPublicOrProtectedNoArgConstructor()); | |
// is abstract | |
assertTrue(superclassType.isAbstract()); | |
assertFalse(subclassType.isAbstract()); | |
} | |
} |