Skip to content

Commit

Permalink
FORGE-889: Cannot parse package-info.java
Browse files Browse the repository at this point in the history
  • Loading branch information
myannou committed Jul 7, 2013
1 parent 5a9baff commit 4a5e4ee
Show file tree
Hide file tree
Showing 9 changed files with 866 additions and 36 deletions.
15 changes: 15 additions & 0 deletions api/src/main/java/org/jboss/forge/parser/java/JavaPackageInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* 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.parser.java;

/**
* Represents a Java Package Info.
*/
public interface JavaPackageInfo extends JavaSource<JavaPackageInfo>
{
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
*/
public enum SourceType
{
CLASS, INTERFACE, ENUM, ANNOTATION
CLASS, INTERFACE, ENUM, ANNOTATION, PACKAGEINFO
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@
import java.util.List;
import java.util.ListIterator;

import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.BodyDeclaration;
import org.eclipse.jdt.core.dom.IExtendedModifier;
import org.eclipse.jdt.core.dom.PackageDeclaration;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.jboss.forge.parser.java.Annotation;
import org.jboss.forge.parser.java.AnnotationTarget;
Expand All @@ -27,9 +29,9 @@
public class AnnotationAccessor<O extends JavaSource<O>, T>
{

public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target, final BodyDeclaration body)
public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target, final ASTNode body)
{
return addAnnotation(target, body.modifiers());
return addAnnotation(target, getModifiers(body));
}

public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target,
Expand All @@ -55,10 +57,10 @@ private Annotation<O> addAnnotation(final AnnotationTarget<O, T> target, final L
return annotation;
}

public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target, final BodyDeclaration body,
public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target, final ASTNode body,
final Class<?> clazz)
{
return addAnnotation(target, body.modifiers(), clazz.getName());
return addAnnotation(target, getModifiers(body), clazz.getName());
}

public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target,
Expand All @@ -68,10 +70,10 @@ public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target,
return addAnnotation(target, variableDeclaration.modifiers(), clazz.getName());
}

public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target, final BodyDeclaration body,
public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target, final ASTNode body,
final String className)
{
return addAnnotation(target, body.modifiers(), className);
return addAnnotation(target, getModifiers(body), className);
}

public Annotation<O> addAnnotation(final AnnotationTarget<O, T> target,
Expand All @@ -91,9 +93,9 @@ private Annotation<O> addAnnotation(final AnnotationTarget<O, T> target, final L
return addAnnotation(target, modifiers).setName(Types.toSimpleName(className));
}

public List<Annotation<O>> getAnnotations(final AnnotationTarget<O, T> target, final BodyDeclaration body)
public List<Annotation<O>> getAnnotations(final AnnotationTarget<O, T> target, final ASTNode body)
{
return getAnnotations(target, body.modifiers());
return getAnnotations(target, getModifiers(body));
}

public List<Annotation<O>> getAnnotations(final AnnotationTarget<O, T> target,
Expand All @@ -118,10 +120,10 @@ private List<Annotation<O>> getAnnotations(final AnnotationTarget<O, T> target,
return Collections.unmodifiableList(result);
}

public <E extends AnnotationTarget<O, T>> E removeAnnotation(final E target, final BodyDeclaration body,
public <E extends AnnotationTarget<O, T>> E removeAnnotation(final E target, final ASTNode body,
final Annotation<O> annotation)
{
return removeAnnotation(target, body.modifiers(), annotation);
return removeAnnotation(target, getModifiers(body), annotation);
}

public <E extends AnnotationTarget<O, T>> E removeAnnotation(final E target,
Expand All @@ -145,10 +147,10 @@ private <E extends AnnotationTarget<O, T>> E removeAnnotation(final E target, fi
return target;
}

public <E extends AnnotationTarget<O, T>> boolean hasAnnotation(final E target, final BodyDeclaration body,
public <E extends AnnotationTarget<O, T>> boolean hasAnnotation(final E target, final ASTNode body,
final String type)
{
return hasAnnotation(target, body.modifiers(), type);
return hasAnnotation(target, getModifiers(body), type);
}

public <E extends AnnotationTarget<O, T>> boolean hasAnnotation(final E target,
Expand Down Expand Up @@ -176,10 +178,10 @@ private <E extends AnnotationTarget<O, T>> boolean hasAnnotation(final E target,
return false;
}

public Annotation<O> getAnnotation(final AnnotationTarget<O, T> target, final BodyDeclaration body,
public Annotation<O> getAnnotation(final AnnotationTarget<O, T> target, final ASTNode body,
final Class<? extends java.lang.annotation.Annotation> type)
{
return getAnnotation(target, body.modifiers(), type.getName());
return getAnnotation(target, getModifiers(body), type.getName());
}

public Annotation<O> getAnnotation(final AnnotationTarget<O, T> target,
Expand All @@ -189,9 +191,9 @@ public Annotation<O> getAnnotation(final AnnotationTarget<O, T> target,
return getAnnotation(target, variableDeclaration.modifiers(), type.getName());
}

public Annotation<O> getAnnotation(final AnnotationTarget<O, T> target, final BodyDeclaration body, final String type)
public Annotation<O> getAnnotation(final AnnotationTarget<O, T> target, final ASTNode body, final String type)
{
return getAnnotation(target, body.modifiers(), type);
return getAnnotation(target, getModifiers(body), type);
}

public Annotation<O> getAnnotation(final AnnotationTarget<O, T> target,
Expand All @@ -212,4 +214,17 @@ private Annotation<O> getAnnotation(final AnnotationTarget<O, T> target, final L
}
return null;
}

private List<?> getModifiers(final ASTNode body)
{
if (body instanceof BodyDeclaration)
{
return ((BodyDeclaration) body).modifiers();
}
else if (body instanceof PackageDeclaration)
{
return ((PackageDeclaration) body).annotations();
}
return Collections.emptyList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,17 @@
package org.jboss.forge.parser.java.ast;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.BodyDeclaration;
import org.eclipse.jdt.core.dom.Modifier;
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;

public class ModifierAccessor
{
public boolean hasModifier(BodyDeclaration body, final ModifierKeyword modifier)
public boolean hasModifier(ASTNode body, final ModifierKeyword modifier)
{
boolean result = false;
List<Modifier> modifiers = getModifiers(body);
Expand All @@ -29,10 +31,10 @@ public boolean hasModifier(BodyDeclaration body, final ModifierKeyword modifier)
return result;
}

private List<Modifier> getModifiers(BodyDeclaration body)
private List<Modifier> getModifiers(ASTNode body)
{
List<Modifier> result = new ArrayList<Modifier>();
List<?> modifiers = body.modifiers();
List<?> modifiers = getInternalModifiers(body);
for (Object m : modifiers)
{
if (m instanceof Modifier)
Expand All @@ -44,8 +46,7 @@ private List<Modifier> getModifiers(BodyDeclaration body)
return result;
}

@SuppressWarnings("unchecked")
public List<Modifier> clearVisibility(BodyDeclaration body)
public List<Modifier> clearVisibility(ASTNode body)
{
List<Modifier> modifiers = getModifiers(body);

Expand All @@ -58,18 +59,16 @@ public List<Modifier> clearVisibility(BodyDeclaration body)
}
}

body.modifiers().removeAll(toBeRemoved);
getInternalModifiers(body).removeAll(toBeRemoved);
return modifiers;
}

@SuppressWarnings("unchecked")
public void addModifier(BodyDeclaration body, ModifierKeyword keyword)
public void addModifier(ASTNode body, ModifierKeyword keyword)
{
body.modifiers().add(body.getAST().newModifier(keyword));
getInternalModifiers(body).add(body.getAST().newModifier(keyword));
}

@SuppressWarnings("unchecked")
public void removeModifier(BodyDeclaration body, ModifierKeyword keyword)
public void removeModifier(ASTNode body, ModifierKeyword keyword)
{
List<Modifier> modifiers = getModifiers(body);

Expand All @@ -82,6 +81,19 @@ public void removeModifier(BodyDeclaration body, ModifierKeyword keyword)
}
}

body.modifiers().removeAll(toBeRemoved);
getInternalModifiers(body).removeAll(toBeRemoved);
}

@SuppressWarnings("unchecked")
private List<Modifier> getInternalModifiers(final ASTNode body)
{
if (body instanceof BodyDeclaration)
{
return ((BodyDeclaration) body).modifiers();
}
else
{
return Collections.emptyList();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
import org.eclipse.jdt.core.dom.EnumDeclaration;
import org.eclipse.jdt.core.dom.PackageDeclaration;
import org.eclipse.jdt.core.dom.TypeDeclaration;

/**
Expand All @@ -22,6 +23,8 @@ public class TypeDeclarationFinderVisitor extends ASTVisitor
{
private List<AbstractTypeDeclaration> declarations = new ArrayList<AbstractTypeDeclaration>();

private PackageDeclaration packageDeclaration;

@Override
public boolean visit(final TypeDeclaration node)
{
Expand All @@ -43,6 +46,18 @@ public boolean visit(final EnumDeclaration node)
return super.visit(node);
}

@Override
public boolean visit(PackageDeclaration node)
{
packageDeclaration = node;
return super.visit(node);
}

public PackageDeclaration getPackageDeclaration()
{
return packageDeclaration;
}

public List<AbstractTypeDeclaration> getTypeDeclarations()
{
return declarations;
Expand Down
Loading

0 comments on commit 4a5e4ee

Please sign in to comment.