diff options
-rw-r--r-- | ChangeLog | 37 | ||||
-rw-r--r-- | javax/lang/model/element/Element.java | 23 | ||||
-rw-r--r-- | javax/lang/model/element/Modifier.java | 71 | ||||
-rw-r--r-- | javax/lang/model/element/NestingKind.java | 65 | ||||
-rw-r--r-- | javax/lang/model/element/TypeElement.java | 7 | ||||
-rw-r--r-- | javax/tools/ForwardingJavaFileObject.java | 21 | ||||
-rw-r--r-- | javax/tools/JavaFileObject.java | 26 | ||||
-rw-r--r-- | javax/tools/SimpleJavaFileObject.java | 27 |
8 files changed, 277 insertions, 0 deletions
@@ -1,3 +1,40 @@ +2012-12-27 Andrew John Hughes <gnu_andrew@member.fsf.org> + + * javax/lang/model/element/Element.java: + (getModifiers()): Added. + (getSimpleName()): Likewise. + * javax/lang/model/element/Modifier.java: + New enumeration. + (ABSTRACT): Added. + (FINAL): Likewise. + (NATIVE): Likewise. + (PRIVATE): Likewise. + (PROTECTED): Likewise. + (PUBLIC): Likewise. + (STATIC): Likewise. + (STRICTFP): Likewise. + (SYNCHRONIZED): Likewise. + (TRANSIENT): Likewise. + (VOLATILE): Likewise. + * javax/lang/model/element/NestingKind.java: + New enumeration. + (ANONYMOUS): Added. + (LOCAL): Likewise. + (MEMBER): Likewise. + (TOP_LEVEL): Likewise. + (isNested()): Implemented. + * javax/lang/model/element/TypeElement.java: + (getNestingKind()): Added. + * javax/tools/ForwardingJavaFileObject.java: + (getAccessLevel()): Implemented. + (getNestingKind()): Likewise. + * javax/tools/JavaFileObject.java: + (getAccessLevel()): Added. + (getNestingKind()): Likewise. + * javax/tools/SimpleJavaFileObject.java, + (getAccessLevel()): Implemented. + (getNestingKind()): Likewise. + 2012-12-19 Andrew John Hughes <gnu_andrew@member.fsf.org> * javax/annotation/processing/Messager.java: diff --git a/javax/lang/model/element/Element.java b/javax/lang/model/element/Element.java index aa01a8e91..507547600 100644 --- a/javax/lang/model/element/Element.java +++ b/javax/lang/model/element/Element.java @@ -40,6 +40,7 @@ package javax.lang.model.element; import java.lang.annotation.Annotation; import java.util.List; +import java.util.Set; import javax.lang.model.type.TypeMirror; @@ -187,4 +188,26 @@ public interface Element */ List<? extends AnnotationMirror> getAnnotationMirrors(); + /** + * Returns the modifiers attached to this element, other than + * annotations e.g. {@code public} or {@code abstract}. If + * there are no modifiers, an empty set is returned. + * + * @return the modifiers of this element. + */ + Set<Modifier> getModifiers(); + + /** + * Returns the simple name of this element i.e. without any + * package prefix. The simple name of a generic type is the + * same as that of the raw variant i.e. {@code Set<E>}'s simple + * name is {@code "Set"}. Constructors are named {@code "<init>"} + * and static initializers {@code "<clinit>"}. Unnamed packages, + * anonymous classes and instance initializers all return the + * empty string, {@code ""}. + * + * @return the simple name of this element. + */ + Name getSimpleName(); + } diff --git a/javax/lang/model/element/Modifier.java b/javax/lang/model/element/Modifier.java new file mode 100644 index 000000000..20da02364 --- /dev/null +++ b/javax/lang/model/element/Modifier.java @@ -0,0 +1,71 @@ +/* Modifier.java -- Represents a modifier on an element such as a method. + Copyright (C) 2012 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.lang.model.element; + +/** + * Represents a modifier on an element such as a class, method + * or field. Not all modifiers are applicable to all elements. + * + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + * @since 1.6 + */ +public enum Modifier +{ + /** Denotes an abstract class or method. */ + ABSTRACT, + /** Denotes a final class, method or field. */ + FINAL, + /** Denotes a native method. */ + NATIVE, + /** Denotes a private class, method or field. */ + PRIVATE, + /** Denotes a protected class, method or field. */ + PROTECTED, + /** Denotes a public class, method or field. */ + PUBLIC, + /** Denotes a static class, method or field. */ + STATIC, + /** Denotes a strictfp class or method. */ + STRICTFP, + /** Denotes a synchronized method. */ + SYNCHRONIZED, + /** Denotes a transient field. */ + TRANSIENT, + /** Denotes a volatile field. */ + VOLATILE; +} diff --git a/javax/lang/model/element/NestingKind.java b/javax/lang/model/element/NestingKind.java new file mode 100644 index 000000000..d98e4d993 --- /dev/null +++ b/javax/lang/model/element/NestingKind.java @@ -0,0 +1,65 @@ +/* NestingKind.java -- Represents the nesting level of an element. + Copyright (C) 2012 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.lang.model.element; + +/** + * Represents the level of nesting at which an element appears; + * top-level, member, local and anonymous. + * + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + * @since 1.6 + */ +public enum NestingKind +{ + ANONYMOUS, + LOCAL, + MEMBER, + TOP_LEVEL; + + /** + * Returns true if this constant represents an element + * that is nested inside another i.e. is not top-level. + * + * @return true if this is a constant for a nested level. + */ + public boolean isNested() + { + return this != TOP_LEVEL; + } + +} diff --git a/javax/lang/model/element/TypeElement.java b/javax/lang/model/element/TypeElement.java index ed11d3ea1..2e028fe40 100644 --- a/javax/lang/model/element/TypeElement.java +++ b/javax/lang/model/element/TypeElement.java @@ -116,4 +116,11 @@ public interface TypeElement */ Name getQualifiedName(); + /** + * Returns the nesting kind of this element. + * + * @return the nesting kind. + */ + NestingKind getNestingKind(); + } diff --git a/javax/tools/ForwardingJavaFileObject.java b/javax/tools/ForwardingJavaFileObject.java index fa058cc0d..2ed9cb359 100644 --- a/javax/tools/ForwardingJavaFileObject.java +++ b/javax/tools/ForwardingJavaFileObject.java @@ -37,6 +37,9 @@ exception statement from your version. */ package javax.tools; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.NestingKind; + /** * Forwards calls to a specified {@link JavaFileObject}. * @@ -78,4 +81,22 @@ public class ForwardingJavaFileObject<F extends JavaFileObject> return ((JavaFileObject) fileObject).isNameCompatible(simpleName, kind); } + /** + * @inheritDoc + */ + @Override + public Modifier getAccessLevel() + { + return ((JavaFileObject) fileObject).getAccessLevel(); + } + + /** + * @inheritDoc + */ + @Override + public NestingKind getNestingKind() + { + return ((JavaFileObject) fileObject).getNestingKind(); + } + } diff --git a/javax/tools/JavaFileObject.java b/javax/tools/JavaFileObject.java index 09bd3417d..e8293316a 100644 --- a/javax/tools/JavaFileObject.java +++ b/javax/tools/JavaFileObject.java @@ -37,6 +37,9 @@ exception statement from your version. */ package javax.tools; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.NestingKind; + /** * Abstraction for tools working with source and class files. * All methods may throw a {@link SecurityException}. All @@ -96,4 +99,27 @@ public interface JavaFileObject */ boolean isNameCompatible(String simpleName, Kind kind); + /** + * Provides a hint about the access level of this class, based + * on its modifiers. If the access level is unknown, or this + * file object does not represent a class file, {@code null} + * is returned. + * + * @return the access level. + */ + Modifier getAccessLevel(); + + /** + * Provides a hint about the nesting level of this class. + * It may return {@link NestingKind#MEMBER} instead of + * {@link NestingKind#LOCAL} or {@link NestingKind#ANONYMOUS} + * if it can not determine the exact type of nesting. If + * the nesting level is completely unknown, or this file + * object does not represent a class file, {@code null} + * is returned. + * + * @return the nesting level. + */ + NestingKind getNestingKind(); + } diff --git a/javax/tools/SimpleJavaFileObject.java b/javax/tools/SimpleJavaFileObject.java index e885798a7..452858f12 100644 --- a/javax/tools/SimpleJavaFileObject.java +++ b/javax/tools/SimpleJavaFileObject.java @@ -47,6 +47,9 @@ import java.io.Writer; import java.net.URI; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.NestingKind; + /** * Provides a simple implementation of many of the * {@link JavaFileObject} methods, thus giving a useful basis @@ -251,4 +254,28 @@ public class SimpleJavaFileObject return uri; } + /** + * This implementation does nothing and always + * returns {@code null}. + * + * @return null. + */ + @Override + public Modifier getAccessLevel() + { + return null; + } + + /** + * This implementation does nothing and always + * returns {@code null}. + * + * @return null. + */ + @Override + public NestingKind getNestingKind() + { + return null; + } + } |