Skip to content

Commit

Permalink
ROASTER-47: Added JavaDoc support for EnumConstants
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Dec 15, 2014
1 parent ea3e6ae commit 1f6c132
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
/**
* Represents one of the constant members of a {@link JavaEnumSource}.
*/
public interface EnumConstantSource extends EnumConstant<JavaEnumSource>, AnnotationTargetSource<JavaEnumSource, EnumConstantSource>,
NamedSource<EnumConstantSource>
public interface EnumConstantSource extends EnumConstant<JavaEnumSource>,
AnnotationTargetSource<JavaEnumSource, EnumConstantSource>,
NamedSource<EnumConstantSource>, JavaDocCapableSource<EnumConstantSource>
{
/**
* Represents the anonymous subclass "body" of an {@link EnumConstantSource}.
Expand All @@ -35,4 +36,5 @@ public interface Body extends EnumConstant.ReadBody<Body>, JavaSource<Body>, Fie
* Remove the {@link Body} of this enum constant.
*/
EnumConstantSource removeBody();

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.Javadoc;
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.Annotation;
import org.jboss.forge.roaster.model.ast.AnnotationAccessor;
import org.jboss.forge.roaster.model.source.AnnotationSource;
import org.jboss.forge.roaster.model.source.EnumConstantSource;
import org.jboss.forge.roaster.model.source.JavaDocSource;
import org.jboss.forge.roaster.model.source.JavaEnumSource;
import org.jboss.forge.roaster.model.util.Strings;

Expand All @@ -34,13 +36,15 @@ private void init(final JavaEnumSource parent)
{
this.parent = parent;
this.ast = ((ASTNode) parent.getInternal()).getAST();

}

public EnumConstantImpl(final JavaEnumSource parent) {

public EnumConstantImpl(final JavaEnumSource parent)
{
init(parent);
this.enumConstant = ast.newEnumConstantDeclaration();
}

public EnumConstantImpl(final JavaEnumSource parent, final String declaration)
{
init(parent);
Expand All @@ -52,7 +56,7 @@ public EnumConstantImpl(final JavaEnumSource parent, final String declaration)
EnumConstantDeclaration subtree = (EnumConstantDeclaration) ASTNode.copySubtree(ast, newField);
this.enumConstant = subtree;
}

public EnumConstantImpl(final JavaEnumSource parent, final Object internal)
{
init(parent);
Expand Down Expand Up @@ -88,7 +92,8 @@ public JavaEnumSource getOrigin()
public List<String> getConstructorArguments()
{
final List<String> result = new ArrayList<String>();
for (Object o : enumConstant.arguments()) {
for (Object o : enumConstant.arguments())
{
result.add(o.toString());
}
return Collections.unmodifiableList(result);
Expand Down Expand Up @@ -190,6 +195,31 @@ public AnnotationSource<JavaEnumSource> getAnnotation(final String type)
return annotations.getAnnotation(this, enumConstant, type);
}

@Override
public JavaDocSource<EnumConstantSource> getJavaDoc()
{
Javadoc javadoc = enumConstant.getJavadoc();
if (javadoc == null)
{
javadoc = enumConstant.getAST().newJavadoc();
enumConstant.setJavadoc(javadoc);
}
return new JavaDocImpl<EnumConstantSource>(this, javadoc);
}

@Override
public boolean hasJavaDoc()
{
return enumConstant.getJavadoc() != null;
}

@Override
public EnumConstantSource removeJavaDoc()
{
enumConstant.setJavadoc(null);
return this;
}

@Override
public boolean equals(Object obj)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.JavaDoc;
import org.jboss.forge.roaster.model.JavaDocTag;
import org.jboss.forge.roaster.model.source.EnumConstantSource;
import org.jboss.forge.roaster.model.source.FieldSource;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.forge.roaster.model.source.JavaDocSource;
import org.jboss.forge.roaster.model.source.JavaEnumSource;
import org.jboss.forge.roaster.model.source.MethodSource;
import org.junit.Assert;
import org.junit.Test;
Expand Down Expand Up @@ -148,4 +150,22 @@ public void testJavaDocMethod() throws Exception
Assert.assertEquals(expected, javaDoc.getFullText());
}

@Test
public void testJavaDocEnumConstant() throws Exception
{
String text =
"public enum MyEnum {"
+ "/**" + LINE_SEPARATOR
+ " * Do Something" + LINE_SEPARATOR
+ " * @author George Gastaldi" + LINE_SEPARATOR + " */" + LINE_SEPARATOR + ""
+ "MY_CONSTANT;}";
JavaEnumSource javaEnum = Roaster.parse(JavaEnumSource.class, text);
Assert.assertFalse(javaEnum.hasJavaDoc());
EnumConstantSource enumConstant = javaEnum.getEnumConstant("MY_CONSTANT");
Assert.assertTrue(enumConstant.hasJavaDoc());
JavaDocSource<EnumConstantSource> javaDoc = enumConstant.getJavaDoc();
String expected = "Do Something" + LINE_SEPARATOR + "@author George Gastaldi";
Assert.assertEquals(expected, javaDoc.getFullText());
}

}

0 comments on commit 1f6c132

Please sign in to comment.