diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2012-12-28 18:16:18 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2012-12-28 18:16:18 +0000 |
commit | 2190710f0c2ddaa65e55ba4e31bcd200bcc56d64 (patch) | |
tree | e4b432ca2cec50ba1048b2b9557883b3c3b3f1d7 /javax | |
parent | 621cce7fdf0e325d8789dec762e448844ba0feae (diff) | |
download | classpath-2190710f0c2ddaa65e55ba4e31bcd200bcc56d64.tar.gz |
Add missing Modifier and NestingKind enumerations and associated methods.
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.
Signed-off-by: Andrew John Hughes <gnu_andrew@member.fsf.org>
Diffstat (limited to 'javax')
-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 |
7 files changed, 240 insertions, 0 deletions
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; + } + } |