From 9366fe08625ceb75692b53cdb9be19dff2ad56c6 Mon Sep 17 00:00:00 2001 From: chiba Date: Thu, 25 Aug 2005 05:08:05 +0000 Subject: Array initializer supports and better annotation supports. git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@196 30ef5769-5b8d-40dd-aea6-55b5d6557bb3 --- src/main/javassist/CtBehavior.java | 16 ++++ src/main/javassist/CtClass.java | 25 +++++- src/main/javassist/CtClassType.java | 45 +++++++++++ src/main/javassist/CtField.java | 16 ++++ src/main/javassist/CtMember.java | 12 +++ .../javassist/bytecode/annotation/Annotation.java | 19 ++++- .../bytecode/annotation/AnnotationImpl.java | 91 ++++++++++++++++++++++ .../bytecode/annotation/AnnotationMemberValue.java | 14 ++++ .../bytecode/annotation/ArrayMemberValue.java | 22 ++++++ .../bytecode/annotation/BooleanMemberValue.java | 9 +++ .../bytecode/annotation/ByteMemberValue.java | 9 +++ .../bytecode/annotation/CharMemberValue.java | 9 +++ .../bytecode/annotation/ClassMemberValue.java | 19 ++++- .../bytecode/annotation/DoubleMemberValue.java | 11 ++- .../bytecode/annotation/EnumMemberValue.java | 20 +++++ .../bytecode/annotation/FloatMemberValue.java | 11 ++- .../bytecode/annotation/IntegerMemberValue.java | 9 +++ .../bytecode/annotation/LongMemberValue.java | 9 +++ .../javassist/bytecode/annotation/MemberValue.java | 16 ++++ .../bytecode/annotation/ShortMemberValue.java | 9 +++ .../bytecode/annotation/StringMemberValue.java | 9 +++ src/main/javassist/compiler/CodeGen.java | 13 +++- src/main/javassist/compiler/MemberCodeGen.java | 70 ++++++++++++++--- src/main/javassist/compiler/Parser.java | 17 +++- src/main/javassist/compiler/TypeChecker.java | 19 ++++- src/main/javassist/compiler/ast/ArrayInit.java | 15 ++++ src/main/javassist/compiler/ast/NewExpr.java | 8 +- src/main/javassist/compiler/ast/Visitor.java | 1 + 28 files changed, 513 insertions(+), 30 deletions(-) create mode 100644 src/main/javassist/bytecode/annotation/AnnotationImpl.java create mode 100644 src/main/javassist/compiler/ast/ArrayInit.java (limited to 'src') diff --git a/src/main/javassist/CtBehavior.java b/src/main/javassist/CtBehavior.java index 791457c4..a8baaf8c 100644 --- a/src/main/javassist/CtBehavior.java +++ b/src/main/javassist/CtBehavior.java @@ -80,6 +80,22 @@ public abstract class CtBehavior extends CtMember { methodInfo.setAccessFlags(AccessFlag.of(mod)); } + /** + * Returns the annotations associated with this method or constructor. + * + * @return an array of annotation-type objects. + * @see CtMember#getAnnotations() + */ + public Object[] getAnnotations() throws ClassNotFoundException { + MethodInfo mi = getMethodInfo2(); + AnnotationsAttribute ainfo = (AnnotationsAttribute) + mi.getAttribute(AnnotationsAttribute.invisibleTag); + AnnotationsAttribute ainfo2 = (AnnotationsAttribute) + mi.getAttribute(AnnotationsAttribute.visibleTag); + return CtClassType.toAnnotationType(getDeclaringClass().getClassPool(), + ainfo, ainfo2); + } + /** * Obtains parameter types of this method/constructor. */ diff --git a/src/main/javassist/CtClass.java b/src/main/javassist/CtClass.java index b2d6ff10..a96701b2 100644 --- a/src/main/javassist/CtClass.java +++ b/src/main/javassist/CtClass.java @@ -29,7 +29,15 @@ import javassist.bytecode.Descriptor; import javassist.bytecode.Opcode; import javassist.expr.ExprEditor; -// Subclasses of CtClass: CtClassType, CtPrimitiveType, and CtArray +/* Note: + * + * This class is an abstract class and several methods just return null + * or throw an exception. Those methods are overridden in subclasses + * of this class. Read the source code of CtClassType if you are + * interested in the implementation of Javassist. + * + * Subclasses of CtClass are CtClassType, CtPrimitiveType, and CtArray. + */ /** * An instance of CtClass represents a class. @@ -418,6 +426,19 @@ public abstract class CtClass { return 0; } + /** + * Returns the annotations associated with this class. + * For example, if an annotation @Author is associated + * with this class, the returned array contains an Author + * object. The member values can be obtained by calling methods on + * the Author object. + * + * @return an array of annotation-type objects. + */ + public Object[] getAnnotations() throws ClassNotFoundException { + return new Object[0]; + } + /** * Sets the modifiers. * @@ -872,7 +893,7 @@ public abstract class CtClass { *

This is a convenient method mainly for adding * a user-defined attribute. For dealing with attributes, see the * javassist.bytecode package. For example, the following - * expression adds an attribute of a class file. + * expression adds an attribute info to a class file. * *