diff --git a/java.source/apichanges.xml b/java.source/apichanges.xml --- a/java.source/apichanges.xml +++ b/java.source/apichanges.xml @@ -108,6 +108,19 @@ + + + Added factory methods to create an ElementHandle for type and package. + + + + + + Added a factory methods to create an ElementHandle for type and package from binary name. + + + + Added several methods to CodeStyle supporting customization of the generated class members order and other minor formatting enhancements. diff --git a/java.source/nbproject/project.properties b/java.source/nbproject/project.properties --- a/java.source/nbproject/project.properties +++ b/java.source/nbproject/project.properties @@ -46,7 +46,7 @@ javadoc.title=Java Source javadoc.arch=${basedir}/arch.xml javadoc.apichanges=${basedir}/apichanges.xml -spec.version.base=0.96.0 +spec.version.base=0.98.0 test.qa-functional.cp.extra=${refactoring.java.dir}/modules/ext/javac-api-nb-7.0-b07.jar test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:\ ${o.n.core.dir}/lib/boot.jar:\ diff --git a/java.source/src/org/netbeans/api/java/source/ElementHandle.java b/java.source/src/org/netbeans/api/java/source/ElementHandle.java --- a/java.source/src/org/netbeans/api/java/source/ElementHandle.java +++ b/java.source/src/org/netbeans/api/java/source/ElementHandle.java @@ -115,7 +115,7 @@ private final String[] signatures; - private ElementHandle(final ElementKind kind, String[] signatures) { + private ElementHandle(final ElementKind kind, String... signatures) { assert kind != null; assert signatures != null; this.kind = kind; @@ -389,6 +389,41 @@ return (ElementHandle) NORMALIZATION_CACHE.putIfAbsent(eh); } + + /** + * Creates an {@link ElementHandle} representing a {@link PackageElement}. + * @param packageName the name of the package + * @return the created {@link ElementHandle} + * @since 0.98 + */ + @NonNull + public static ElementHandle createPackageElementHandle ( + @NonNull final String packageName) { + Parameters.notNull("packageName", packageName); //NOI18N + return new ElementHandle(ElementKind.PACKAGE, packageName); + } + + /** + * Creates an {@link ElementHandle} representing a {@link TypeElement}. + * @param kind the {@link ElementKind} of the {@link TypeElement}, + * allowed values are {@link ElementKind#CLASS}, {@link ElementKind#INTERFACE}, + * {@link ElementKind#ENUM} and {@link ElementKind#ANNOTATION_TYPE}. + * @param binaryName the class binary name as specified by JLS ยง13.1 + * @return the created {@link ElementHandle} + * @throws IllegalArgumentException if kind is neither class nor interface + * @since 0.98 + */ + @NonNull + public static ElementHandle createTypeElementHandle( + @NonNull final ElementKind kind, + @NonNull final String binaryName) throws IllegalArgumentException { + Parameters.notNull("kind", kind); //NOI18N + Parameters.notNull("binaryName", binaryName); //NOI18N + if (!kind.isClass() && !kind.isInterface()) { + throw new IllegalArgumentException(kind.toString()); + } + return new ElementHandle(kind, binaryName); + } private static @NonNull ElementHandle createImpl (@NonNull final T element) throws IllegalArgumentException { Parameters.notNull("element", element); diff --git a/java.source/test/unit/src/org/netbeans/api/java/source/ElementHandleTest.java b/java.source/test/unit/src/org/netbeans/api/java/source/ElementHandleTest.java --- a/java.source/test/unit/src/org/netbeans/api/java/source/ElementHandleTest.java +++ b/java.source/test/unit/src/org/netbeans/api/java/source/ElementHandleTest.java @@ -51,13 +51,17 @@ import java.io.PrintWriter; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; import javax.lang.model.type.DeclaredType; import javax.lang.model.type.TypeKind; import junit.framework.*; import java.util.List; +import java.util.Set; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.PackageElement; import javax.lang.model.element.TypeElement; import javax.lang.model.element.TypeParameterElement; import javax.lang.model.element.VariableElement; @@ -419,6 +423,34 @@ } + public void testCreatePackageElementHandle() { + final ElementHandle eh = ElementHandle.createPackageElementHandle("org.me"); //NOI18N + assertEquals(ElementKind.PACKAGE, eh.getKind()); + } + + + public void testCreateTypeElementHandle() { + final Set allowed = new HashSet(Arrays.asList(new ElementKind[]{ + ElementKind.CLASS, + ElementKind.INTERFACE, + ElementKind.ENUM, + ElementKind.ANNOTATION_TYPE + })); + for (ElementKind aek : allowed) { + ElementHandle eh = ElementHandle.createTypeElementHandle(aek, "org.me.Foo"); //NOI18N + assertEquals(aek, eh.getKind()); + } + for (ElementKind aek : ElementKind.values()) { + if (!allowed.contains(aek)) { + try { + ElementHandle eh = ElementHandle.createTypeElementHandle(aek, "org.me.Foo"); //NOI18N + assertTrue(false); + }catch (IllegalArgumentException e) { + } + } + } + } + public void testEquals() throws Exception { final JavaSource js = JavaSource.create(ClasspathInfo.create(ClassPathProviderImpl.getDefault().findClassPath(data,ClassPath.BOOT), ClassPathProviderImpl.getDefault().findClassPath(data, ClassPath.COMPILE), null)); assertNotNull(js);