Index: src/main/org/codehaus/groovy/classgen/ExtendedVerifier.java =================================================================== --- src/main/org/codehaus/groovy/classgen/ExtendedVerifier.java (revision 16713) +++ src/main/org/codehaus/groovy/classgen/ExtendedVerifier.java Fri Jun 19 12:15:37 EST 2009 @@ -24,6 +24,7 @@ import org.codehaus.groovy.control.SourceUnit; import org.codehaus.groovy.control.messages.SyntaxErrorMessage; import org.codehaus.groovy.syntax.SyntaxException; +import org.objectweb.asm.Opcodes; /** * A specialized Groovy AST visitor meant to perform additional verifications upon the @@ -117,9 +118,26 @@ + " is not allowed on element " + AnnotationNode.targetToName(target), visited); } + visitDeprecation(node, visited); } } + private void visitDeprecation(AnnotatedNode node, AnnotationNode visited) { + if (visited.getClassNode().getTypeClass() == Deprecated.class) { + // TODO addWarning? or set flag to indicate we found a deprecated class? + if (node instanceof MethodNode) { + MethodNode mn = (MethodNode) node; + mn.setModifiers(mn.getModifiers() | Opcodes.ACC_DEPRECATED); + } else if (node instanceof FieldNode) { + FieldNode fn = (FieldNode) node; + fn.setModifiers(fn.getModifiers() | Opcodes.ACC_DEPRECATED); + } else if (node instanceof ClassNode) { + ClassNode cn = (ClassNode) node; + cn.setModifiers(cn.getModifiers() | Opcodes.ACC_DEPRECATED); + } + } + } + /** * Resolve metadata and details of the annotation. * Index: src/main/org/codehaus/groovy/ast/ClassNode.java =================================================================== --- src/main/org/codehaus/groovy/ast/ClassNode.java (revision 16296) +++ src/main/org/codehaus/groovy/ast/ClassNode.java Fri Jun 19 12:15:37 EST 2009 @@ -123,7 +123,7 @@ public static ClassNode SUPER = new ClassNode(Object.class); private String name; - private final int modifiers; + private int modifiers; private ClassNode[] interfaces; private MixinNode[] mixins; private List constructors = new ArrayList(); @@ -450,6 +450,10 @@ return redirect().modifiers; } + public void setModifiers(int modifiers) { + this.modifiers = modifiers; + } + public List getProperties() { return redirect().properties; }