diff --git a/CSSE374-Eleven/src/src/problem/asm/ClassFieldVisitor.java b/CSSE374-Eleven/src/src/problem/asm/ClassFieldVisitor.java index 2e05ee4..0c610fb 100644 --- a/CSSE374-Eleven/src/src/problem/asm/ClassFieldVisitor.java +++ b/CSSE374-Eleven/src/src/problem/asm/ClassFieldVisitor.java @@ -52,6 +52,7 @@ public FieldVisitor visitField(int access, String name, String desc, String sign } field.setName(name); field.setType(type); + System.out.println("class: "+this.clazz.getName()+ " field type: "+type); if ((access & Opcodes.ACC_PUBLIC) != 0) { field.setVisibility("public"); } else if ((access & Opcodes.ACC_PROTECTED) != 0) { diff --git a/CSSE374-Eleven/src/src/problem/patternrecognition/CompositeSpotter.java b/CSSE374-Eleven/src/src/problem/patternrecognition/CompositeSpotter.java index 1b6555d..c8aa008 100644 --- a/CSSE374-Eleven/src/src/problem/patternrecognition/CompositeSpotter.java +++ b/CSSE374-Eleven/src/src/problem/patternrecognition/CompositeSpotter.java @@ -61,8 +61,21 @@ private void checkForComposite(IModel model, IClass clazz) { clazz2.setPattern("COMPOSITE"); } } + } + } else if (field.getType().contains("[]")) { + String type = field.getType().replace("[", ""); + type = type.replace("]", ""); + if (inherits.contains(type)) { + component = type; + clazz.setStereotype("composite"); + clazz.setPattern("COMPOSITE"); - return; + for (IClass clazz2 : model.getClasses()) { + if (clazz2.getName().equals(type)) { + clazz2.setStereotype("component"); + clazz2.setPattern("COMPOSITE"); + } + } } } } diff --git a/CSSE374-Eleven/test/integrationTests/GVOSIntegrationTests.java b/CSSE374-Eleven/test/integrationTests/GVOSIntegrationTests.java index c980eba..1df7866 100644 --- a/CSSE374-Eleven/test/integrationTests/GVOSIntegrationTests.java +++ b/CSSE374-Eleven/test/integrationTests/GVOSIntegrationTests.java @@ -655,13 +655,39 @@ public void testCompositeSwing() throws IOException { gvos.write(model); gvos.close(); String result = resultStream.toString(); - - System.out.println(result); - + assertTrue(result.contains("Component\\n\\<\\\\>")); assertTrue(result.contains("Container\\n\\<\\\\>")); assertTrue(result.contains("JLabel\\n\\<\\\\>")); assertTrue(result.contains("JPanel\\n\\<\\\\>")); assertTrue(result.contains("JComponent\\n\\<\\\\>")); } + + @Test + public void testCompositeTestClasses() throws IOException { + String[] args = new String[] { "testClasses.TestCompositeComponent", "testClasses.TestCompositeComposite1", "testClasses.TestCompositeComposite2", "testClasses.TestCompositeComposite3", "testClasses.TestCompositeLeaf1", "testClasses.TestCompositeLeaf2" }; + + Model model = new Model(); + + for (String className : args) { + IClass clazz = DesignParser.parse(className, model); + model.addClass(clazz); + } + + PatternRecognizer.recognize(model); + ByteArrayOutputStream resultStream = new ByteArrayOutputStream(); + GraphVizOutputStream gvos = new GraphVizOutputStream(resultStream); + gvos.write(model); + gvos.close(); + String result = resultStream.toString(); + + System.out.println(result); + + assertTrue(result.contains("TestCompositeComponent\\n\\<\\\\>")); + assertTrue(result.contains("TestCompositeComposite1\\n\\<\\\\>")); + assertTrue(result.contains("TestCompositeComposite2\\n\\<\\\\>")); + assertTrue(result.contains("TestCompositeComposite3\\n\\<\\\\>")); + assertTrue(result.contains("TestCompositeLeaf1\\n\\<\\\\>")); + assertTrue(result.contains("TestCompositeLeaf2\\n\\<\\\\>")); + } } diff --git a/CSSE374-Eleven/test/testClasses/TestCompositeComposite3.java b/CSSE374-Eleven/test/testClasses/TestCompositeComposite3.java new file mode 100644 index 0000000..dd41f59 --- /dev/null +++ b/CSSE374-Eleven/test/testClasses/TestCompositeComposite3.java @@ -0,0 +1,10 @@ +package testClasses; + +public class TestCompositeComposite3 extends TestCompositeComponent { + private TestCompositeComponent[] children; + + public TestCompositeComposite3() { + this.children = new TestCompositeComponent[]{ }; + } + +}