From 816c028cd5fb0c7411d33beff92a86f2bd7814f1 Mon Sep 17 00:00:00 2001 From: Matt Benson Date: Mon, 5 Aug 2013 10:54:57 -0500 Subject: [PATCH] enumConstants can host annotations --- .../jboss/forge/parser/java/EnumConstant.java | 3 +- .../parser/java/impl/EnumConstantImpl.java | 71 +++++++++++++++++++ .../java/EnumConstantAnnotationTest.java | 31 ++++++++ .../java/MockAnnotatedEnumConstant.java | 17 +++++ 4 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 impl/src/test/java/org/jboss/forge/test/parser/java/EnumConstantAnnotationTest.java create mode 100644 impl/src/test/resources/org/jboss/forge/grammar/java/MockAnnotatedEnumConstant.java diff --git a/api/src/main/java/org/jboss/forge/parser/java/EnumConstant.java b/api/src/main/java/org/jboss/forge/parser/java/EnumConstant.java index 97e156b9..67e2b3f1 100644 --- a/api/src/main/java/org/jboss/forge/parser/java/EnumConstant.java +++ b/api/src/main/java/org/jboss/forge/parser/java/EnumConstant.java @@ -9,7 +9,8 @@ import org.jboss.forge.parser.Internal; import org.jboss.forge.parser.Origin; -public interface EnumConstant> extends Internal, Origin +public interface EnumConstant> extends Internal, Origin, + AnnotationTarget> { /** * Get this enum constant name. diff --git a/impl/src/main/java/org/jboss/forge/parser/java/impl/EnumConstantImpl.java b/impl/src/main/java/org/jboss/forge/parser/java/impl/EnumConstantImpl.java index 8a78fe96..8ebf4759 100644 --- a/impl/src/main/java/org/jboss/forge/parser/java/impl/EnumConstantImpl.java +++ b/impl/src/main/java/org/jboss/forge/parser/java/impl/EnumConstantImpl.java @@ -12,12 +12,15 @@ import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.EnumConstantDeclaration; import org.jboss.forge.parser.JavaParser; +import org.jboss.forge.parser.java.Annotation; import org.jboss.forge.parser.java.EnumConstant; import org.jboss.forge.parser.java.JavaEnum; import org.jboss.forge.parser.java.JavaSource; +import org.jboss.forge.parser.java.ast.AnnotationAccessor; public class EnumConstantImpl> implements EnumConstant { + private final AnnotationAccessor> annotations = new AnnotationAccessor>(); private O parent; private AST ast; private EnumConstantDeclaration enumConstant; @@ -75,4 +78,72 @@ public O getOrigin() { return parent; } + + /* + * Annotation Modifiers + */ + + @Override + public Annotation addAnnotation() + { + return annotations.addAnnotation(this, enumConstant); + } + + @Override + public Annotation addAnnotation(final Class clazz) + { + if (!parent.hasImport(clazz)) + { + parent.addImport(clazz); + } + return annotations.addAnnotation(this, enumConstant, clazz.getSimpleName()); + } + + @Override + public Annotation addAnnotation(final String className) + { + return annotations.addAnnotation(this, enumConstant, className); + } + + @Override + public List> getAnnotations() + { + return annotations.getAnnotations(this, enumConstant); + } + + @Override + public boolean hasAnnotation(final Class type) + { + return annotations.hasAnnotation(this, enumConstant, type.getName()); + } + + @Override + public boolean hasAnnotation(final String type) + { + return annotations.hasAnnotation(this, enumConstant, type); + } + + @Override + public EnumConstant removeAnnotation(final Annotation annotation) + { + return annotations.removeAnnotation(this, enumConstant, annotation); + } + + @Override + public Annotation getAnnotation(final Class type) + { + return annotations.getAnnotation(this, enumConstant, type); + } + + @Override + public Annotation getAnnotation(final String type) + { + return annotations.getAnnotation(this, enumConstant, type); + } + + @Override + public String toString() + { + return enumConstant.toString(); + } } diff --git a/impl/src/test/java/org/jboss/forge/test/parser/java/EnumConstantAnnotationTest.java b/impl/src/test/java/org/jboss/forge/test/parser/java/EnumConstantAnnotationTest.java new file mode 100644 index 00000000..2b7aa54a --- /dev/null +++ b/impl/src/test/java/org/jboss/forge/test/parser/java/EnumConstantAnnotationTest.java @@ -0,0 +1,31 @@ +/* + * Copyright 2012 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.jboss.forge.test.parser.java; + +import java.io.InputStream; + +import org.jboss.forge.parser.JavaParser; +import org.jboss.forge.parser.java.EnumConstant; +import org.jboss.forge.parser.java.JavaEnum; +import org.jboss.forge.test.parser.java.common.AnnotationTest; + +/** + * @author Lincoln Baxter, III + */ +public class EnumConstantAnnotationTest extends AnnotationTest> +{ + @SuppressWarnings("resource") + @Override + public void resetTests() + { + InputStream stream = EnumConstantAnnotationTest.class + .getResourceAsStream("/org/jboss/forge/grammar/java/MockAnnotatedEnumConstant.java"); + EnumConstant field = JavaParser.parse(JavaEnum.class, stream).getEnumConstants().get(0); + setTarget(field); + } + +} diff --git a/impl/src/test/resources/org/jboss/forge/grammar/java/MockAnnotatedEnumConstant.java b/impl/src/test/resources/org/jboss/forge/grammar/java/MockAnnotatedEnumConstant.java new file mode 100644 index 00000000..55e9b598 --- /dev/null +++ b/impl/src/test/resources/org/jboss/forge/grammar/java/MockAnnotatedEnumConstant.java @@ -0,0 +1,17 @@ +package org.jboss.forge.grammar.java; + +import org.jboss.forge.test.grammar.java.common.MockAnnotation; +import org.jboss.forge.test.grammar.java.common.MockNestingAnnotation.MockNestedAnnotation; +import org.jboss.forge.test.grammar.java.common.MockNestingAnnotation; + +import static org.jboss.forge.test.grammar.java.common.MockEnum.FOO; + +public enum MockAnnotatedEnumConstant +{ + @Deprecated + @SuppressWarnings("deprecation") + @SuppressWarnings(value = "unchecked") + @MockAnnotation(FOO) + @MockNestingAnnotation(@MockNestedAnnotation) + SINGLE_CONSTANT; +}