blob: 86b89fa89c7cc488843b4f7738d4a0cdf8e1ed9a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2013 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0, which accompanies this distribution
* and is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Oracle - initial API and implementation
*******************************************************************************/
package org.eclipse.jpt.common.core.tests.internal.resource.java;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
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.JavaResourceType;
import org.eclipse.jpt.common.core.resource.java.NestableAnnotationDefinition;
import org.eclipse.jpt.common.core.tests.internal.projects.JavaProjectTestHarness.SourceWriter;
@SuppressWarnings("nls")
public class SourceAttributeTests
extends JavaResourceModelTestCase {
private static String TEST_CLASS_NAME = "TestClass";
public SourceAttributeTests(String name) {
super(name);
}
@Override
protected AnnotationDefinition[] annotationDefinitions() {
return new AnnotationDefinition[0];
}
@Override
protected NestableAnnotationDefinition[] nestableAnnotationDefinitions() {
return new NestableAnnotationDefinition[0];
}
private ICompilationUnit createTestClassWithVariousAttributes() throws CoreException {
SourceWriter sourceWriter = new SourceWriter() {
public void appendSourceTo(StringBuilder sb) {
sb.append(CR);
sb.append("import java.util.List;").append(CR);
sb.append(CR);
sb.append("public class ").append(TEST_CLASS_NAME).append("<T extends Number> ").append("{").append(CR);
sb.append(" public String string;").append(CR);
sb.append(" public List<String> stringList;").append(CR);
sb.append(" public String[] stringArray;").append(CR);
sb.append(" public String[][] stringDoubleArray;").append(CR);
sb.append(" public T generic;").append(CR);
sb.append(" public List<T> genericList;").append(CR);
sb.append(" public T[] genericArray;").append(CR);
sb.append(" public List<?> wildcardList;").append(CR);
sb.append("}").append(CR);
}
};
return this.javaProjectTestHarness.createCompilationUnit(PACKAGE_NAME, TEST_CLASS_NAME + ".java", sourceWriter);
}
public void testAttributeTypes() throws Exception {
ICompilationUnit testClassCU = createTestClassWithVariousAttributes();
JavaResourceType testClass = buildJavaResourceType(testClassCU);
// String string
JavaResourceField att = getField(testClass, 0);
assertEquals("string", att.getName());
assertEquals("java.lang.String", att.getTypeBinding().getQualifiedName());
assertEquals(false, att.getTypeBinding().isArray());
assertEquals(null, att.getTypeBinding().getArrayComponentTypeName());
assertEquals(0, att.getTypeBinding().getArrayDimensionality());
assertEquals(0, att.getTypeBinding().getTypeArgumentNamesSize());
// List<String> stringList
att = getField(testClass, 1);
assertEquals("stringList", att.getName());
assertEquals("java.util.List", att.getTypeBinding().getQualifiedName());
assertEquals(false, att.getTypeBinding().isArray());
assertEquals(null, att.getTypeBinding().getArrayComponentTypeName());
assertEquals(0, att.getTypeBinding().getArrayDimensionality());
assertEquals(1, att.getTypeBinding().getTypeArgumentNamesSize());
assertEquals("java.lang.String", att.getTypeBinding().getTypeArgumentName(0));
// String[] stringArray
att = getField(testClass, 2);
assertEquals("stringArray", att.getName());
assertEquals("java.lang.String[]", att.getTypeBinding().getQualifiedName());
assertEquals(true, att.getTypeBinding().isArray());
assertEquals("java.lang.String", att.getTypeBinding().getArrayComponentTypeName());
assertEquals(1, att.getTypeBinding().getArrayDimensionality());
assertEquals(0, att.getTypeBinding().getTypeArgumentNamesSize());
// String[] stringDoubleArray
att = getField(testClass, 3);
assertEquals("stringDoubleArray", att.getName());
assertEquals("java.lang.String[][]", att.getTypeBinding().getQualifiedName());
assertEquals(true, att.getTypeBinding().isArray());
assertEquals("java.lang.String", att.getTypeBinding().getArrayComponentTypeName());
assertEquals(2, att.getTypeBinding().getArrayDimensionality());
assertEquals(0, att.getTypeBinding().getTypeArgumentNamesSize());
// T generic
att = getField(testClass, 4);
assertEquals("generic", att.getName());
assertEquals("java.lang.Number", att.getTypeBinding().getQualifiedName());
assertEquals(false, att.getTypeBinding().isArray());
assertEquals(null, att.getTypeBinding().getArrayComponentTypeName());
assertEquals(0, att.getTypeBinding().getArrayDimensionality());
assertEquals(0, att.getTypeBinding().getTypeArgumentNamesSize());
// List<T> genericList
att = getField(testClass, 5);
assertEquals("genericList", att.getName());
assertEquals("java.util.List", att.getTypeBinding().getQualifiedName());
assertEquals(false, att.getTypeBinding().isArray());
assertEquals(null, att.getTypeBinding().getArrayComponentTypeName());
assertEquals(0, att.getTypeBinding().getArrayDimensionality());
assertEquals(1, att.getTypeBinding().getTypeArgumentNamesSize());
assertEquals("java.lang.Number", att.getTypeBinding().getTypeArgumentName(0));
// T[] genericArray
att = getField(testClass, 6);
assertEquals("genericArray", att.getName());
assertEquals("java.lang.Number[]", att.getTypeBinding().getQualifiedName());
assertEquals(true, att.getTypeBinding().isArray());
assertEquals("java.lang.Number", att.getTypeBinding().getArrayComponentTypeName());
assertEquals(1, att.getTypeBinding().getArrayDimensionality());
assertEquals(0, att.getTypeBinding().getTypeArgumentNamesSize());
// List<?> wildcardList
att = getField(testClass, 7);
assertEquals("wildcardList", att.getName());
assertEquals("java.util.List", att.getTypeBinding().getQualifiedName());
assertEquals(false, att.getTypeBinding().isArray());
assertEquals(null, att.getTypeBinding().getArrayComponentTypeName());
assertEquals(0, att.getTypeBinding().getArrayDimensionality());
assertEquals(1, att.getTypeBinding().getTypeArgumentNamesSize());
assertEquals("java.lang.Object", att.getTypeBinding().getTypeArgumentName(0));
}
}