Skip to content

Commit

Permalink
Merge pull request #234 from mbriskar/WINDUP-265
Browse files Browse the repository at this point in the history
WINDUP-265: Create JavaClass metamodel for source files also
  • Loading branch information
jsight committed Sep 5, 2014
2 parents f96b4dd + b423296 commit bf3f331
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 11 deletions.
Expand Up @@ -21,9 +21,9 @@ public interface JavaClassFileModel extends FileModel
@Property(PROPERTY_PACKAGE_NAME)
public void setPackageName(String packageName);

@Adjacency(label = "javaClass", direction = Direction.OUT)
@Adjacency(label = JavaSourceFileModel.PROPERTY_JAVA_CLASS_MODEL, direction = Direction.OUT)
public void setJavaClass(JavaClassModel model);

@Adjacency(label = "javaClass", direction = Direction.OUT)
@Adjacency(label = JavaSourceFileModel.PROPERTY_JAVA_CLASS_MODEL, direction = Direction.OUT)
public JavaClassModel getJavaClass();
}
@@ -1,8 +1,15 @@
package org.jboss.windup.rules.apps.java.scan.provider;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.List;

import org.jboss.forge.furnace.util.Strings;
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.config.RulePhase;
import org.jboss.windup.config.WindupRuleProvider;
Expand All @@ -13,7 +20,10 @@
import org.jboss.windup.graph.model.WindupConfigurationModel;
import org.jboss.windup.graph.model.resource.FileModel;
import org.jboss.windup.graph.service.GraphService;
import org.jboss.windup.rules.apps.java.model.JavaClassModel;
import org.jboss.windup.rules.apps.java.model.JavaSourceFileModel;
import org.jboss.windup.rules.apps.java.service.JavaClassService;
import org.jboss.windup.util.exception.WindupException;
import org.ocpsoft.rewrite.config.ConditionBuilder;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
Expand Down Expand Up @@ -90,6 +100,54 @@ public void perform(GraphRewrite event, EvaluationContext context, FileModel pay
JavaSourceFileModel.class);

javaFileModel.setPackageName(packageName);
try (FileInputStream fis = new FileInputStream(payload.getFilePath()))
{
addParsedClassToFile(fis,event.getGraphContext(),javaFileModel);
}
catch (FileNotFoundException e)
{
throw new WindupException("File in " + payload.getFilePath() + " was not found.",e);
}
catch (IOException e)
{
throw new WindupException("IOException thrown when parsing file located in " + payload.getFilePath(),e);
}
}

private void addParsedClassToFile(FileInputStream fis, GraphContext context, JavaSourceFileModel classFileModel) {
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, fis);
String packageName = javaClass.getPackage();
String qualifiedName = javaClass.getQualifiedName();

String simpleName = qualifiedName;
if (packageName != null && !packageName.equals("") && simpleName != null)
{
simpleName = simpleName.substring(packageName.length() + 1);
}

JavaClassService javaClassService = new JavaClassService(context);
JavaClassModel javaClassModel = javaClassService.getOrCreate(qualifiedName);

javaClassModel.setSimpleName(simpleName);
javaClassModel.setPackageName(packageName);
javaClassModel.setQualifiedName(qualifiedName);
javaClassModel.setClassFile(classFileModel);

List<String> interfaceNames = javaClass.getInterfaces();
if (interfaceNames != null)
{
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));

classFileModel.addJavaClass(javaClassModel);
}

}
Expand Down
Expand Up @@ -43,7 +43,6 @@
import org.ocpsoft.rewrite.context.EvaluationContext;

@RunWith(Arquillian.class)
@Ignore
public class JavaClassTest
{
@Deployment
Expand Down Expand Up @@ -175,29 +174,25 @@ public Configuration getConfiguration(GraphContext context)

.addRule()
.when(JavaClass.references("org.jboss.forge.furnace.*").inFile(".*").at(TypeReferenceLocation.IMPORT))
.perform(Iteration.over()
.perform(new AbstractIterationOperation<TypeReferenceModel>()
.perform(new AbstractIterationOperation<TypeReferenceModel>()
{
@Override
public void perform(GraphRewrite event, EvaluationContext context, TypeReferenceModel payload)
{
firstRuleMatchCount++;
}
})
.endIteration()
}
)
.addRule()
.when(JavaClass.references("org.jboss.forge.furnace.*").inFile(".*JavaClassTest.*").at(TypeReferenceLocation.IMPORT))
.perform(Iteration.over()
.perform(new AbstractIterationOperation<TypeReferenceModel>()
.perform(new AbstractIterationOperation<TypeReferenceModel>()
{
@Override
public void perform(GraphRewrite event, EvaluationContext context, TypeReferenceModel payload)
{
secondRuleMatchCount++;
}
})
.endIteration()
}
);
}
// @formatter:on
Expand Down

0 comments on commit bf3f331

Please sign in to comment.