diff --git a/build.gradle b/build.gradle index 25d45c7..0c9de17 100644 --- a/build.gradle +++ b/build.gradle @@ -46,3 +46,6 @@ dependencies{ testCompile 'javax.annotation:jsr250-api:1.0' } +springBoot { + mainClass = "yooze.application.YoozeServer" +} \ No newline at end of file diff --git a/src/main/java/yooze/ClassCache.java b/src/main/java/yooze/ClassCache.java index 19ea9be..f256853 100644 --- a/src/main/java/yooze/ClassCache.java +++ b/src/main/java/yooze/ClassCache.java @@ -10,6 +10,11 @@ import yooze.domain.ClassModel; public class ClassCache { private final Map entries = new ConcurrentHashMap(); private InclusionDecider inclusionDecider; + private final static ClassCache instance = new ClassCache(); + + private ClassCache() { + + } public boolean contains(String classname) { return entries.containsKey(classname); @@ -47,4 +52,8 @@ public class ClassCache { this.inclusionDecider = inclusionDecider; } + public static ClassCache getInstance() { + return instance; + } + } diff --git a/src/main/java/yooze/ClassModelBuilder.java b/src/main/java/yooze/ClassModelBuilder.java index 8b81d65..d97ef90 100644 --- a/src/main/java/yooze/ClassModelBuilder.java +++ b/src/main/java/yooze/ClassModelBuilder.java @@ -22,9 +22,15 @@ public class ClassModelBuilder { private static Logger log = LoggerFactory.getLogger(ClassModelBuilder.class); private ClassPool pool; - private InclusionDecider inclusionDecider; + private final InclusionDecider inclusionDecider; private ClassCache classCache; + public ClassModelBuilder(InclusionDecider inclusionDecider) { + this.inclusionDecider = inclusionDecider; + classCache = ClassCache.getInstance(); + classCache.setInclusionDecider(inclusionDecider); + } + public ClassModel scanClassOrSkip(String className) { if (inclusionDecider.shouldSkip(className)) return null; @@ -55,6 +61,7 @@ public class ClassModelBuilder { resolveMethodReferences(); return model; } catch (Exception e) { + e.printStackTrace(); System.out.println(e.getClass().getName() + ":" + e.getMessage()); return null; } @@ -110,15 +117,8 @@ public class ClassModelBuilder { } } - public void setInclusionDecider(InclusionDecider inclusionDecider) { - this.inclusionDecider = inclusionDecider; - } - public void setPool(ClassPool pool) { this.pool = pool; } - public void setClassCache(ClassCache classCache) { - this.classCache = classCache; - } } diff --git a/src/main/java/yooze/GraphBuilder.java b/src/main/java/yooze/GraphBuilder.java index f677f62..96e91af 100644 --- a/src/main/java/yooze/GraphBuilder.java +++ b/src/main/java/yooze/GraphBuilder.java @@ -75,6 +75,12 @@ public class GraphBuilder { Graph graph = createClassDependencyGraph(pool, cpList, className, e); graph.setName(archiveFile.getName()); + + // leave ClassPool in original state, because getDefault will always + // return the same instance + for (ClassPath cp : cpList) { + pool.removeClassPath(cp); + } return graph; } diff --git a/src/main/java/yooze/application/Yooze.java b/src/main/java/yooze/application/Yooze.java index 26496d1..e4b7066 100644 --- a/src/main/java/yooze/application/Yooze.java +++ b/src/main/java/yooze/application/Yooze.java @@ -33,8 +33,7 @@ public class Yooze { InclusionDecider i = new InclusionDecider(); i.setPackageExcludePatterns(packageExcludePatterns); i.setPackageIncludePatterns(packageIncludePatterns); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setInclusionDecider(i); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(i); libDirectoryBuilder.setClassModelBuilder(classModelBuilder); Graph graph = libDirectoryBuilder.build(archive, startingClass); diff --git a/src/main/java/yooze/application/YoozeServer.java b/src/main/java/yooze/application/YoozeServer.java index fa287ce..10e417f 100644 --- a/src/main/java/yooze/application/YoozeServer.java +++ b/src/main/java/yooze/application/YoozeServer.java @@ -109,17 +109,15 @@ public class YoozeServer { @PostConstruct public void startup() throws IOException { - InclusionDecider i = new InclusionDecider(); - i.setPackageExcludePatterns("java\\."); - i.setPackageIncludePatterns("org"); + InclusionDecider inclusionDecider = new InclusionDecider(); + inclusionDecider.setPackageExcludePatterns("java\\."); + inclusionDecider.setPackageIncludePatterns("org"); GraphBuilder directoryBuilder = GraphBuilderFactory.getJarBuilder(); - classCache = new ClassCache(); - classCache.setInclusionDecider(i); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setClassCache(classCache); + classCache = ClassCache.getInstance(); + classCache.setInclusionDecider(inclusionDecider); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(inclusionDecider); directoryBuilder.setClassModelBuilder(classModelBuilder); - classModelBuilder.setInclusionDecider(i); raw = directoryBuilder.build("src/test/resources/commons-io-1.4.jar", null); } diff --git a/src/main/java/yooze/domain/ParameterModel.java b/src/main/java/yooze/domain/ParameterModel.java index 4258ecd..86dc7ed 100644 --- a/src/main/java/yooze/domain/ParameterModel.java +++ b/src/main/java/yooze/domain/ParameterModel.java @@ -1,6 +1,7 @@ package yooze.domain; import javassist.CtClass; +import yooze.ClassCache; public class ParameterModel { private ClassModel type; @@ -8,10 +9,10 @@ public class ParameterModel { public ParameterModel(CtClass typeAsCtClass) { String classname = typeAsCtClass.getName(); - // type = ClassCache.get(classname); - // if (type == null) { - // type = ClassCache.createNewDummyModel(classname); - // } + type = ClassCache.getInstance().get(classname); + if (type == null) { + type = ClassCache.getInstance().createNewDummyModel(classname); + } name = "";// javassist doesn't give me this (?) } diff --git a/src/main/resources/META-INF/MANIFEST.MF b/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000..2aadc3e --- /dev/null +++ b/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: yooze.application.YoozeServer \ No newline at end of file diff --git a/src/test/java/yooze/Config.java b/src/test/java/yooze/Config.java deleted file mode 100644 index e2f3952..0000000 --- a/src/test/java/yooze/Config.java +++ /dev/null @@ -1,26 +0,0 @@ -package yooze; - -import java.io.File; - -public class Config { - private File earFile; - private File tgzFile; - - public void setEarFile(File earFile) { - this.earFile = earFile; - } - - public File getEarFile() { - return earFile; - } - - public File getTgzFile() { - return tgzFile; - } - - public void setTgzFile(File tgzFile) { - this.tgzFile = tgzFile; - } - - -} diff --git a/src/test/java/yooze/GraphTest.java b/src/test/java/yooze/GraphTest.java index 3b21cf0..fca3461 100644 --- a/src/test/java/yooze/GraphTest.java +++ b/src/test/java/yooze/GraphTest.java @@ -7,32 +7,20 @@ import java.io.IOException; import junit.framework.Assert; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import yooze.application.GraphBuilderFactory; import yooze.domain.ClassModel; import yooze.domain.Graph; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = "classpath:applicationContext-test.xml") -@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class GraphTest { @Test public void buildGraph() throws IOException { - // new Yooze("/tmp/test").createNeoGraph("target/test-classes", - // ".*?.Class."); GraphBuilder libDirectoryBuilder = GraphBuilderFactory.getClassesDirectoryBuilder(); InclusionDecider i = new InclusionDecider(); i.setPackageIncludePatterns(".*?.Class."); - i.setPackageExcludePatterns(""); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setInclusionDecider(i); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(i); libDirectoryBuilder.setClassModelBuilder(classModelBuilder); Graph graph = libDirectoryBuilder.build("target/test-classes", "yooze.Class1"); diff --git a/src/test/java/yooze/LargePackageTest.java b/src/test/java/yooze/LargePackageTest.java index 86c3a18..221eda2 100644 --- a/src/test/java/yooze/LargePackageTest.java +++ b/src/test/java/yooze/LargePackageTest.java @@ -4,25 +4,14 @@ import java.io.FileOutputStream; import java.io.IOException; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.core.io.DefaultResourceLoader; import yooze.application.GraphBuilderFactory; import yooze.domain.Graph; import yooze.output.DotPrinter; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = "classpath:applicationContext-test.xml") -@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class LargePackageTest { - @Autowired - private Config config; - @Test public void largePackage() throws IOException { GraphBuilder earBuilder = GraphBuilderFactory.getEarBuilder(); @@ -30,22 +19,14 @@ public class LargePackageTest { InclusionDecider i = new InclusionDecider(); i.setPackageIncludePatterns(""); i.setPackageExcludePatterns("java.*"); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setInclusionDecider(i); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(i); earBuilder.setClassModelBuilder(classModelBuilder); - Graph graph = earBuilder.build(config.getEarFile(), "java.lang.String"); + Graph graph = earBuilder.build(new DefaultResourceLoader().getResource("classpath:examples.ear").getFile(), + "java.lang.String"); DotPrinter dotPrinter = new DotPrinter(new FileOutputStream("/tmp/example.dot")); dotPrinter.print(graph); dotPrinter.close(); } - public Config getConfig() { - return config; - } - - public void setConfig(Config config) { - this.config = config; - } - } diff --git a/src/test/java/yooze/MethodReferencesTest.java b/src/test/java/yooze/MethodReferencesTest.java index 2a94f19..e91c5fd 100644 --- a/src/test/java/yooze/MethodReferencesTest.java +++ b/src/test/java/yooze/MethodReferencesTest.java @@ -10,19 +10,11 @@ import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.map.ObjectMapper; import org.junit.After; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import yooze.application.GraphBuilderFactory; import yooze.domain.MethodModel; import yooze.dto.MethodDto; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = "classpath:applicationContext-test.xml") -@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class MethodReferencesTest { @After @@ -36,8 +28,7 @@ public class MethodReferencesTest { InclusionDecider i = new InclusionDecider(); i.setPackageIncludePatterns("yooze.Class.*"); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setInclusionDecider(i); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(i); directoryBuilder.setClassModelBuilder(classModelBuilder); directoryBuilder.build("target/test-classes", "yooze.Class1"); diff --git a/src/test/java/yooze/TgzBuilderTest.java b/src/test/java/yooze/TgzBuilderTest.java index 5d79239..db90695 100644 --- a/src/test/java/yooze/TgzBuilderTest.java +++ b/src/test/java/yooze/TgzBuilderTest.java @@ -6,34 +6,25 @@ import java.io.IOException; import java.util.ArrayList; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.core.io.DefaultResourceLoader; import yooze.application.GraphBuilderFactory; import yooze.domain.ClassModel; import yooze.domain.Graph; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = "classpath:applicationContext-test.xml") public class TgzBuilderTest { - @Autowired - private Config config; - @Test public void tgzBuilder() throws IOException { GraphBuilder tgzBuilder = GraphBuilderFactory.getDefaultTgzBuilder(); InclusionDecider i = new InclusionDecider(); - i.setPackageIncludePatterns("nl.*"); - i.setPackageExcludePatterns(""); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setInclusionDecider(i); + i.setPackageIncludePatterns("nl\\."); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(i); tgzBuilder.setClassModelBuilder(classModelBuilder); - Graph graph = tgzBuilder.build(config.getTgzFile(), "nl.jssl.jas.Main"); + Graph graph = tgzBuilder.build(new DefaultResourceLoader().getResource("classpath:agent.tar.gz").getFile(), + "nl.jssl.jas.Main"); ArrayList names = new ArrayList(); @@ -43,7 +34,4 @@ public class TgzBuilderTest { assertTrue(names.contains("nl.jssl.jas.Main")); } - public void setConfig(Config config) { - this.config = config; - } } diff --git a/src/test/java/yooze/output/DotPrinterTest.java b/src/test/java/yooze/output/DotPrinterTest.java index c9d58c2..1c78eb1 100644 --- a/src/test/java/yooze/output/DotPrinterTest.java +++ b/src/test/java/yooze/output/DotPrinterTest.java @@ -6,9 +6,6 @@ import java.io.IOException; import junit.framework.Assert; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import yooze.ClassModelBuilder; import yooze.GraphBuilder; @@ -16,8 +13,6 @@ import yooze.InclusionDecider; import yooze.application.GraphBuilderFactory; import yooze.domain.Graph; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = "classpath:applicationContext-test.xml") public class DotPrinterTest { @Test @@ -26,8 +21,7 @@ public class DotPrinterTest { InclusionDecider i = new InclusionDecider(); i.setPackageExcludePatterns(".*?Class4"); i.setPackageIncludePatterns(".*?.Class."); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setInclusionDecider(i); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(i); directoryBuilder.setClassModelBuilder(classModelBuilder); Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class1"); @@ -57,10 +51,8 @@ public class DotPrinterTest { GraphBuilder directoryBuilder = GraphBuilderFactory.getClassesDirectoryBuilder(); InclusionDecider i = new InclusionDecider(); - i.setPackageExcludePatterns(""); i.setPackageIncludePatterns("yooze.Class4"); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setInclusionDecider(i); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(i); directoryBuilder.setClassModelBuilder(classModelBuilder); Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class4"); diff --git a/src/test/java/yooze/output/JsonPrinterTest.java b/src/test/java/yooze/output/JsonPrinterTest.java index e057285..13134d4 100644 --- a/src/test/java/yooze/output/JsonPrinterTest.java +++ b/src/test/java/yooze/output/JsonPrinterTest.java @@ -22,8 +22,7 @@ public class JsonPrinterTest { InclusionDecider i = new InclusionDecider(); i.setPackageExcludePatterns(".*?Class4"); i.setPackageIncludePatterns(".*?.Class."); - ClassModelBuilder classModelBuilder = new ClassModelBuilder(); - classModelBuilder.setInclusionDecider(i); + ClassModelBuilder classModelBuilder = new ClassModelBuilder(i); directoryBuilder.setClassModelBuilder(classModelBuilder); Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class1"); diff --git a/src/test/java/yooze/scanner/EarScannerTest.java b/src/test/java/yooze/scanner/EarScannerTest.java index a740c1b..cb4fe4f 100644 --- a/src/test/java/yooze/scanner/EarScannerTest.java +++ b/src/test/java/yooze/scanner/EarScannerTest.java @@ -8,24 +8,16 @@ import java.io.IOException; import java.util.List; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.core.io.DefaultResourceLoader; -import yooze.Config; import yooze.InspectableClasspath; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = "classpath:applicationContext-test.xml") public class EarScannerTest { - @Autowired - private Config config; - @Test public void scanner() throws IOException { - List classpaths = new ArchiveScanner(new WarScanner()).scanArchive(config.getEarFile()); + List classpaths = new ArchiveScanner(new WarScanner()) + .scanArchive(new DefaultResourceLoader().getResource("classpath:examples.ear").getFile()); for (InspectableClasspath path : classpaths) { if (path instanceof DirClassPath) { List classes = ((InspectableClasspath) path).getClasses(); @@ -40,9 +32,4 @@ public class EarScannerTest { } } } - - public void setConfig(Config config) { - this.config = config; - } - } diff --git a/src/test/java/yooze/scanner/LibScannerTest.java b/src/test/java/yooze/scanner/LibScannerTest.java index 01ce1a8..b40153d 100644 --- a/src/test/java/yooze/scanner/LibScannerTest.java +++ b/src/test/java/yooze/scanner/LibScannerTest.java @@ -13,7 +13,7 @@ public class LibScannerTest { @Test public void directoryWithoutJars_isNotAClasspathEntry() throws IOException { LibScanner libScanner = new LibScanner(); - List classpathList = libScanner.scanArchive("src"); + List classpathList = libScanner.scanArchive("src/main"); assertTrue("This should be empty", classpathList.isEmpty()); } } diff --git a/src/test/resources/applicationContext-test.xml b/src/test/resources/applicationContext-test.xml deleted file mode 100644 index bc05591..0000000 --- a/src/test/resources/applicationContext-test.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - -