Skip to content

Commit

Permalink
WINDUP-306: forge.roaster.ParserException halts Windup execution
Browse files Browse the repository at this point in the history
  • Loading branch information
jsight committed Sep 26, 2014
1 parent 15c791d commit 511d036
Show file tree
Hide file tree
Showing 7 changed files with 140 additions and 27 deletions.
Expand Up @@ -140,8 +140,17 @@ public void perform(GraphRewrite event, EvaluationContext context, FileModel pay
}
}

// check for duplicate adds first
for (FileModel existingFileModel : classification.getFileModels())
{
if (existingFileModel.asVertex().getId().equals(payload.asVertex().getId()))
{
log.info("Classification already added to " + payload.getPrettyPathWithinProject() + " [" + this
+ "] -- not adding again");
return;
}
}
classification.addFileModel(payload);

log.info("Classification added to " + payload.getPrettyPathWithinProject() + " [" + this + "] ");
}

Expand Down
Expand Up @@ -36,7 +36,7 @@ public Configuration getConfiguration(GraphContext context)
.begin()

.addRule()
.when(JavaClass.references("org.jboss.seam"))
.when(JavaClass.references("org.jboss.seam.*"))
.perform(Classification.as("SEAM Component").with(
Link.to("Seam 2 to Seam 3 Migration Notes","http://www.seamframework.org/Seam3/Seam2ToSeam3MigrationNotes"))
.with(Link
Expand Down
Expand Up @@ -102,7 +102,7 @@ public boolean evaluate(Object first, Object second)

};
pipeline.as("result").out(FileReferenceModel.FILE_MODEL)
.out(JavaSourceFileModel.PROPERTY_JAVA_CLASS_MODEL)
.out(JavaSourceFileModel.JAVA_CLASS_MODEL)
.has(JavaClassModel.PROPERTY_QUALIFIED_NAME, regexPredicate, fileRegex).back("result");
}
};
Expand Down
Expand Up @@ -37,13 +37,13 @@ public interface JavaClassFileModel extends FileModel
/**
* Contains the {@link JavaClassModel} represented by this .class file.
*/
@Adjacency(label = JavaSourceFileModel.PROPERTY_JAVA_CLASS_MODEL, direction = Direction.OUT)
@Adjacency(label = JavaSourceFileModel.JAVA_CLASS_MODEL, direction = Direction.OUT)
public void setJavaClass(JavaClassModel model);

/**
* Contains the {@link JavaClassModel} represented by this .class file.
*/
@Adjacency(label = JavaSourceFileModel.PROPERTY_JAVA_CLASS_MODEL, direction = Direction.OUT)
@Adjacency(label = JavaSourceFileModel.JAVA_CLASS_MODEL, direction = Direction.OUT)
public JavaClassModel getJavaClass();

/**
Expand Down
Expand Up @@ -8,21 +8,42 @@
import com.tinkerpop.frames.Property;
import com.tinkerpop.frames.modules.typedgraph.TypeValue;

@TypeValue("JavaSourceFileModel")
/**
* Represents a source ".java" file on disk.
*
* @author jsightler <jesse.sightler@gmail.com>
*/
@TypeValue(JavaSourceFileModel.TYPE)
public interface JavaSourceFileModel extends FileModel, SourceFileModel
{
public static final String PROPERTY_PACKAGE_NAME = "packageName";
public static final String PROPERTY_JAVA_CLASS_MODEL = "javaClass";
public static final String UNPARSEABLE_JAVA_CLASSIFICATION = "Unparseable Java File";
public static final String UNPARSEABLE_JAVA_DESCRIPTION = "This Java file could not be parsed";

@Property(PROPERTY_PACKAGE_NAME)
public static final String TYPE = "JavaSourceFileModel";
public static final String PACKAGE_NAME = "packageName";
public static final String JAVA_CLASS_MODEL = "javaClass";

/**
* Contains the Java package name
*/
@Property(PACKAGE_NAME)
public String getPackageName();

@Property(PROPERTY_PACKAGE_NAME)
/**
* Contains the Java package name
*/
@Property(PACKAGE_NAME)
public void setPackageName(String packageName);

@Adjacency(label = PROPERTY_JAVA_CLASS_MODEL, direction = Direction.OUT)
/**
* Lists the {@link JavaClassModel}s contained within this source file
*/
@Adjacency(label = JAVA_CLASS_MODEL, direction = Direction.OUT)
public Iterable<JavaClassModel> getJavaClasses();

@Adjacency(label = PROPERTY_JAVA_CLASS_MODEL, direction = Direction.OUT)
/**
* Lists the {@link JavaClassModel}s contained within this source file
*/
@Adjacency(label = JAVA_CLASS_MODEL, direction = Direction.OUT)
public void addJavaClass(JavaClassModel javaClassModel);
}
Expand Up @@ -8,8 +8,11 @@
import java.util.List;

import org.jboss.forge.furnace.util.Strings;
import org.jboss.forge.roaster.ParserException;
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.forge.roaster.model.Extendable;
import org.jboss.forge.roaster.model.InterfaceCapable;
import org.jboss.forge.roaster.model.source.JavaSource;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.config.RulePhase;
import org.jboss.windup.config.WindupRuleProvider;
Expand All @@ -21,6 +24,7 @@
import org.jboss.windup.graph.model.resource.FileModel;
import org.jboss.windup.graph.service.GraphService;
import org.jboss.windup.reporting.model.TechnologyTagLevel;
import org.jboss.windup.reporting.service.ClassificationService;
import org.jboss.windup.reporting.service.TechnologyTagService;
import org.jboss.windup.rules.apps.java.model.JavaClassModel;
import org.jboss.windup.rules.apps.java.model.JavaSourceFileModel;
Expand Down Expand Up @@ -124,11 +128,24 @@ public void perform(GraphRewrite event, EvaluationContext context, FileModel pay
}
}

private void addParsedClassToFile(FileInputStream fis, GraphContext context, JavaSourceFileModel classFileModel)
private void addParsedClassToFile(FileInputStream fis, GraphContext context, JavaSourceFileModel sourceFileModel)
{
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, fis);
String packageName = javaClass.getPackage();
String qualifiedName = javaClass.getQualifiedName();
JavaSource<?> javaSource;
try
{
javaSource = Roaster.parse(JavaSource.class, fis);
}
catch (ParserException e)
{
ClassificationService classificationService = new ClassificationService(context);
classificationService.attachClassification(sourceFileModel,
JavaSourceFileModel.UNPARSEABLE_JAVA_CLASSIFICATION,
JavaSourceFileModel.UNPARSEABLE_JAVA_DESCRIPTION);
return;
}

String packageName = javaSource.getPackage();
String qualifiedName = javaSource.getQualifiedName();

String simpleName = qualifiedName;
if (packageName != null && !packageName.equals("") && simpleName != null)
Expand All @@ -142,23 +159,31 @@ private void addParsedClassToFile(FileInputStream fis, GraphContext context, Jav
javaClassModel.setSimpleName(simpleName);
javaClassModel.setPackageName(packageName);
javaClassModel.setQualifiedName(qualifiedName);
javaClassModel.setClassFile(classFileModel);
javaClassModel.setClassFile(sourceFileModel);

List<String> interfaceNames = javaClass.getInterfaces();
if (interfaceNames != null)
if (javaSource instanceof InterfaceCapable)
{
for (String iface : interfaceNames)
InterfaceCapable interfaceCapable = (InterfaceCapable) javaSource;
List<String> interfaceNames = interfaceCapable.getInterfaces();
if (interfaceNames != null)
{
JavaClassModel interfaceModel = javaClassService.getOrCreate(iface);
javaClassModel.addImplements(interfaceModel);
for (String iface : interfaceNames)
{
JavaClassModel interfaceModel = javaClassService.getOrCreate(iface);
javaClassModel.addImplements(interfaceModel);
}
}
}

String superclassName = javaClass.getSuperType();
if (Strings.isNullOrEmpty(superclassName))
javaClassModel.setExtends(javaClassService.getOrCreate(superclassName));
if (javaSource instanceof Extendable)
{
Extendable<?> extendable = (Extendable<?>) javaSource;
String superclassName = extendable.getSuperType();
if (Strings.isNullOrEmpty(superclassName))
javaClassModel.setExtends(javaClassService.getOrCreate(superclassName));
}

classFileModel.addJavaClass(javaClassModel);
sourceFileModel.addJavaClass(javaClassModel);
}

}
Expand Down
@@ -0,0 +1,58 @@
package org.jboss.windup.tests.application;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.arquillian.AddonDependency;
import org.jboss.forge.arquillian.Dependencies;
import org.jboss.forge.arquillian.archive.ForgeArchive;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.windup.graph.GraphContext;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class WindupArchitectureSeamBookingSourceTest extends WindupArchitectureTest
{
@Deployment
@Dependencies({
@AddonDependency(name = "org.jboss.windup.graph:windup-graph"),
@AddonDependency(name = "org.jboss.windup.exec:windup-exec"),
@AddonDependency(name = "org.jboss.windup.rules.apps:rules-java"),
@AddonDependency(name = "org.jboss.windup.rules.apps:rules-java-ee"),
@AddonDependency(name = "org.jboss.windup.utils:utils"),
@AddonDependency(name = "org.jboss.windup.tests:test-util"),
@AddonDependency(name = "org.jboss.windup.reporting:windup-reporting"),
@AddonDependency(name = "org.jboss.windup.ext:windup-config-groovy"),
@AddonDependency(name = "org.jboss.forge.furnace.container:cdi"),
})
public static ForgeArchive getDeployment()
{
ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class)
.addBeansXML()
.addClass(WindupArchitectureTest.class)
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.windup.graph:windup-graph"),
AddonDependencyEntry.create("org.jboss.windup.exec:windup-exec"),
AddonDependencyEntry.create("org.jboss.windup.rules.apps:rules-java"),
AddonDependencyEntry.create("org.jboss.windup.rules.apps:rules-java-ee"),
AddonDependencyEntry.create("org.jboss.windup.utils:utils"),
AddonDependencyEntry.create("org.jboss.windup.tests:test-util"),
AddonDependencyEntry.create("org.jboss.windup.reporting:windup-reporting"),
AddonDependencyEntry.create("org.jboss.windup.ext:windup-config-groovy"),
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi")
);
return archive;
}

@Test
public void testRunWindupSeamBookingSourceMode() throws Exception
{
try (GraphContext context = createGraphContext())
{
// The test-files folder in the project root dir.
super.runTest(context, "../test-files/seam-booking-5.2", true);
}
}

}

0 comments on commit 511d036

Please sign in to comment.