From 44e5de95094e70098bc64872efdd0a3237f90740 Mon Sep 17 00:00:00 2001 From: aclement Date: Mon, 5 Apr 2010 19:36:57 +0000 Subject: [PATCH] refactored generic type handling --- .../systemtest/ajc150/GenericITDsDesign.java | 9 +- .../systemtest/ajc169/Ajc169Tests.java | 15 +- ...jectIncrementalAjdeInteractionTestbed.java | 172 ++++++++++-------- .../tools/MultiProjectIncrementalTests.java | 23 ++- 4 files changed, 135 insertions(+), 84 deletions(-) diff --git a/tests/src/org/aspectj/systemtest/ajc150/GenericITDsDesign.java b/tests/src/org/aspectj/systemtest/ajc150/GenericITDsDesign.java index 0ef98b99d..542c47554 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/GenericITDsDesign.java +++ b/tests/src/org/aspectj/systemtest/ajc150/GenericITDsDesign.java @@ -34,6 +34,7 @@ public class GenericITDsDesign extends XMLBasedAjcTestCase { return XMLBasedAjcTestCase.loadSuite(GenericITDsDesign.class); } + @Override protected File getSpecFile() { return new File("../tests/src/org/aspectj/systemtest/ajc150/ajc150.xml"); } @@ -59,8 +60,9 @@ public class GenericITDsDesign extends XMLBasedAjcTestCase { Attribute[] attrs = clazz.getAttributes(); for (int i = 0; i < attrs.length; i++) { Attribute attribute = attrs[i]; - if (attribute.getName().equals("Signature")) + if (attribute.getName().equals("Signature")) { sigAttr = (Signature) attribute; + } } return sigAttr; } @@ -86,8 +88,9 @@ public class GenericITDsDesign extends XMLBasedAjcTestCase { List allMungers = getTypeMunger(classname); for (Iterator iter = allMungers.iterator(); iter.hasNext();) { BcelTypeMunger element = (BcelTypeMunger) iter.next(); - if (element.getMunger().getSourceLocation().getLine() == linenumber) + if (element.getMunger().getSourceLocation().getLine() == linenumber) { return element; + } } for (Iterator iter = allMungers.iterator(); iter.hasNext();) { BcelTypeMunger element = (BcelTypeMunger) iter.next(); @@ -169,7 +172,7 @@ public class GenericITDsDesign extends XMLBasedAjcTestCase { verifyDebugString(theBcelMunger.getMunger().getSignature(), " void C.m0(T, Q)"); theBcelMunger = getMungerFromLine("X", 11); - System.err.println(theBcelMunger.getMunger().getSignature().toDebugString()); + // System.err.println(theBcelMunger.getMunger().getSignature().toDebugString()); verifyDebugString(theBcelMunger.getMunger().getSignature(), " java.util.List C.m1(B, java.util.Collection)"); } diff --git a/tests/src/org/aspectj/systemtest/ajc169/Ajc169Tests.java b/tests/src/org/aspectj/systemtest/ajc169/Ajc169Tests.java index 80d992169..110eb0f28 100644 --- a/tests/src/org/aspectj/systemtest/ajc169/Ajc169Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc169/Ajc169Tests.java @@ -18,14 +18,18 @@ import org.aspectj.testing.XMLBasedAjcTestCase; public class Ajc169Tests extends org.aspectj.testing.XMLBasedAjcTestCase { -// public void testAmbiguousMethod_298665() { -// runTest("ambiguous method"); -// } - + // public void testAmbiguousMethod_298665() { + // runTest("ambiguous method"); + // } + // public void testStaticallyAnalyzableIf_292262_1() { // runTest("if with statically recognizable code"); // } + // public void testAdvisingPrivilegedAccessMethod_307147() { + // runTest("advising privileged access method"); + // } + public void testAdvisingPrivilegedAccessMember_307120() { runTest("advising privileged access member"); } @@ -33,7 +37,7 @@ public class Ajc169Tests extends org.aspectj.testing.XMLBasedAjcTestCase { public void testAdvisingPrivilegedAccessMember_307120_2() { runTest("advising privileged access member - 2"); } - + public void testTypePatternCategories_44365_Class() { runTest("type category type patterns - class"); } @@ -82,7 +86,6 @@ public class Ajc169Tests extends org.aspectj.testing.XMLBasedAjcTestCase { runTest("type category type patterns - e2"); } - public void testChecker() { runTest("inserts in messages"); } diff --git a/tests/src/org/aspectj/systemtest/incremental/tools/AbstractMultiProjectIncrementalAjdeInteractionTestbed.java b/tests/src/org/aspectj/systemtest/incremental/tools/AbstractMultiProjectIncrementalAjdeInteractionTestbed.java index f1d9af6c9..2976e5f19 100644 --- a/tests/src/org/aspectj/systemtest/incremental/tools/AbstractMultiProjectIncrementalAjdeInteractionTestbed.java +++ b/tests/src/org/aspectj/systemtest/incremental/tools/AbstractMultiProjectIncrementalAjdeInteractionTestbed.java @@ -20,12 +20,14 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Set; import org.aspectj.ajdt.internal.core.builder.AjState; +import org.aspectj.asm.IRelationship; +import org.aspectj.asm.IRelationshipMap; import org.aspectj.testing.util.FileUtil; -public class AbstractMultiProjectIncrementalAjdeInteractionTestbed extends - AjdeInteractionTestbed { +public class AbstractMultiProjectIncrementalAjdeInteractionTestbed extends AjdeInteractionTestbed { public static boolean VERBOSE = false; @@ -41,29 +43,50 @@ public class AbstractMultiProjectIncrementalAjdeInteractionTestbed extends } public void build(String projectName) { - constructUpToDateLstFile(projectName,"build.lst"); + constructUpToDateLstFile(projectName, "build.lst"); doBuild(projectName); - if (AjdeInteractionTestbed.VERBOSE) printBuildReport(projectName); + if (AjdeInteractionTestbed.VERBOSE) + printBuildReport(projectName); + } + + public int getRelationshipCount(String project) { + IRelationshipMap relmap = getModelFor(project).getRelationshipMap(); + int ctr = 0; + Set entries = relmap.getEntries(); + for (Iterator iter = entries.iterator(); iter.hasNext();) { + String hid = (String) iter.next(); + List rels = relmap.get(hid); + for (Iterator iterator = rels.iterator(); iterator.hasNext();) { + IRelationship ir = (IRelationship) iterator.next(); + List targets = ir.getTargets(); + for (Iterator iterator2 = targets.iterator(); iterator2.hasNext();) { + String thid = (String) iterator2.next(); + ctr++; + } + } + } + return ctr; } public void fullBuild(String projectName) { - constructUpToDateLstFile(projectName,"build.lst"); + constructUpToDateLstFile(projectName, "build.lst"); doFullBuild(projectName); - if (AjdeInteractionTestbed.VERBOSE) printBuildReport(projectName); + if (AjdeInteractionTestbed.VERBOSE) + printBuildReport(projectName); } private void constructUpToDateLstFile(String pname, String configname) { - File projectBase = new File(sandboxDir,pname); - File toConstruct = new File(projectBase,configname); + File projectBase = new File(sandboxDir, pname); + File toConstruct = new File(projectBase, configname); List filesForCompilation = new ArrayList(); - collectUpFiles(projectBase,projectBase,filesForCompilation); - + collectUpFiles(projectBase, projectBase, filesForCompilation); + try { FileOutputStream fos = new FileOutputStream(toConstruct); DataOutputStream dos = new DataOutputStream(fos); for (Iterator iter = filesForCompilation.iterator(); iter.hasNext();) { String file = (String) iter.next(); - dos.writeBytes(file+"\n"); + dos.writeBytes(file + "\n"); } dos.close(); } catch (IOException ioe) { @@ -73,19 +96,21 @@ public class AbstractMultiProjectIncrementalAjdeInteractionTestbed extends private void collectUpFiles(File location, File base, List collectionPoint) { String contents[] = location.list(); - if (contents==null) return; + if (contents == null) + return; for (int i = 0; i < contents.length; i++) { String string = contents[i]; - File f = new File(location,string); + File f = new File(location, string); if (f.isDirectory()) { - collectUpFiles(f,base,collectionPoint); + collectUpFiles(f, base, collectionPoint); } else if (f.isFile() && (f.getName().endsWith(".aj") || f.getName().endsWith(".java"))) { String fileFound; try { fileFound = f.getCanonicalPath(); - String toRemove = base.getCanonicalPath(); - if (!fileFound.startsWith(toRemove)) throw new RuntimeException("eh? "+fileFound+" "+toRemove); - collectionPoint.add(fileFound.substring(toRemove.length()+1));//+1 captures extra separator + String toRemove = base.getCanonicalPath(); + if (!fileFound.startsWith(toRemove)) + throw new RuntimeException("eh? " + fileFound + " " + toRemove); + collectionPoint.add(fileFound.substring(toRemove.length() + 1));// +1 captures extra separator } catch (IOException e) { e.printStackTrace(); } @@ -94,89 +119,88 @@ public class AbstractMultiProjectIncrementalAjdeInteractionTestbed extends } /** - * Fill in the working directory with the project base files, - * from the 'base' folder. + * Fill in the working directory with the project base files, from the 'base' folder. */ protected void initialiseProject(String p) { - File projectSrc=new File(testdataSrcDir+File.separatorChar+p+File.separatorChar+"base"); - File destination=new File(getWorkingDir(),p); - if (!destination.exists()) {destination.mkdir();} - copy(projectSrc,destination);//,false); + File projectSrc = new File(testdataSrcDir + File.separatorChar + p + File.separatorChar + "base"); + File destination = new File(getWorkingDir(), p); + if (!destination.exists()) { + destination.mkdir(); + } + copy(projectSrc, destination);// ,false); // create the AjCompiler instance associated with this project // (has id of the form c:\temp\ajcSandbox\\) CompilerFactory.getCompilerForProjectWithDir(sandboxDir + File.separator + p); } /** - * Applies an overlay onto the project being tested - copying - * the contents of the specified overlay directory. + * Applies an overlay onto the project being tested - copying the contents of the specified overlay directory. */ - public void alter(String projectName,String overlayDirectory) { - File projectSrc =new File(testdataSrcDir+File.separatorChar+projectName+ - File.separatorChar+overlayDirectory); - File destination=new File(getWorkingDir(),projectName); + public void alter(String projectName, String overlayDirectory) { + File projectSrc = new File(testdataSrcDir + File.separatorChar + projectName + File.separatorChar + overlayDirectory); + File destination = new File(getWorkingDir(), projectName); - if (AjdeInteractionTestbed.VERBOSE) System.out.println("Altering project "+projectName); - copy(projectSrc,destination); + if (AjdeInteractionTestbed.VERBOSE) + System.out.println("Altering project " + projectName); + copy(projectSrc, destination); } - + /** - * Copy the contents of some directory to another location - the - * copy is recursive. + * Copy the contents of some directory to another location - the copy is recursive. */ protected void copy(File from, File to) { String contents[] = from.list(); - if (contents==null) return; + if (contents == null) + return; for (int i = 0; i < contents.length; i++) { String string = contents[i]; - File f = new File(from,string); - File t = new File(to,string); - + File f = new File(from, string); + File t = new File(to, string); + if (f.isDirectory() && !f.getName().startsWith("inc")) { t.mkdir(); - copy(f,t); + copy(f, t); } else if (f.isFile()) { StringBuffer sb = new StringBuffer(); - //if (VERBOSE) System.err.println("Copying "+f+" to "+t); - FileUtil.copyFile(f,t,sb); - if (sb.length()!=0) { System.err.println(sb.toString());} - } + // if (VERBOSE) System.err.println("Copying "+f+" to "+t); + FileUtil.copyFile(f, t, sb); + if (sb.length() != 0) { + System.err.println(sb.toString()); + } + } } } /** - * Count the number of times a specified aspectName appears in the default - * aop.xml file and compare with the expected number of occurrences. If just - * want to count the number of aspects mentioned within the file then - * pass "" for the aspectName, otherwise, specify the name of the - * aspect interested in. + * Count the number of times a specified aspectName appears in the default aop.xml file and compare with the expected number of + * occurrences. If just want to count the number of aspects mentioned within the file then pass "" for the aspectName, + * otherwise, specify the name of the aspect interested in. */ - protected void checkXMLAspectCount(String projectName, String aspectName, - int expectedOccurrences, String outputDir) { - int aspectCount = 0; - File aopXML = new File(outputDir + File.separatorChar + "META-INF" + File.separatorChar + "aop-ajc.xml"); - - if (!aopXML.exists()) { - fail("Expected file " + aopXML.getAbsolutePath() + " to exist but it doesn't"); - } - try { - BufferedReader reader = new BufferedReader(new FileReader(aopXML)); - String line = reader.readLine(); - while (line != null) { - if (aspectName.equals("") && line.indexOf("aspect name=\"") != -1) { - aspectCount++; - } else if (line.indexOf("aspect name=\""+aspectName+"\"") != -1) { - aspectCount++; - } - line = reader.readLine(); - } - reader.close(); - } catch (IOException ie) { - ie.printStackTrace(); - } - if (aspectCount != expectedOccurrences) { - fail("Expected aspect " + aspectName + " to appear " + expectedOccurrences + " times" + - " in the aop.xml file but found " + aspectCount + " occurrences"); + protected void checkXMLAspectCount(String projectName, String aspectName, int expectedOccurrences, String outputDir) { + int aspectCount = 0; + File aopXML = new File(outputDir + File.separatorChar + "META-INF" + File.separatorChar + "aop-ajc.xml"); + + if (!aopXML.exists()) { + fail("Expected file " + aopXML.getAbsolutePath() + " to exist but it doesn't"); + } + try { + BufferedReader reader = new BufferedReader(new FileReader(aopXML)); + String line = reader.readLine(); + while (line != null) { + if (aspectName.equals("") && line.indexOf("aspect name=\"") != -1) { + aspectCount++; + } else if (line.indexOf("aspect name=\"" + aspectName + "\"") != -1) { + aspectCount++; } + line = reader.readLine(); } + reader.close(); + } catch (IOException ie) { + ie.printStackTrace(); + } + if (aspectCount != expectedOccurrences) { + fail("Expected aspect " + aspectName + " to appear " + expectedOccurrences + " times" + + " in the aop.xml file but found " + aspectCount + " occurrences"); + } + } } diff --git a/tests/src/org/aspectj/systemtest/incremental/tools/MultiProjectIncrementalTests.java b/tests/src/org/aspectj/systemtest/incremental/tools/MultiProjectIncrementalTests.java index 4793e1d3b..c77188fe6 100644 --- a/tests/src/org/aspectj/systemtest/incremental/tools/MultiProjectIncrementalTests.java +++ b/tests/src/org/aspectj/systemtest/incremental/tools/MultiProjectIncrementalTests.java @@ -224,6 +224,7 @@ public class MultiProjectIncrementalTests extends AbstractMultiProjectIncrementa // just simple incremental build - no code change, just the aspect touched public void testIncrementalFqItds_280380() throws Exception { + String p = "pr280380"; initialiseProject(p); build(p); @@ -235,6 +236,26 @@ public class MultiProjectIncrementalTests extends AbstractMultiProjectIncrementa // printModel(p); } + public void testIncrementalAdvisingItdJoinpointsAccessingPrivFields_307120() throws Exception { + String p = "pr307120"; + initialiseProject(p); + build(p); + // Hid:1:(targets=1) =pr307120<{Test.java}Test)A.getFoo?field-get(int A.foo) (advised by) =pr307120<{Test.java}Test&before + // Hid:2:(targets=1) =pr307120<{A.java[A (aspect declarations) =pr307120<{Test.java}Test)A.getFoo + // Hid:3:(targets=1) =pr307120<{Test.java}Test&before (advises) =pr307120<{Test.java}Test)A.getFoo?field-get(int A.foo) + // Hid:4:(targets=1) =pr307120<{Test.java}Test)A.getFoo (declared on) =pr307120<{A.java[A + alter(p, "inc1"); + assertEquals(4, getRelationshipCount(p)); + build(p); + // Hid:1:(targets=1) =pr307120<{A.java[A (aspect declarations) =pr307120<{Test.java}Test)A.getFoo + // Hid:2:(targets=1) =pr307120<{Test.java}Test)A.getFoo (declared on) =pr307120<{A.java[A + // These two are missing without the fix: + // Hid:1:(targets=1) =pr307120<{Test.java}Test)A.getFoo?field-get(int A.foo) (advised by) =pr307120<{Test.java}Test&before + // Hid:7:(targets=1) =pr307120<{Test.java}Test&before (advises) =pr307120<{Test.java}Test)A.getFoo?field-get(int A.foo) + assertNoErrors(p); + assertEquals(4, getRelationshipCount(p)); + } + // modified aspect so target is fully qualified on the incremental change public void testIncrementalFqItds_280380_2() throws Exception { String p = "pr280380"; @@ -405,7 +426,6 @@ public class MultiProjectIncrementalTests extends AbstractMultiProjectIncrementa } public void testOutputLocationCallbacksFileAdd() { - AjdeInteractionTestbed.VERBOSE = true; String p = "pr268827_ol2"; initialiseProject(p); CustomOLM olm = new CustomOLM(getProjectRelativePath(p, ".").toString()); @@ -1431,6 +1451,7 @@ public class MultiProjectIncrementalTests extends AbstractMultiProjectIncrementa // assertEquals("=AspectPathTwo/binaries<(Asp2.class}Asp2&before", findElementAtLine(root, 16).getHandleIdentifier()); } + /** @return the number of relationship pairs */ private void printModel(String projectName) throws Exception { dumptree(getModelFor(projectName).getHierarchy().getRoot(), 0); PrintWriter pw = new PrintWriter(System.out); -- 2.39.5