]> source.dussan.org Git - aspectj.git/commitdiff
fixed eclipse warnings
authoraclement <aclement>
Thu, 28 Aug 2008 02:59:19 +0000 (02:59 +0000)
committeraclement <aclement>
Thu, 28 Aug 2008 02:59:19 +0000 (02:59 +0000)
org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjState.java
org.aspectj.ajdt.core/src/org/aspectj/org/eclipse/jdt/core/dom/AjASTConverter.java
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/ajc/AjdtCommandTestCase.java
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/CompilerDumpTestCase.java
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/DeclareParents.java
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/ProceedOnErrorTestCase.java
org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjASTTest.java

index dfc31db68caeaf02fe8a15bb09600c5d96d6d1ff..0e51ceecc2af742cd12c754e48f8f8f93b4df904 100644 (file)
@@ -10,8 +10,6 @@
  *     PARC     initial implementation 
  * ******************************************************************/
 
-
-
 package org.aspectj.ajdt.ajc;
 
 import java.io.File;
@@ -48,202 +46,196 @@ import org.aspectj.weaver.WeaverMessages;
 public class BuildArgParser extends Main {
 
        private static final String BUNDLE_NAME = "org.aspectj.ajdt.ajc.messages";
-    private static boolean LOADED_BUNDLE = false;
-    
-    static {
-       Main.bundleName = BUNDLE_NAME;
+       private static boolean LOADED_BUNDLE = false;
+
+       static {
+               Main.bundleName = BUNDLE_NAME;
                ResourceBundleFactory.getBundle(Locale.getDefault());
                if (!LOADED_BUNDLE) {
                        LOADED_BUNDLE = true;
                }
        }
-    
-    /** to initialize super's PrintWriter but refer to underlying StringWriter */
-    private static class StringPrintWriter extends PrintWriter {
-        public final StringWriter stringWriter;
-        StringPrintWriter(StringWriter sw) {
-          super(sw);
-          this.stringWriter = sw;
-        }
-    }
-
-    /** @return multi-line String usage for the compiler */    
-    public static String getUsage() {
-        return _bind("misc.usage",new String[]{_bind("compiler.name",(String[])null)});
-    }
-    
-    public static String getXOptionUsage() {
-       return _bind("xoption.usage",new String[]{_bind("compiler.name",(String[])null)});
-    }
-    
-    /** 
-     * StringWriter sink for some errors.
-     * This only captures errors not handled by any IMessageHandler parameter
-     * and only when no PrintWriter is set in the constructor.
-     * XXX This relies on (Sun's) implementation of StringWriter, 
-     * which returns the actual (not copy) internal StringBuffer.
-     */
-    private final StringBuffer errorSink;
-    
-    private IMessageHandler handler;
-    
+
+       /** to initialize super's PrintWriter but refer to underlying StringWriter */
+       private static class StringPrintWriter extends PrintWriter {
+               public final StringWriter stringWriter;
+
+               StringPrintWriter(StringWriter sw) {
+                       super(sw);
+                       this.stringWriter = sw;
+               }
+       }
+
+       /** @return multi-line String usage for the compiler */
+       public static String getUsage() {
+               return _bind("misc.usage", new String[] { _bind("compiler.name", (String[]) null) });
+       }
+
+       public static String getXOptionUsage() {
+               return _bind("xoption.usage", new String[] { _bind("compiler.name", (String[]) null) });
+       }
+
+       /**
+        * StringWriter sink for some errors. This only captures errors not handled by any IMessageHandler parameter and only when no
+        * PrintWriter is set in the constructor. XXX This relies on (Sun's) implementation of StringWriter, which returns the actual
+        * (not copy) internal StringBuffer.
+        */
+       private final StringBuffer errorSink;
+
+       private IMessageHandler handler;
+
        /**
         * Overrides super's bundle.
         */
        public BuildArgParser(PrintWriter writer, IMessageHandler handler) {
                super(writer, writer, false);
 
-        if (writer instanceof StringPrintWriter) {
-            errorSink = ((StringPrintWriter) writer).stringWriter.getBuffer();
-        } else {
-            errorSink = null;
-        }
-        this.handler = handler;
+               if (writer instanceof StringPrintWriter) {
+                       errorSink = ((StringPrintWriter) writer).stringWriter.getBuffer();
+               } else {
+                       errorSink = null;
+               }
+               this.handler = handler;
        }
 
-    /** Set up to capture messages using getOtherMessages(boolean) */
-       public BuildArgParser(IMessageHandler handler) { 
-               this(new StringPrintWriter(new StringWriter()),handler);
+       /** Set up to capture messages using getOtherMessages(boolean) */
+       public BuildArgParser(IMessageHandler handler) {
+               this(new StringPrintWriter(new StringWriter()), handler);
        }
 
        /**
-        * Generate build configuration for the input args,
-        * passing to handler any error messages.
+        * Generate build configuration for the input args, passing to handler any error messages.
+        * 
         * @param args the String[] arguments for the build configuration
-        * @return AjBuildConfig per args, 
-        *         which will be invalid unless there are no handler errors.
+        * @return AjBuildConfig per args, which will be invalid unless there are no handler errors.
         */
        public AjBuildConfig genBuildConfig(String[] args) {
                AjBuildConfig config = new AjBuildConfig();
-               populateBuildConfig(config, args,  true, null);
+               populateBuildConfig(config, args, true, null);
                return config;
-       }  
-      
-    /**
-     * Generate build configuration for the input args,
-     * passing to handler any error messages.
-     * @param args the String[] arguments for the build configuration
-     * @param setClasspath     determines if the classpath should be parsed and set on the build configuration
-     * @param configFile       can be null
-     * @return AjBuildConfig per args, 
-     *         which will be invalid unless there are no handler errors.
-     */
+       }
+
+       /**
+        * Generate build configuration for the input args, passing to handler any error messages.
+        * 
+        * @param args the String[] arguments for the build configuration
+        * @param setClasspath determines if the classpath should be parsed and set on the build configuration
+        * @param configFile can be null
+        * @return AjBuildConfig per args, which will be invalid unless there are no handler errors.
+        */
        public AjBuildConfig populateBuildConfig(AjBuildConfig buildConfig, String[] args, boolean setClasspath, File configFile) {
-               Dump.saveCommandLine(args);     
+               Dump.saveCommandLine(args);
                buildConfig.setConfigFile(configFile);
                try {
                        // sets filenames to be non-null in order to make sure that file paramters are ignored
-                       super.filenames = new String[] { "" }; 
-                       
+                       super.filenames = new String[] { "" };
+
                        AjcConfigParser parser = new AjcConfigParser(buildConfig, handler);
                        parser.parseCommandLine(args);
                        boolean swi = buildConfig.getShowWeavingInformation();
                        // Now jump through firey hoops to turn them on/off
                        if (handler instanceof CountingMessageHandler) {
-                               IMessageHandler delegate = ((CountingMessageHandler)handler).delegate;
-                               if (swi) 
-                                 delegate.dontIgnore(IMessage.WEAVEINFO);
-                               else 
-                                 delegate.ignore(IMessage.WEAVEINFO);
+                               IMessageHandler delegate = ((CountingMessageHandler) handler).delegate;
+                               if (swi)
+                                       delegate.dontIgnore(IMessage.WEAVEINFO);
+                               else
+                                       delegate.ignore(IMessage.WEAVEINFO);
                        }
-            
-            boolean incrementalMode = buildConfig.isIncrementalMode()
-               || buildConfig.isIncrementalFileMode();
-                       
+
+                       boolean incrementalMode = buildConfig.isIncrementalMode() || buildConfig.isIncrementalFileMode();
+
                        List fileList = new ArrayList();
-            List files = parser.getFiles();
-            if (!LangUtil.isEmpty(files)) {
-                if (incrementalMode) {
-                    MessageUtil.error(handler, "incremental mode only handles source files using -sourceroots"); 
-                } else {
-                    fileList.addAll(files);
-                }
-            }
-                               
+                       List files = parser.getFiles();
+                       if (!LangUtil.isEmpty(files)) {
+                               if (incrementalMode) {
+                                       MessageUtil.error(handler, "incremental mode only handles source files using -sourceroots");
+                               } else {
+                                       fileList.addAll(files);
+                               }
+                       }
+
                        List javaArgList = new ArrayList();
-                       //      disable all special eclipse warnings by default - why???
-                       //??? might want to instead override getDefaultOptions()
+                       // disable all special eclipse warnings by default - why???
+                       // ??? might want to instead override getDefaultOptions()
                        javaArgList.add("-warn:none");
                        // these next four lines are some nonsense to fool the eclipse batch compiler
                        // without these it will go searching for reasonable values from properties
-                       //TODO fix org.eclipse.jdt.internal.compiler.batch.Main so this hack isn't needed
+                       // TODO fix org.eclipse.jdt.internal.compiler.batch.Main so this hack isn't needed
                        javaArgList.add("-classpath");
                        javaArgList.add(System.getProperty("user.dir"));
                        javaArgList.add("-bootclasspath");
                        javaArgList.add(System.getProperty("user.dir"));
                        javaArgList.addAll(parser.getUnparsedArgs());
-                       super.configure((String[])javaArgList.toArray(new String[javaArgList.size()]));
-                       
+                       super.configure((String[]) javaArgList.toArray(new String[javaArgList.size()]));
+
                        if (!proceed) {
                                buildConfig.doNotProceed();
                                return buildConfig;
-                       } 
-                       
+                       }
+
                        if (buildConfig.getSourceRoots() != null) {
-                               for (Iterator i = buildConfig.getSourceRoots().iterator(); i.hasNext(); ) {
-                                       fileList.addAll(collectSourceRootFiles((File)i.next()));
+                               for (Iterator i = buildConfig.getSourceRoots().iterator(); i.hasNext();) {
+                                       fileList.addAll(collectSourceRootFiles((File) i.next()));
                                }
                        }
-                       
+
                        buildConfig.setFiles(fileList);
                        if (destinationPath != null) { // XXX ?? unparsed but set?
                                buildConfig.setOutputDir(new File(destinationPath));
                        }
-                       
+
                        if (setClasspath) {
                                buildConfig.setClasspath(getClasspath(parser));
                                buildConfig.setBootclasspath(getBootclasspath(parser));
                        }
-                       
-                       if (incrementalMode 
-                && (0 == buildConfig.getSourceRoots().size())) {
-                    MessageUtil.error(handler, "specify a source root when in incremental mode");
+
+                       if (incrementalMode && (0 == buildConfig.getSourceRoots().size())) {
+                               MessageUtil.error(handler, "specify a source root when in incremental mode");
                        }
 
                        /*
-                        * Ensure we don't overwrite injars, inpath or aspectpath with outjar
-                        * bug-71339 
+                        * Ensure we don't overwrite injars, inpath or aspectpath with outjar bug-71339
                         */
                        File outjar = buildConfig.getOutputJar();
                        if (outjar != null) {
-                               
+
                                /* Search injars */
-                               for (Iterator i = buildConfig.getInJars().iterator(); i.hasNext(); ) {
-                                       File injar = (File)i.next();
+                               for (Iterator i = buildConfig.getInJars().iterator(); i.hasNext();) {
+                                       File injar = (File) i.next();
                                        if (injar.equals(outjar)) {
                                                String message = WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH);
-                                               MessageUtil.error(handler,message);
+                                               MessageUtil.error(handler, message);
                                        }
                                }
 
                                /* Search inpath */
-                               for (Iterator i = buildConfig.getInpath().iterator(); i.hasNext(); ) {
-                                       File inPathElement = (File)i.next();
-                                       if (!inPathElement.isDirectory() && inPathElement.equals(outjar)) {                             
+                               for (Iterator i = buildConfig.getInpath().iterator(); i.hasNext();) {
+                                       File inPathElement = (File) i.next();
+                                       if (!inPathElement.isDirectory() && inPathElement.equals(outjar)) {
                                                String message = WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH);
-                                               MessageUtil.error(handler,message);
+                                               MessageUtil.error(handler, message);
                                        }
                                }
 
                                /* Search aspectpath */
-                               for (Iterator i = buildConfig.getAspectpath().iterator(); i.hasNext(); ) {
-                                       File pathElement = (File)i.next();
-                                       if (!pathElement.isDirectory() && pathElement.equals(outjar)) {                         
+                               for (Iterator i = buildConfig.getAspectpath().iterator(); i.hasNext();) {
+                                       File pathElement = (File) i.next();
+                                       if (!pathElement.isDirectory() && pathElement.equals(outjar)) {
                                                String message = WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH);
-                                               MessageUtil.error(handler,message);
+                                               MessageUtil.error(handler, message);
                                        }
                                }
 
                        }
-                       
+
                        setDebugOptions();
                        buildConfig.getOptions().set(options);
                } catch (InvalidInputException iie) {
                        ISourceLocation location = null;
                        if (buildConfig.getConfigFile() != null) {
-                               location = new SourceLocation(buildConfig.getConfigFile(), 0); 
+                               location = new SourceLocation(buildConfig.getConfigFile(), 0);
                        }
-                       IMessage m = new Message(iie.getMessage(), IMessage.ERROR, null, location);            
+                       IMessage m = new Message(iie.getMessage(), IMessage.ERROR, null, location);
                        handler.handleMessage(m);
                }
                return buildConfig;
@@ -251,259 +243,242 @@ public class BuildArgParser extends Main {
 
        public void printVersion() {
                final String version = bind("misc.version", //$NON-NLS-1$
-                               new String[] {
-                                       bind("compiler.name"), //$NON-NLS-1$
-                                       Version.text+" - Built: "+Version.time_text,
-                                       bind("compiler.version"), //$NON-NLS-1$
-                                       bind("compiler.copyright") //$NON-NLS-1$
-                               }
-                       );
+                               new String[] { bind("compiler.name"), //$NON-NLS-1$
+                                               Version.text + " - Built: " + Version.time_text, bind("compiler.version"), //$NON-NLS-1$
+                                               bind("compiler.copyright") //$NON-NLS-1$
+                               });
                System.out.println(version);
        }
-       
+
        public void printUsage() {
-               System.out.println(bind("misc.usage"));  //$NON-NLS-1$
+               System.out.println(bind("misc.usage")); //$NON-NLS-1$
                System.out.flush();
        }
 
-    /** 
-     * Get messages not dumped to handler or any PrintWriter.
-     * @param flush if true, empty errors
-     * @return null if none, String otherwise
-     * @see BuildArgParser()
-     */
-    public String getOtherMessages(boolean flush) {
-        if (null == errorSink) {
-            return null;
-        }
-        
-        String result = errorSink.toString().trim();
-        if (0 == result.length()) {
-            result = null;
-        }
-        if (flush) {
-            errorSink.setLength(0);
-        }
-        return result;
-    }
-
-       private void setDebugOptions() {  
-               options.put(
-                       CompilerOptions.OPTION_LocalVariableAttribute,
-                       CompilerOptions.GENERATE);
-               options.put(
-                       CompilerOptions.OPTION_LineNumberAttribute,
-                       CompilerOptions.GENERATE);
-               options.put(
-                       CompilerOptions.OPTION_SourceFileAttribute,
-                       CompilerOptions.GENERATE);
+       /**
+        * Get messages not dumped to handler or any PrintWriter.
+        * 
+        * @param flush if true, empty errors
+        * @return null if none, String otherwise
+        * @see BuildArgParser()
+        */
+       public String getOtherMessages(boolean flush) {
+               if (null == errorSink) {
+                       return null;
+               }
+
+               String result = errorSink.toString().trim();
+               if (0 == result.length()) {
+                       result = null;
+               }
+               if (flush) {
+                       errorSink.setLength(0);
+               }
+               return result;
        }
 
+       private void setDebugOptions() {
+               options.put(CompilerOptions.OPTION_LocalVariableAttribute, CompilerOptions.GENERATE);
+               options.put(CompilerOptions.OPTION_LineNumberAttribute, CompilerOptions.GENERATE);
+               options.put(CompilerOptions.OPTION_SourceFileAttribute, CompilerOptions.GENERATE);
+       }
 
        private Collection collectSourceRootFiles(File dir) {
                return Arrays.asList(FileUtil.listFiles(dir, FileUtil.aspectjSourceFileFilter));
        }
 
-    
        public List getBootclasspath(AjcConfigParser parser) {
                List ret = new ArrayList();
-       
-       if (parser.bootclasspath == null) {
-               addClasspath(System.getProperty("sun.boot.class.path", ""), ret);
-       } else {  
-               addClasspath(parser.bootclasspath, ret);
-       }
-       return ret;
+
+               if (parser.bootclasspath == null) {
+                       addClasspath(System.getProperty("sun.boot.class.path", ""), ret);
+               } else {
+                       addClasspath(parser.bootclasspath, ret);
+               }
+               return ret;
        }
-    /**
-     * If the classpath is not set, we use the environment's java.class.path, but remove
-     * the aspectjtools.jar entry from that list in order to prevent wierd bootstrap issues
-     * (refer to bug#39959).
-     */
-    public List getClasspath(AjcConfigParser parser) {
-       List ret = new ArrayList();
-       
-//     if (parser.bootclasspath == null) {
-//             addClasspath(System.getProperty("sun.boot.class.path", ""), ret);
-//     } else {  
-//             addClasspath(parser.bootclasspath, ret);
-//     }
+
+       /**
+        * If the classpath is not set, we use the environment's java.class.path, but remove the aspectjtools.jar entry from that list
+        * in order to prevent wierd bootstrap issues (refer to bug#39959).
+        */
+       public List getClasspath(AjcConfigParser parser) {
+               List ret = new ArrayList();
+
+               // if (parser.bootclasspath == null) {
+               // addClasspath(System.getProperty("sun.boot.class.path", ""), ret);
+               // } else {
+               // addClasspath(parser.bootclasspath, ret);
+               // }
 
                String extdirs = parser.extdirs;
                if (extdirs == null) {
-            extdirs = System.getProperty("java.ext.dirs", "");
-        }  
-        addExtDirs(extdirs, ret);
-               
-               if (parser.classpath == null) {                 
+                       extdirs = System.getProperty("java.ext.dirs", "");
+               }
+               addExtDirs(extdirs, ret);
+
+               if (parser.classpath == null) {
                        addClasspath(System.getProperty("java.class.path", ""), ret);
                        List fixedList = new ArrayList();
-                       for (Iterator it = ret.iterator(); it.hasNext(); ) {
-                               String entry = (String)it.next();
+                       for (Iterator it = ret.iterator(); it.hasNext();) {
+                               String entry = (String) it.next();
                                if (!entry.endsWith("aspectjtools.jar")) {
                                        fixedList.add(entry);
                                }
-                       }  
+                       }
                        ret = fixedList;
                } else {
-               addClasspath(parser.classpath, ret);
-               }       
-               //??? eclipse seems to put outdir on the classpath
-               //??? we're brave and believe we don't need it      
-           return ret;
-    }
+                       addClasspath(parser.classpath, ret);
+               }
+               // ??? eclipse seems to put outdir on the classpath
+               // ??? we're brave and believe we don't need it
+               return ret;
+       }
 
        private void addExtDirs(String extdirs, List classpathCollector) {
                StringTokenizer tokenizer = new StringTokenizer(extdirs, File.pathSeparator);
                while (tokenizer.hasMoreTokens()) {
-//                     classpathCollector.add(tokenizer.nextToken());
+                       // classpathCollector.add(tokenizer.nextToken());
                        File dirFile = new File(tokenizer.nextToken());
                        if (dirFile.canRead() && dirFile.isDirectory()) {
                                File[] files = dirFile.listFiles(FileUtil.ZIP_FILTER);
                                for (int i = 0; i < files.length; i++) {
-                                       classpathCollector.add(files[i].getAbsolutePath());     
+                                       classpathCollector.add(files[i].getAbsolutePath());
                                }
                        } else {
-                // XXX alert on invalid -extdirs entries
+                               // XXX alert on invalid -extdirs entries
                        }
-               }       
+               }
        }
 
-    
        private void addClasspath(String classpath, List classpathCollector) {
                StringTokenizer tokenizer = new StringTokenizer(classpath, File.pathSeparator);
                while (tokenizer.hasMoreTokens()) {
                        classpathCollector.add(tokenizer.nextToken());
-               }               
+               }
        }
-    
-    private class AjcConfigParser extends ConfigParser {
+
+       private class AjcConfigParser extends ConfigParser {
                private String bootclasspath = null;
                private String classpath = null;
-        private String extdirs = null;
-        private List unparsedArgs = new ArrayList();
+               private String extdirs = null;
+               private List unparsedArgs = new ArrayList();
                private AjBuildConfig buildConfig;
                private IMessageHandler handler;
-               
-        public AjcConfigParser(AjBuildConfig buildConfig, IMessageHandler handler) {
-               this.buildConfig = buildConfig; 
-               this.handler = handler;
-        }  
-        
-        public List getUnparsedArgs() {
-               return unparsedArgs;    
-        }
-        
-        /**
-         * Extract AspectJ-specific options (except for argfiles).
-         * Caller should warn when sourceroots is empty but in 
-         * incremental mode.
-         * Signals warnings or errors through handler set in constructor.
-         */
-        public void parseOption(String arg, LinkedList args) { // XXX use ListIterator.remove()
-                       int nextArgIndex = args.indexOf(arg)+1; // XXX assumes unique
-            // trim arg?
+
+               public AjcConfigParser(AjBuildConfig buildConfig, IMessageHandler handler) {
+                       this.buildConfig = buildConfig;
+                       this.handler = handler;
+               }
+
+               public List getUnparsedArgs() {
+                       return unparsedArgs;
+               }
+
+               /**
+                * Extract AspectJ-specific options (except for argfiles). Caller should warn when sourceroots is empty but in incremental
+                * mode. Signals warnings or errors through handler set in constructor.
+                */
+               public void parseOption(String arg, LinkedList args) { // XXX use ListIterator.remove()
+                       int nextArgIndex = args.indexOf(arg) + 1; // XXX assumes unique
+                       // trim arg?
                        buildConfig.setXlazyTjp(true); // now default - MINOR could be pushed down and made default at a lower level
-            if (LangUtil.isEmpty(arg)) {
-                showWarning("empty arg found");
-            } else if (arg.equals("-inpath")) {;
-               if (args.size() > nextArgIndex) {
-//                                     buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_Inpath, CompilerOptions.PRESERVE);
-                                       
+                       if (LangUtil.isEmpty(arg)) {
+                               showWarning("empty arg found");
+                       } else if (arg.equals("-inpath")) {
+                               if (args.size() > nextArgIndex) {
+                                       // buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_Inpath, CompilerOptions.PRESERVE);
+
                                        List inPath = buildConfig.getInpath();
-                                       StringTokenizer st = new StringTokenizer(
-                                               ((ConfigParser.Arg)args.get(nextArgIndex)).getValue(), 
-                                               File.pathSeparator);
+                                       StringTokenizer st = new StringTokenizer(((ConfigParser.Arg) args.get(nextArgIndex)).getValue(),
+                                                       File.pathSeparator);
                                        while (st.hasMoreTokens()) {
                                                String filename = st.nextToken();
                                                File file = makeFile(filename);
                                                if (FileUtil.isZipFile(file)) {
-                                                       inPath.add(file);    
+                                                       inPath.add(file);
                                                } else {
                                                        if (file.isDirectory()) {
                                                                inPath.add(file);
-                                                       } else 
-                                       
-                                                       showWarning("skipping missing, empty or corrupt inpath entry: " + filename);  
+                                                       } else
+
+                                                               showWarning("skipping missing, empty or corrupt inpath entry: " + filename);
                                                }
                                        }
                                        buildConfig.setInPath(inPath);
-                                       args.remove(args.get(nextArgIndex));                            
-               }
-            } else if (arg.equals("-injars")) {;
+                                       args.remove(args.get(nextArgIndex));
+                               }
+                       } else if (arg.equals("-injars")) {
                                if (args.size() > nextArgIndex) {
-//                                     buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_InJARs, CompilerOptions.PRESERVE);
-                                       
-                                       StringTokenizer st = new StringTokenizer(
-                                               ((ConfigParser.Arg)args.get(nextArgIndex)).getValue(), 
-                                               File.pathSeparator);
-                           while (st.hasMoreTokens()) {
-                               String filename = st.nextToken();
-                               File jarFile = makeFile(filename);
-                               if (FileUtil.isZipFile(jarFile)) {
-                                       buildConfig.getInJars().add(jarFile);    
-                               } else {
-                                       File dirFile = makeFile(filename);
-                                       if (dirFile.isDirectory()) {
-                                               buildConfig.getInJars().add(dirFile);
-                                       } else 
-                                       
-                            showWarning("skipping missing, empty or corrupt injar: " + filename);  
-                               }
-                           }
-                                       
-                                       args.remove(args.get(nextArgIndex));    
+                                       // buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_InJARs, CompilerOptions.PRESERVE);
+
+                                       StringTokenizer st = new StringTokenizer(((ConfigParser.Arg) args.get(nextArgIndex)).getValue(),
+                                                       File.pathSeparator);
+                                       while (st.hasMoreTokens()) {
+                                               String filename = st.nextToken();
+                                               File jarFile = makeFile(filename);
+                                               if (FileUtil.isZipFile(jarFile)) {
+                                                       buildConfig.getInJars().add(jarFile);
+                                               } else {
+                                                       File dirFile = makeFile(filename);
+                                                       if (dirFile.isDirectory()) {
+                                                               buildConfig.getInJars().add(dirFile);
+                                                       } else
+
+                                                               showWarning("skipping missing, empty or corrupt injar: " + filename);
+                                               }
+                                       }
+
+                                       args.remove(args.get(nextArgIndex));
                                }
-                       } else if (arg.equals("-aspectpath")) {;
+                       } else if (arg.equals("-aspectpath")) {
                                if (args.size() > nextArgIndex) {
-                                       StringTokenizer st = new StringTokenizer(
-                                               ((ConfigParser.Arg)args.get(nextArgIndex)).getValue(), 
-                                               File.pathSeparator);
-                           while (st.hasMoreTokens()) {
-                               String filename = st.nextToken();
-                               File jarFile = makeFile(filename);
-                        if (FileUtil.isZipFile(jarFile) || jarFile.isDirectory()) {
-                                       buildConfig.getAspectpath().add(jarFile);    
-                               } else {
-                            showWarning("skipping missing, empty or corrupt aspectpath entry: " + filename);  
-                               }
-                           }
-                                       
-                                       args.remove(args.get(nextArgIndex));    
+                                       StringTokenizer st = new StringTokenizer(((ConfigParser.Arg) args.get(nextArgIndex)).getValue(),
+                                                       File.pathSeparator);
+                                       while (st.hasMoreTokens()) {
+                                               String filename = st.nextToken();
+                                               File jarFile = makeFile(filename);
+                                               if (FileUtil.isZipFile(jarFile) || jarFile.isDirectory()) {
+                                                       buildConfig.getAspectpath().add(jarFile);
+                                               } else {
+                                                       showWarning("skipping missing, empty or corrupt aspectpath entry: " + filename);
+                                               }
+                                       }
+
+                                       args.remove(args.get(nextArgIndex));
                                }
                        } else if (arg.equals("-sourceroots")) {
                                if (args.size() > nextArgIndex) {
                                        List sourceRoots = new ArrayList();
-                                       StringTokenizer st = new StringTokenizer(
-                                               ((ConfigParser.Arg)args.get(nextArgIndex)).getValue(), 
-                                               File.pathSeparator);
-                           while (st.hasMoreTokens()) {
-                               File f = makeFile(st.nextToken());
-                               if (f.isDirectory() && f.canRead()) {
-                                       sourceRoots.add(f);
-                               } else {
-                            showError("bad sourceroot: " + f);
-                               }                                       
-                           }
-                                   if (0 < sourceRoots.size()) {
-                                               buildConfig.setSourceRoots(sourceRoots);        
+                                       StringTokenizer st = new StringTokenizer(((ConfigParser.Arg) args.get(nextArgIndex)).getValue(),
+                                                       File.pathSeparator);
+                                       while (st.hasMoreTokens()) {
+                                               File f = makeFile(st.nextToken());
+                                               if (f.isDirectory() && f.canRead()) {
+                                                       sourceRoots.add(f);
+                                               } else {
+                                                       showError("bad sourceroot: " + f);
+                                               }
+                                       }
+                                       if (0 < sourceRoots.size()) {
+                                               buildConfig.setSourceRoots(sourceRoots);
                                        }
                                        args.remove(args.get(nextArgIndex));
                                } else {
                                        showError("-sourceroots requires list of directories");
                                }
-                       } else if (arg.equals("-outjar")) { 
+                       } else if (arg.equals("-outjar")) {
                                if (args.size() > nextArgIndex) {
-//                                     buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_OutJAR, CompilerOptions.GENERATE);
-                                       File jarFile = makeFile(((ConfigParser.Arg)args.get(nextArgIndex)).getValue());
+                                       // buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_OutJAR, CompilerOptions.GENERATE);
+                                       File jarFile = makeFile(((ConfigParser.Arg) args.get(nextArgIndex)).getValue());
                                        if (!jarFile.isDirectory()) {
                                                try {
                                                        if (!jarFile.exists()) {
-                                jarFile.createNewFile();
-                            }
-                            buildConfig.setOutputJar(jarFile);  
-                                               } catch (IOException ioe) { 
-                            showError("unable to create outjar file: " + jarFile);
+                                                               jarFile.createNewFile();
+                                                       }
+                                                       buildConfig.setOutputJar(jarFile);
+                                               } catch (IOException ioe) {
+                                                       showError("unable to create outjar file: " + jarFile);
                                                }
                                        } else {
                                                showError("invalid -outjar file: " + jarFile);
@@ -512,36 +487,36 @@ public class BuildArgParser extends Main {
                                } else {
                                        showError("-outjar requires jar path argument");
                                }
-                       } else if (arg.equals("-outxml")) { 
-                buildConfig.setOutxmlName(org.aspectj.bridge.Constants.AOP_AJC_XML);  
-                       } else if (arg.equals("-outxmlfile")) { 
+                       } else if (arg.equals("-outxml")) {
+                               buildConfig.setOutxmlName(org.aspectj.bridge.Constants.AOP_AJC_XML);
+                       } else if (arg.equals("-outxmlfile")) {
                                if (args.size() > nextArgIndex) {
-                                       String name = ((ConfigParser.Arg)args.get(nextArgIndex)).getValue();
-                       buildConfig.setOutxmlName(name);  
+                                       String name = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue();
+                                       buildConfig.setOutxmlName(name);
                                        args.remove(args.get(nextArgIndex));
                                } else {
                                        showError("-outxmlfile requires file name argument");
                                }
-            } else if (arg.equals("-log")){
+                       } else if (arg.equals("-log")) {
                                // remove it as it's already been handled in org.aspectj.tools.ajc.Main
                                args.remove(args.get(nextArgIndex));
-            } else if (arg.equals("-messageHolder")) {
+                       } else if (arg.equals("-messageHolder")) {
                                // remove it as it's already been handled in org.aspectj.tools.ajc.Main
-                               args.remove(args.get(nextArgIndex));                                
-               }else if (arg.equals("-incremental")) {
-                buildConfig.setIncrementalMode(true);
-            } else if (arg.equals("-XincrementalFile")) {
-                if (args.size() > nextArgIndex) {
-                    File file = makeFile(((ConfigParser.Arg)args.get(nextArgIndex)).getValue());
-                    buildConfig.setIncrementalFile(file);
-                    if (!file.canRead()) {
-                        showError("bad -XincrementalFile : " + file);
-                        // if not created before recompile test, stop after first compile
-                    }
-                    args.remove(args.get(nextArgIndex));
-                } else {
-                    showError("-XincrementalFile requires file argument");
-                }
+                               args.remove(args.get(nextArgIndex));
+                       } else if (arg.equals("-incremental")) {
+                               buildConfig.setIncrementalMode(true);
+                       } else if (arg.equals("-XincrementalFile")) {
+                               if (args.size() > nextArgIndex) {
+                                       File file = makeFile(((ConfigParser.Arg) args.get(nextArgIndex)).getValue());
+                                       buildConfig.setIncrementalFile(file);
+                                       if (!file.canRead()) {
+                                               showError("bad -XincrementalFile : " + file);
+                                               // if not created before recompile test, stop after first compile
+                                       }
+                                       args.remove(args.get(nextArgIndex));
+                               } else {
+                                       showError("-XincrementalFile requires file argument");
+                               }
                        } else if (arg.equals("-crossrefs")) {
                                buildConfig.setGenerateCrossRefsMode(true);
                                buildConfig.setGenerateModelMode(true);
@@ -560,44 +535,44 @@ public class BuildArgParser extends Main {
                        } else if (arg.equals("-XjavadocsInModel")) {
                                buildConfig.setGenerateModelMode(true);
                                buildConfig.setGenerateJavadocsInModelMode(true);
-                       } else if (arg.equals("-Xdev:NoAtAspectJProcessing")) { 
+                       } else if (arg.equals("-Xdev:NoAtAspectJProcessing")) {
                                buildConfig.setNoAtAspectJAnnotationProcessing(true);
                        } else if (arg.equals("-XaddSerialVersionUID")) {
                                buildConfig.setAddSerialVerUID(true);
-               } else if (arg.equals("-Xdev:Pinpoint")) { 
+                       } else if (arg.equals("-Xdev:Pinpoint")) {
                                buildConfig.setXdevPinpointMode(true);
-               } else if (arg.startsWith("-Xjoinpoints:")) {
-                       buildConfig.setXJoinpoints(arg.substring(13));
-               } else if (arg.equals("-noWeave") || arg.equals( "-XnoWeave")) {
+                       } else if (arg.startsWith("-Xjoinpoints:")) {
+                               buildConfig.setXJoinpoints(arg.substring(13));
+                       } else if (arg.equals("-noWeave") || arg.equals("-XnoWeave")) {
                                showWarning("the noweave option is no longer required and is being ignored");
-               } else if (arg.equals( "-XterminateAfterCompilation")) {
+                       } else if (arg.equals("-XterminateAfterCompilation")) {
                                buildConfig.setTerminateAfterCompilation(true);
                        } else if (arg.equals("-XserializableAspects")) {
                                buildConfig.setXserializableAspects(true);
                        } else if (arg.equals("-XlazyTjp")) {
                                // do nothing as this is now on by default
                                showWarning("-XlazyTjp should no longer be used, build tjps lazily is now the default");
-            } else if (arg.startsWith("-Xreweavable")) {
-               showWarning("-Xreweavable is on by default");
-               if (arg.endsWith(":compress")) {
-                       showWarning("-Xreweavable:compress is no longer available - reweavable is now default");
-               }
+                       } else if (arg.startsWith("-Xreweavable")) {
+                               showWarning("-Xreweavable is on by default");
+                               if (arg.endsWith(":compress")) {
+                                       showWarning("-Xreweavable:compress is no longer available - reweavable is now default");
+                               }
                        } else if (arg.startsWith("-Xset:")) {
                                buildConfig.setXconfigurationInfo(arg.substring(6));
                        } else if (arg.startsWith("-XnotReweavable")) {
-               buildConfig.setXnotReweavable(true);
+                               buildConfig.setXnotReweavable(true);
                        } else if (arg.equals("-XnoInline")) {
                                buildConfig.setXnoInline(true);
-            } else if (arg.equals("-XhasMember")) {
-               buildConfig.setXHasMemberSupport(true);
-            }  else if (arg.startsWith("-showWeaveInfo")) {                    
-                buildConfig.setShowWeavingInformation(true);
-                       } else if (arg.equals("-Xlintfile")) { 
+                       } else if (arg.equals("-XhasMember")) {
+                               buildConfig.setXHasMemberSupport(true);
+                       } else if (arg.startsWith("-showWeaveInfo")) {
+                               buildConfig.setShowWeavingInformation(true);
+                       } else if (arg.equals("-Xlintfile")) {
                                if (args.size() > nextArgIndex) {
-                                       File lintSpecFile = makeFile(((ConfigParser.Arg)args.get(nextArgIndex)).getValue());
-                    // XXX relax restriction on props file suffix?
+                                       File lintSpecFile = makeFile(((ConfigParser.Arg) args.get(nextArgIndex)).getValue());
+                                       // XXX relax restriction on props file suffix?
                                        if (lintSpecFile.canRead() && lintSpecFile.getName().endsWith(".properties")) {
-                                               buildConfig.setLintSpecFile(lintSpecFile);      
+                                               buildConfig.setLintSpecFile(lintSpecFile);
                                        } else {
                                                showError("bad -Xlintfile file: " + lintSpecFile);
                                                buildConfig.setLintSpecFile(null);
@@ -606,162 +581,164 @@ public class BuildArgParser extends Main {
                                } else {
                                        showError("-Xlintfile requires .properties file argument");
                                }
-            } else if (arg.equals("-Xlint")) {
-//                buildConfig.getAjOptions().put(
-//                    AjCompilerOptions.OPTION_Xlint,
-//                    CompilerOptions.GENERATE);
-                buildConfig.setLintMode(AjBuildConfig.AJLINT_DEFAULT);
-            } else if (arg.startsWith("-Xlint:")) {
-                if (7 < arg.length()) {
-                    buildConfig.setLintMode(arg.substring(7));
-                } else {
-                    showError("invalid lint option " + arg);
-                }
+                       } else if (arg.equals("-Xlint")) {
+                               // buildConfig.getAjOptions().put(
+                               // AjCompilerOptions.OPTION_Xlint,
+                               // CompilerOptions.GENERATE);
+                               buildConfig.setLintMode(AjBuildConfig.AJLINT_DEFAULT);
+                       } else if (arg.startsWith("-Xlint:")) {
+                               if (7 < arg.length()) {
+                                       buildConfig.setLintMode(arg.substring(7));
+                               } else {
+                                       showError("invalid lint option " + arg);
+                               }
                        } else if (arg.equals("-bootclasspath")) {
                                if (args.size() > nextArgIndex) {
-                                       String bcpArg = ((ConfigParser.Arg)args.get(nextArgIndex)).getValue();
+                                       String bcpArg = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue();
                                        StringBuffer bcp = new StringBuffer();
-                                       StringTokenizer strTok = new StringTokenizer(bcpArg,File.pathSeparator);
+                                       StringTokenizer strTok = new StringTokenizer(bcpArg, File.pathSeparator);
                                        while (strTok.hasMoreTokens()) {
-                                           bcp.append(makeFile(strTok.nextToken()));
-                                           if (strTok.hasMoreTokens()) {
-                                               bcp.append(File.pathSeparator);
-                                           }
+                                               bcp.append(makeFile(strTok.nextToken()));
+                                               if (strTok.hasMoreTokens()) {
+                                                       bcp.append(File.pathSeparator);
+                                               }
                                        }
                                        bootclasspath = bcp.toString();
-                                       args.remove(args.get(nextArgIndex));    
+                                       args.remove(args.get(nextArgIndex));
                                } else {
                                        showError("-bootclasspath requires classpath entries");
                                }
                        } else if (arg.equals("-classpath") || arg.equals("-cp")) {
                                if (args.size() > nextArgIndex) {
-                                       String cpArg = ((ConfigParser.Arg)args.get(nextArgIndex)).getValue();
+                                       String cpArg = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue();
                                        StringBuffer cp = new StringBuffer();
-                                       StringTokenizer strTok = new StringTokenizer(cpArg,File.pathSeparator);
+                                       StringTokenizer strTok = new StringTokenizer(cpArg, File.pathSeparator);
                                        while (strTok.hasMoreTokens()) {
-                                           cp.append(makeFile(strTok.nextToken()));
-                                           if (strTok.hasMoreTokens()) {
-                                               cp.append(File.pathSeparator);
-                                           }
+                                               cp.append(makeFile(strTok.nextToken()));
+                                               if (strTok.hasMoreTokens()) {
+                                                       cp.append(File.pathSeparator);
+                                               }
                                        }
                                        classpath = cp.toString();
-                                       args.remove(args.get(nextArgIndex));    
+                                       args.remove(args.get(nextArgIndex));
                                } else {
                                        showError("-classpath requires classpath entries");
                                }
                        } else if (arg.equals("-extdirs")) {
                                if (args.size() > nextArgIndex) {
-                                       String extdirsArg = ((ConfigParser.Arg)args.get(nextArgIndex)).getValue();
+                                       String extdirsArg = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue();
                                        StringBuffer ed = new StringBuffer();
-                                       StringTokenizer strTok = new StringTokenizer(extdirsArg,File.pathSeparator);
+                                       StringTokenizer strTok = new StringTokenizer(extdirsArg, File.pathSeparator);
                                        while (strTok.hasMoreTokens()) {
-                                           ed.append(makeFile(strTok.nextToken()));
-                                           if (strTok.hasMoreTokens()) {
-                                               ed.append(File.pathSeparator);
-                                           }
-                                       }                                       
+                                               ed.append(makeFile(strTok.nextToken()));
+                                               if (strTok.hasMoreTokens()) {
+                                                       ed.append(File.pathSeparator);
+                                               }
+                                       }
                                        extdirs = ed.toString();
                                        args.remove(args.get(nextArgIndex));
-                } else {
-                    showError("-extdirs requires list of external directories");
-                }
-            // error on directory unless -d, -{boot}classpath, or -extdirs
-            } else if (arg.equals("-d")) {
-                dirLookahead(arg, args, nextArgIndex);
-//            } else if (arg.equals("-classpath")) {
-//                dirLookahead(arg, args, nextArgIndex);
-//            } else if (arg.equals("-bootclasspath")) {
-//                dirLookahead(arg, args, nextArgIndex);
-//            } else if (arg.equals("-extdirs")) {
-//                dirLookahead(arg, args, nextArgIndex);
-            } else if (arg.equals("-proceedOnError")) {
-               buildConfig.setProceedOnError(true);
-            } else if (new File(arg).isDirectory()) {
-                showError("dir arg not permitted: " + arg);
-            } else if (arg.startsWith("-Xajruntimetarget")) {
-                       if (arg.endsWith(":1.2")) {
-                       buildConfig.setTargetAspectjRuntimeLevel(Constants.RUNTIME_LEVEL_12);
-                       } else if (arg.endsWith(":1.5")) {
-                       buildConfig.setTargetAspectjRuntimeLevel(Constants.RUNTIME_LEVEL_15);
-                       } else {
-                               showError("-Xajruntimetarget:<level> only supports a target level of 1.2 or 1.5");
-                       }
-            } else if (arg.equals("-timers")) {
-                // swallow - it is dealt with in Main.runMain()
-            } else if (arg.equals("-1.5")) {
-               buildConfig.setBehaveInJava5Way(true);
-               unparsedArgs.add("-1.5");
-// this would enable the '-source 1.5' to do the same as '-1.5' but doesnt sound quite right as
-// as an option right now as it doesnt mean we support 1.5 source code - people will get confused...
-            } else if (arg.equals("-1.6")) {
-               buildConfig.setBehaveInJava5Way(true);
-               unparsedArgs.add("-1.6");
-            } else if (arg.equals("-source")) {
-               if (args.size() > nextArgIndex) {
-                       String level = ((ConfigParser.Arg)args.get(nextArgIndex)).getValue();
-                       if (level.equals("1.5") || level.equals("5") ||
-                               level.equals("1.6") || level.equals("6")) {
-                               buildConfig.setBehaveInJava5Way(true);
-                       }
-                       unparsedArgs.add("-source");
-                       unparsedArgs.add(level);
-                       args.remove(args.get(nextArgIndex));
-               }
+                               } else {
+                                       showError("-extdirs requires list of external directories");
+                               }
+                               // error on directory unless -d, -{boot}classpath, or -extdirs
+                       } else if (arg.equals("-d")) {
+                               dirLookahead(arg, args, nextArgIndex);
+                               // } else if (arg.equals("-classpath")) {
+                               // dirLookahead(arg, args, nextArgIndex);
+                               // } else if (arg.equals("-bootclasspath")) {
+                               // dirLookahead(arg, args, nextArgIndex);
+                               // } else if (arg.equals("-extdirs")) {
+                               // dirLookahead(arg, args, nextArgIndex);
+                       } else if (arg.equals("-proceedOnError")) {
+                               buildConfig.setProceedOnError(true);
+                       } else if (new File(arg).isDirectory()) {
+                               showError("dir arg not permitted: " + arg);
+                       } else if (arg.startsWith("-Xajruntimetarget")) {
+                               if (arg.endsWith(":1.2")) {
+                                       buildConfig.setTargetAspectjRuntimeLevel(Constants.RUNTIME_LEVEL_12);
+                               } else if (arg.endsWith(":1.5")) {
+                                       buildConfig.setTargetAspectjRuntimeLevel(Constants.RUNTIME_LEVEL_15);
+                               } else {
+                                       showError("-Xajruntimetarget:<level> only supports a target level of 1.2 or 1.5");
+                               }
+                       } else if (arg.equals("-timers")) {
+                               // swallow - it is dealt with in Main.runMain()
+                       } else if (arg.equals("-1.5")) {
+                               buildConfig.setBehaveInJava5Way(true);
+                               unparsedArgs.add("-1.5");
+                               // this would enable the '-source 1.5' to do the same as '-1.5' but doesnt sound quite right as
+                               // as an option right now as it doesnt mean we support 1.5 source code - people will get confused...
+                       } else if (arg.equals("-1.6")) {
+                               buildConfig.setBehaveInJava5Way(true);
+                               unparsedArgs.add("-1.6");
+                       } else if (arg.equals("-source")) {
+                               if (args.size() > nextArgIndex) {
+                                       String level = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue();
+                                       if (level.equals("1.5") || level.equals("5") || level.equals("1.6") || level.equals("6")) {
+                                               buildConfig.setBehaveInJava5Way(true);
+                                       }
+                                       unparsedArgs.add("-source");
+                                       unparsedArgs.add(level);
+                                       args.remove(args.get(nextArgIndex));
+                               }
                        } else {
-                // argfile, @file parsed by superclass
-                // no eclipse options parsed:
-                // -d args, -help (handled), 
-                // -classpath, -target, -1.3, -1.4, -source [1.3|1.4]
-                // -nowarn, -warn:[...], -deprecation, -noImportError,
-                // -g:[...], -preserveAllLocals,
-                // -referenceInfo, -encoding, -verbose, -log, -time
-                // -noExit, -repeat
+                               // argfile, @file parsed by superclass
+                               // no eclipse options parsed:
+                               // -d args, -help (handled),
+                               // -classpath, -target, -1.3, -1.4, -source [1.3|1.4]
+                               // -nowarn, -warn:[...], -deprecation, -noImportError,
+                               // -g:[...], -preserveAllLocals,
+                               // -referenceInfo, -encoding, -verbose, -log, -time
+                               // -noExit, -repeat
                                // (Actually, -noExit grabbed by Main)
-                       unparsedArgs.add(arg);
+                               unparsedArgs.add(arg);
+                       }
+               }
+
+               protected void dirLookahead(String arg, LinkedList argList, int nextArgIndex) {
+                       unparsedArgs.add(arg);
+                       ConfigParser.Arg next = (ConfigParser.Arg) argList.get(nextArgIndex);
+                       String value = next.getValue();
+                       if (!LangUtil.isEmpty(value)) {
+                               if (new File(value).isDirectory()) {
+                                       unparsedArgs.add(value);
+                                       argList.remove(next);
+                                       return;
+                               }
                        }
-        }
-        protected void dirLookahead(String arg, LinkedList argList, int nextArgIndex) {
-            unparsedArgs.add(arg);
-            ConfigParser.Arg next = (ConfigParser.Arg) argList.get(nextArgIndex);
-            String value = next.getValue();
-            if (!LangUtil.isEmpty(value)) {
-                if (new File(value).isDirectory()) {
-                    unparsedArgs.add(value);
-                    argList.remove(next);
-                    return;
-                }
-            }
-        }
-
-        public void showError(String message) {
+               }
+
+               public void showError(String message) {
                        ISourceLocation location = null;
                        if (buildConfig.getConfigFile() != null) {
-                               location = new SourceLocation(buildConfig.getConfigFile(), 0); 
-                       } 
+                               location = new SourceLocation(buildConfig.getConfigFile(), 0);
+                       }
                        IMessage errorMessage = new Message(CONFIG_MSG + message, IMessage.ERROR, null, location);
                        handler.handleMessage(errorMessage);
-//            MessageUtil.error(handler, CONFIG_MSG + message);
-        }
-        
+                       // MessageUtil.error(handler, CONFIG_MSG + message);
+               }
+
                protected void showWarning(String message) {
                        ISourceLocation location = null;
                        if (buildConfig.getConfigFile() != null) {
-                               location = new SourceLocation(buildConfig.getConfigFile(), 0); 
-                       } 
+                               location = new SourceLocation(buildConfig.getConfigFile(), 0);
+                       }
                        IMessage errorMessage = new Message(CONFIG_MSG + message, IMessage.WARNING, null, location);
                        handler.handleMessage(errorMessage);
-//            MessageUtil.warn(handler, message);
-        }
-               
+                       // MessageUtil.warn(handler, message);
+               }
+
                protected File makeFile(File dir, String name) {
                        name = name.replace('/', File.separatorChar);
                        File ret = new File(name);
-                       if (dir == null || ret.isAbsolute()) return ret;
+                       if (dir == null || ret.isAbsolute())
+                               return ret;
                        try {
                                dir = dir.getCanonicalFile();
-                       } catch (IOException ioe) { }
+                       } catch (IOException ioe) {
+                       }
                        return new File(dir, name);
                }
 
-    }
+       }
 }
index b4a2fae407c13a0632868b94bae92348b7456239..ae62d46a9a139357d3d4cf72a50948c4d896d658 100644 (file)
@@ -38,84 +38,91 @@ import org.aspectj.weaver.UnresolvedType;
 import org.aspectj.weaver.World;
 
 /**
- * In the pipeline world, we can be weaving before all types have come through from compilation.
- * In some cases this means the weaver will want to ask questions of eclipse types and this
- * subtype of ResolvedMemberImpl is here to answer some of those questions - it is backed by 
- * the real eclipse MethodBinding object and can translate from Eclipse -> Weaver information.
- */ 
+ * In the pipeline world, we can be weaving before all types have come through from compilation. In some cases this means the weaver
+ * will want to ask questions of eclipse types and this subtype of ResolvedMemberImpl is here to answer some of those questions - it
+ * is backed by the real eclipse MethodBinding object and can translate from Eclipse -> Weaver information.
+ */
 public class EclipseResolvedMember extends ResolvedMemberImpl {
-       
-       private static String[] NO_ARGS = new String[]{};
-       
+
+       private static String[] NO_ARGS = new String[] {};
+
        private Binding realBinding;
        private String[] argumentNames;
        private World w;
        private ResolvedType[] cachedAnnotationTypes;
        private EclipseFactory eclipseFactory;
-       
-       public EclipseResolvedMember(MethodBinding binding, MemberKind memberKind, ResolvedType realDeclaringType, int modifiers, UnresolvedType rettype, String name, UnresolvedType[] paramtypes, UnresolvedType[] extypes, EclipseFactory eclipseFactory) {
-               super(memberKind,realDeclaringType,modifiers,rettype,name,paramtypes,extypes);
+
+       public EclipseResolvedMember(MethodBinding binding, MemberKind memberKind, ResolvedType realDeclaringType, int modifiers,
+                       UnresolvedType rettype, String name, UnresolvedType[] paramtypes, UnresolvedType[] extypes,
+                       EclipseFactory eclipseFactory) {
+               super(memberKind, realDeclaringType, modifiers, rettype, name, paramtypes, extypes);
                this.realBinding = binding;
                this.eclipseFactory = eclipseFactory;
                this.w = realDeclaringType.getWorld();
        }
 
-       public EclipseResolvedMember(FieldBinding binding, MemberKind field, ResolvedType realDeclaringType, int modifiers, ResolvedType type, String string, UnresolvedType[] none) {
-               super(field,realDeclaringType,modifiers,type,string,none);
+       public EclipseResolvedMember(FieldBinding binding, MemberKind field, ResolvedType realDeclaringType, int modifiers,
+                       ResolvedType type, String string, UnresolvedType[] none) {
+               super(field, realDeclaringType, modifiers, type, string, none);
                this.realBinding = binding;
                this.w = realDeclaringType.getWorld();
        }
-       
 
        public boolean hasAnnotation(UnresolvedType ofType) {
                ResolvedType[] annotationTypes = getAnnotationTypes();
-               if (annotationTypes==null) return false;
+               if (annotationTypes == null)
+                       return false;
                for (int i = 0; i < annotationTypes.length; i++) {
                        ResolvedType type = annotationTypes[i];
-                       if (type.equals(ofType)) return true;
+                       if (type.equals(ofType))
+                               return true;
                }
                return false;
        }
 
        public AnnotationX[] getAnnotations() {
-               long abits = realBinding.getAnnotationTagBits(); // ensure resolved
+               // long abits =
+               realBinding.getAnnotationTagBits(); // ensure resolved
                Annotation[] annos = getEclipseAnnotations();
-               if (annos==null) return null;
-               // TODO errr missing in action - we need to implement this! Probably using something like EclipseAnnotationConvertor - itself not finished ;)
+               if (annos == null)
+                       return null;
+               // TODO errr missing in action - we need to implement this! Probably using something like EclipseAnnotationConvertor -
+               // itself not finished ;)
                throw new RuntimeException("not yet implemented - please raise an AJ bug");
-//             return super.getAnnotations();
+               // return super.getAnnotations();
        }
-       
 
        public AnnotationX getAnnotationOfType(UnresolvedType ofType) {
-               long abits = realBinding.getAnnotationTagBits(); // ensure resolved
+               // long abits =
+               realBinding.getAnnotationTagBits(); // ensure resolved
                Annotation[] annos = getEclipseAnnotations();
-               if (annos==null) return null;
+               if (annos == null)
+                       return null;
                for (int i = 0; i < annos.length; i++) {
                        Annotation anno = annos[i];
                        UnresolvedType ut = UnresolvedType.forSignature(new String(anno.resolvedType.signature()));
                        if (w.resolve(ut).equals(ofType)) {
                                // Found the one
-                               return EclipseAnnotationConvertor.convertEclipseAnnotation(anno,w,eclipseFactory);
+                               return EclipseAnnotationConvertor.convertEclipseAnnotation(anno, w, eclipseFactory);
                        }
                }
                return null;
        }
-       
+
        public String getAnnotationDefaultValue() {
                if (realBinding instanceof MethodBinding) {
-                       AbstractMethodDeclaration methodDecl = getTypeDeclaration().declarationOf((MethodBinding)realBinding);
+                       AbstractMethodDeclaration methodDecl = getTypeDeclaration().declarationOf((MethodBinding) realBinding);
                        if (methodDecl instanceof AnnotationMethodDeclaration) {
-                               AnnotationMethodDeclaration annoMethodDecl = (AnnotationMethodDeclaration)methodDecl;
+                               AnnotationMethodDeclaration annoMethodDecl = (AnnotationMethodDeclaration) methodDecl;
                                Expression e = annoMethodDecl.defaultValue;
-                               if (e.resolvedType==null)
-                               e.resolve(methodDecl.scope);
+                               if (e.resolvedType == null)
+                                       e.resolve(methodDecl.scope);
                                // TODO does not cope with many cases...
                                if (e instanceof QualifiedNameReference) {
-                                       
-                                       QualifiedNameReference qnr = (QualifiedNameReference)e;
+
+                                       QualifiedNameReference qnr = (QualifiedNameReference) e;
                                        if (qnr.binding instanceof FieldBinding) {
-                                               FieldBinding fb = (FieldBinding)qnr.binding;
+                                               FieldBinding fb = (FieldBinding) qnr.binding;
                                                StringBuffer sb = new StringBuffer();
                                                sb.append(fb.declaringClass.signature());
                                                sb.append(fb.name);
@@ -126,11 +133,12 @@ public class EclipseResolvedMember extends ResolvedMemberImpl {
                                } else if (e instanceof FalseLiteral) {
                                        return "false";
                                } else if (e instanceof StringLiteral) {
-                                       return new String(((StringLiteral)e).source());
+                                       return new String(((StringLiteral) e).source());
                                } else if (e instanceof IntLiteral) {
-                                       return Integer.toString(((IntConstant)e.constant).intValue());
+                                       return Integer.toString(((IntConstant) e.constant).intValue());
                                } else {
-                                       throw new BCException("EclipseResolvedMember.getAnnotationDefaultValue() not implemented for value of type '"+e.getClass()+"' - raise an AspectJ bug !");
+                                       throw new BCException("EclipseResolvedMember.getAnnotationDefaultValue() not implemented for value of type '"
+                                                       + e.getClass() + "' - raise an AspectJ bug !");
                                }
                        }
                }
@@ -141,7 +149,7 @@ public class EclipseResolvedMember extends ResolvedMemberImpl {
                if (cachedAnnotationTypes == null) {
                        long abits = realBinding.getAnnotationTagBits(); // ensure resolved
                        Annotation[] annos = getEclipseAnnotations();
-                       if (annos==null) { 
+                       if (annos == null) {
                                cachedAnnotationTypes = ResolvedType.EMPTY_RESOLVED_TYPE_ARRAY;
                        } else {
                                cachedAnnotationTypes = new ResolvedType[annos.length];
@@ -153,19 +161,20 @@ public class EclipseResolvedMember extends ResolvedMemberImpl {
                }
                return cachedAnnotationTypes;
        }
-       
 
-       
        public String[] getParameterNames() {
-               if (argumentNames!=null) return argumentNames;
+               if (argumentNames != null)
+                       return argumentNames;
                if (realBinding instanceof FieldBinding) {
-                       argumentNames=NO_ARGS;
+                       argumentNames = NO_ARGS;
                } else {
                        TypeDeclaration typeDecl = getTypeDeclaration();
-                       AbstractMethodDeclaration methodDecl =(typeDecl==null?null:typeDecl.declarationOf((MethodBinding)realBinding));
-                       Argument[] args = (methodDecl==null?null:methodDecl.arguments); // dont like this - why isnt the method found sometimes? is it because other errors are being reported?
-                       if (args==null) {
-                               argumentNames=NO_ARGS;
+                       AbstractMethodDeclaration methodDecl = (typeDecl == null ? null : typeDecl.declarationOf((MethodBinding) realBinding));
+                       Argument[] args = (methodDecl == null ? null : methodDecl.arguments); // dont like this - why isnt the method found
+                       // sometimes? is it because other errors are
+                       // being reported?
+                       if (args == null) {
+                               argumentNames = NO_ARGS;
                        } else {
                                argumentNames = new String[args.length];
                                for (int i = 0; i < argumentNames.length; i++) {
@@ -175,13 +184,13 @@ public class EclipseResolvedMember extends ResolvedMemberImpl {
                }
                return argumentNames;
        }
-       
+
        private Annotation[] getEclipseAnnotations() {
                if (realBinding instanceof MethodBinding) {
-                       AbstractMethodDeclaration methodDecl = getTypeDeclaration().declarationOf((MethodBinding)realBinding);
+                       AbstractMethodDeclaration methodDecl = getTypeDeclaration().declarationOf((MethodBinding) realBinding);
                        return methodDecl.annotations;
                } else if (realBinding instanceof FieldBinding) {
-                       FieldDeclaration fieldDecl = getTypeDeclaration().declarationOf((FieldBinding)realBinding);
+                       FieldDeclaration fieldDecl = getTypeDeclaration().declarationOf((FieldBinding) realBinding);
                        return fieldDecl.annotations;
                }
                return null;
@@ -189,25 +198,27 @@ public class EclipseResolvedMember extends ResolvedMemberImpl {
 
        private TypeDeclaration getTypeDeclaration() {
                if (realBinding instanceof MethodBinding) {
-                       MethodBinding mb = (MethodBinding)realBinding;
-                       if (mb!=null) {
-                               SourceTypeBinding stb = (SourceTypeBinding)mb.declaringClass;
-                               if (stb!=null) {
+                       MethodBinding mb = (MethodBinding) realBinding;
+                       if (mb != null) {
+                               SourceTypeBinding stb = (SourceTypeBinding) mb.declaringClass;
+                               if (stb != null) {
                                        ClassScope cScope = stb.scope;
-                                       if (cScope!=null) return cScope.referenceContext;
+                                       if (cScope != null)
+                                               return cScope.referenceContext;
                                }
-                       }                       
+                       }
                } else if (realBinding instanceof FieldBinding) {
-                       FieldBinding fb = (FieldBinding)realBinding;
-                       if (fb!=null) {
-                               SourceTypeBinding stb = (SourceTypeBinding)fb.declaringClass;
-                               if (stb!=null) {
+                       FieldBinding fb = (FieldBinding) realBinding;
+                       if (fb != null) {
+                               SourceTypeBinding stb = (SourceTypeBinding) fb.declaringClass;
+                               if (stb != null) {
                                        ClassScope cScope = stb.scope;
-                                       if (cScope!=null) return cScope.referenceContext;
+                                       if (cScope != null)
+                                               return cScope.referenceContext;
                                }
                        }
                }
                return null;
        }
-       
+
 }
index 027e401624b6dd78ce060a6e5e24ce96cff1e75c..c9043ffc5d0290e96d298e47f31147f379aa3ee0 100644 (file)
@@ -10,8 +10,7 @@
  *     PARC     initial implementation 
  * ******************************************************************/
 
- package org.aspectj.ajdt.internal.compiler.problem;
+package org.aspectj.ajdt.internal.compiler.problem;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -64,77 +63,68 @@ import org.aspectj.weaver.patterns.DeclareSoft;
 import org.aspectj.weaver.patterns.TypePattern;
 
 /**
- * Extends problem reporter to support compiler-side implementation of declare soft. 
- * Also overrides error reporting for the need to implement abstract methods to
- * account for inter-type declarations and pointcut declarations.  This second
- * job might be better done directly in the SourceTypeBinding/ClassScope classes.
+ * Extends problem reporter to support compiler-side implementation of declare soft. Also overrides error reporting for the need to
+ * implement abstract methods to account for inter-type declarations and pointcut declarations. This second job might be better done
+ * directly in the SourceTypeBinding/ClassScope classes.
  * 
  * @author Jim Hugunin
  */
 public class AjProblemReporter extends ProblemReporter {
-    
+
        private static final boolean DUMP_STACK = false;
-       
+
        public EclipseFactory factory;
 
-       public AjProblemReporter(
-               IErrorHandlingPolicy policy,
-               CompilerOptions options,
-               IProblemFactory problemFactory) {
+       public AjProblemReporter(IErrorHandlingPolicy policy, CompilerOptions options, IProblemFactory problemFactory) {
                super(policy, options, problemFactory);
        }
-       
-       
 
-       public void unhandledException(
-               TypeBinding exceptionType,
-               ASTNode location)
-       {
+       public void unhandledException(TypeBinding exceptionType, ASTNode location) {
                if (!factory.getWorld().getDeclareSoft().isEmpty()) {
                        Shadow callSite = factory.makeShadow(location, referenceContext);
                        Shadow enclosingExec = factory.makeShadow(referenceContext);
                        // PR 72157 - calls to super / this within a constructor are not part of the cons join point.
                        if ((callSite == null) && (enclosingExec.getKind() == Shadow.ConstructorExecution)
-                               && (location instanceof ExplicitConstructorCall)) {
+                                       && (location instanceof ExplicitConstructorCall)) {
                                super.unhandledException(exceptionType, location);
                                return;
                        }
-//                     System.err.println("about to show error for unhandled exception: "  + new String(exceptionType.sourceName()) + 
-//                                     " at " + location + " in " + referenceContext);         
-                       
-                       for (Iterator i = factory.getWorld().getDeclareSoft().iterator(); i.hasNext(); ) {
-                               DeclareSoft d = (DeclareSoft)i.next();
+                       // System.err.println("about to show error for unhandled exception: " + new String(exceptionType.sourceName()) +
+                       // " at " + location + " in " + referenceContext);
+
+                       for (Iterator i = factory.getWorld().getDeclareSoft().iterator(); i.hasNext();) {
+                               DeclareSoft d = (DeclareSoft) i.next();
                                // We need the exceptionType to match the type in the declare soft statement
                                // This means it must either be the same type or a subtype
-                               ResolvedType throwException = factory.fromEclipse((ReferenceBinding)exceptionType);
-                               FuzzyBoolean isExceptionTypeOrSubtype = 
-                                       d.getException().matchesInstanceof(throwException);
-                               if (!isExceptionTypeOrSubtype.alwaysTrue() ) continue;
+                               ResolvedType throwException = factory.fromEclipse((ReferenceBinding) exceptionType);
+                               FuzzyBoolean isExceptionTypeOrSubtype = d.getException().matchesInstanceof(throwException);
+                               if (!isExceptionTypeOrSubtype.alwaysTrue())
+                                       continue;
 
                                if (callSite != null) {
                                        FuzzyBoolean match = d.getPointcut().match(callSite);
                                        if (match.alwaysTrue()) {
-                                               //System.err.println("matched callSite: "  + callSite + " with " + d);
+                                               // System.err.println("matched callSite: " + callSite + " with " + d);
                                                return;
                                        } else if (!match.alwaysFalse()) {
-                                               //!!! need this check to happen much sooner
-                                               //throw new RuntimeException("unimplemented, shouldn't have fuzzy match here");
+                                               // !!! need this check to happen much sooner
+                                               // throw new RuntimeException("unimplemented, shouldn't have fuzzy match here");
                                        }
                                }
                                if (enclosingExec != null) {
                                        FuzzyBoolean match = d.getPointcut().match(enclosingExec);
                                        if (match.alwaysTrue()) {
-                                               //System.err.println("matched enclosingExec: "  + enclosingExec + " with " + d);
+                                               // System.err.println("matched enclosingExec: " + enclosingExec + " with " + d);
                                                return;
                                        } else if (!match.alwaysFalse()) {
-                                               //!!! need this check to happen much sooner
-                                               //throw new RuntimeException("unimplemented, shouldn't have fuzzy match here");
+                                               // !!! need this check to happen much sooner
+                                               // throw new RuntimeException("unimplemented, shouldn't have fuzzy match here");
                                        }
                                }
                        }
                }
-               
-               //??? is this always correct
+
+               // ??? is this always correct
                if (location instanceof Proceed) {
                        return;
                }
@@ -145,127 +135,120 @@ public class AjProblemReporter extends ProblemReporter {
        private boolean isPointcutDeclaration(MethodBinding binding) {
                return CharOperation.prefixEquals(PointcutDeclaration.mangledPrefix, binding.selector);
        }
-       
-    private boolean isIntertypeDeclaration(MethodBinding binding) {
-       return (binding instanceof InterTypeMethodBinding);
-    }
-    
-       public void abstractMethodCannotBeOverridden(
-               SourceTypeBinding type,
-               MethodBinding concreteMethod)
-       {
+
+       private boolean isIntertypeDeclaration(MethodBinding binding) {
+               return (binding instanceof InterTypeMethodBinding);
+       }
+
+       public void abstractMethodCannotBeOverridden(SourceTypeBinding type, MethodBinding concreteMethod) {
                if (isPointcutDeclaration(concreteMethod)) {
                        return;
                }
                super.abstractMethodCannotBeOverridden(type, concreteMethod);
        }
 
-
-       public void inheritedMethodReducesVisibility(SourceTypeBinding type, MethodBinding concreteMethod, MethodBinding[] abstractMethods) {
+       public void inheritedMethodReducesVisibility(SourceTypeBinding type, MethodBinding concreteMethod,
+                       MethodBinding[] abstractMethods) {
                // if we implemented this method by a public inter-type declaration, then there is no error
-               
-               ResolvedType onTypeX = null;            
+
+               ResolvedType onTypeX = null;
                // If the type is anonymous, look at its supertype
                if (!type.isAnonymousType()) {
                        onTypeX = factory.fromEclipse(type);
                } else {
                        // Hmmm. If the ITD is on an interface that is being 'instantiated' using an anonymous type,
-                       // we sort it out elsewhere and don't come into this method - 
+                       // we sort it out elsewhere and don't come into this method -
                        // so we don't have to worry about interfaces, just the superclass.
-                   onTypeX = factory.fromEclipse(type.superclass()); //abstractMethod.declaringClass);
+                       onTypeX = factory.fromEclipse(type.superclass()); // abstractMethod.declaringClass);
                }
-               for (Iterator i = onTypeX.getInterTypeMungersIncludingSupers().iterator(); i.hasNext(); ) {
-                       ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
+               for (Iterator i = onTypeX.getInterTypeMungersIncludingSupers().iterator(); i.hasNext();) {
+                       ConcreteTypeMunger m = (ConcreteTypeMunger) i.next();
                        ResolvedMember sig = m.getSignature();
-            if (!Modifier.isAbstract(sig.getModifiers())) {
-                               if (ResolvedType
-                                       .matches(
-                                               AjcMemberMaker.interMethod(
-                                                       sig,
-                                                       m.getAspectType(),
-                                                       sig.getDeclaringType().resolve(factory.getWorld()).isInterface()),
-                                               factory.makeResolvedMember(concreteMethod))) {
+                       if (!Modifier.isAbstract(sig.getModifiers())) {
+                               if (ResolvedType.matches(AjcMemberMaker.interMethod(sig, m.getAspectType(), sig.getDeclaringType().resolve(
+                                               factory.getWorld()).isInterface()), factory.makeResolvedMember(concreteMethod))) {
                                        return;
                                }
                        }
                }
 
-               super.inheritedMethodReducesVisibility(type,concreteMethod,abstractMethods);
+               super.inheritedMethodReducesVisibility(type, concreteMethod, abstractMethods);
        }
 
        // if either of the MethodBinding is an ITD, we have already reported it.
        public void staticAndInstanceConflict(MethodBinding currentMethod, MethodBinding inheritedMethod) {
-               if (currentMethod instanceof InterTypeMethodBinding) return;
-               if (inheritedMethod instanceof InterTypeMethodBinding) return;
+               if (currentMethod instanceof InterTypeMethodBinding)
+                       return;
+               if (inheritedMethod instanceof InterTypeMethodBinding)
+                       return;
                super.staticAndInstanceConflict(currentMethod, inheritedMethod);
        }
-       
-       public void abstractMethodMustBeImplemented(
-               SourceTypeBinding type,
-               MethodBinding abstractMethod)
-       {
+
+       public void abstractMethodMustBeImplemented(SourceTypeBinding type, MethodBinding abstractMethod) {
                // if this is a PointcutDeclaration then there is no error
-               if (isPointcutDeclaration(abstractMethod)) return;
-               
-               if (isIntertypeDeclaration(abstractMethod)) return; // when there is a problem with an ITD not being implemented, it will be reported elsewhere
-               
+               if (isPointcutDeclaration(abstractMethod))
+                       return;
+
+               if (isIntertypeDeclaration(abstractMethod))
+                       return; // when there is a problem with an ITD not being implemented, it will be reported elsewhere
+
                if (CharOperation.prefixEquals("ajc$interField".toCharArray(), abstractMethod.selector)) {
-                       //??? think through how this could go wrong
+                       // ??? think through how this could go wrong
                        return;
                }
-               
+
                // if we implemented this method by an inter-type declaration, then there is no error
-               //??? be sure this is always right
+               // ??? be sure this is always right
                ResolvedType onTypeX = null;
-               
+
                // If the type is anonymous, look at its supertype
                if (!type.isAnonymousType()) {
                        onTypeX = factory.fromEclipse(type);
                } else {
                        // Hmmm. If the ITD is on an interface that is being 'instantiated' using an anonymous type,
-                       // we sort it out elsewhere and don't come into this method - 
+                       // we sort it out elsewhere and don't come into this method -
                        // so we don't have to worry about interfaces, just the superclass.
-                   onTypeX = factory.fromEclipse(type.superclass()); //abstractMethod.declaringClass);
+                       onTypeX = factory.fromEclipse(type.superclass()); // abstractMethod.declaringClass);
                }
-               
-               if (onTypeX.isRawType()) onTypeX = onTypeX.getGenericType();
 
-               for (Iterator i = onTypeX.getInterTypeMungersIncludingSupers().iterator(); i.hasNext(); ) {
-                       ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
+               if (onTypeX.isRawType())
+                       onTypeX = onTypeX.getGenericType();
+
+               for (Iterator i = onTypeX.getInterTypeMungersIncludingSupers().iterator(); i.hasNext();) {
+                       ConcreteTypeMunger m = (ConcreteTypeMunger) i.next();
                        ResolvedMember sig = m.getSignature();
-            if (sig != null && !Modifier.isAbstract(sig.getModifiers())) {
-                       ResolvedMember abstractMember = factory.makeResolvedMember(abstractMethod);
-                       if (abstractMember.getName().startsWith("ajc$interMethodDispatch")) {                   
-                               ResolvedType dType = factory.getWorld().resolve(sig.getDeclaringType(),false);                                  
-                                       if (ResolvedType
-                                               .matches(
-                                                       AjcMemberMaker.interMethod(
-                                                               sig,
-                                                               m.getAspectType(),
-                                                               dType.isInterface()),
-                                                               abstractMember
-                                                       )) {
+                       if (sig != null && !Modifier.isAbstract(sig.getModifiers())) {
+                               ResolvedMember abstractMember = factory.makeResolvedMember(abstractMethod);
+                               if (abstractMember.getName().startsWith("ajc$interMethodDispatch")) {
+                                       ResolvedType dType = factory.getWorld().resolve(sig.getDeclaringType(), false);
+                                       if (ResolvedType.matches(AjcMemberMaker.interMethod(sig, m.getAspectType(), dType.isInterface()),
+                                                       abstractMember)) {
                                                return;
                                        }
-                       } else {
-                               // In this case we have something like:
-                               //  interface I {}
-                               //  abstract class C implements I { abstract void foo();}
-                               //  class D extends C {}
-                               //  ITD: public void I.foo() {...}
-                               // The ITD is providing the implementation of foo in the class D but when checking for whether the abstract
-                               // method is overridden, we won't be looking at whether the ITD overrides ajc$interMethodDispath$...foo but
-                               // whether it overrides the foo method from class C
-                       if (ResolvedType.matches(sig,factory.makeResolvedMember(abstractMethod))) return;
-                       }
+                               } else {
+                                       // In this case we have something like:
+                                       // interface I {}
+                                       // abstract class C implements I { abstract void foo();}
+                                       // class D extends C {}
+                                       // ITD: public void I.foo() {...}
+                                       // The ITD is providing the implementation of foo in the class D but when checking for whether the abstract
+                                       // method is overridden, we won't be looking at whether the ITD overrides ajc$interMethodDispath$...foo but
+                                       // whether it overrides the foo method from class C
+                                       if (ResolvedType.matches(sig, factory.makeResolvedMember(abstractMethod)))
+                                               return;
+                               }
                        }
                }
 
                super.abstractMethodMustBeImplemented(type, abstractMethod);
        }
 
-       /* (non-Javadoc)
-        * @see org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemReporter#disallowedTargetForAnnotation(org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation)
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemReporter#disallowedTargetForAnnotation(org.aspectj.org.eclipse
+        * .jdt.internal.compiler.ast.Annotation)
         */
        public void disallowedTargetForAnnotation(Annotation annotation) {
                // if the annotation's recipient is an ITD, it might be allowed after all...
@@ -275,322 +258,365 @@ public class AjProblemReporter extends ProblemReporter {
                        if (name.startsWith("ajc$")) {
                                long metaTagBits = annotation.resolvedType.getAnnotationTagBits(); // could be forward reference
                                if (name.indexOf("interField") != -1) {
-                                       if ((metaTagBits & TagBits.AnnotationForField) != 0) return;
-                               } else if (name.indexOf("interConstructor") != -1) { 
-                                       if ((metaTagBits & TagBits.AnnotationForConstructor) != 0) return;
+                                       if ((metaTagBits & TagBits.AnnotationForField) != 0)
+                                               return;
+                               } else if (name.indexOf("interConstructor") != -1) {
+                                       if ((metaTagBits & TagBits.AnnotationForConstructor) != 0)
+                                               return;
                                } else if (name.indexOf("interMethod") != -1) {
-                                       if ((metaTagBits & TagBits.AnnotationForMethod) != 0) return;
-                               } else if (name.indexOf("declare_"+DeclareAnnotation.AT_TYPE+"_")!=-1) {
-                                       if ((metaTagBits & TagBits.AnnotationForAnnotationType)!=0 ||
-                                               (metaTagBits & TagBits.AnnotationForType)!=0) return;
-                               } else if (name.indexOf("declare_"+DeclareAnnotation.AT_FIELD+"_")!=-1) {
-                                       if ((metaTagBits & TagBits.AnnotationForField)!=0) return;
-                               } else if (name.indexOf("declare_"+DeclareAnnotation.AT_CONSTRUCTOR+"_")!=-1) {
-                                       if ((metaTagBits & TagBits.AnnotationForConstructor)!=0) return;
+                                       if ((metaTagBits & TagBits.AnnotationForMethod) != 0)
+                                               return;
+                               } else if (name.indexOf("declare_" + DeclareAnnotation.AT_TYPE + "_") != -1) {
+                                       if ((metaTagBits & TagBits.AnnotationForAnnotationType) != 0 || (metaTagBits & TagBits.AnnotationForType) != 0)
+                                               return;
+                               } else if (name.indexOf("declare_" + DeclareAnnotation.AT_FIELD + "_") != -1) {
+                                       if ((metaTagBits & TagBits.AnnotationForField) != 0)
+                                               return;
+                               } else if (name.indexOf("declare_" + DeclareAnnotation.AT_CONSTRUCTOR + "_") != -1) {
+                                       if ((metaTagBits & TagBits.AnnotationForConstructor) != 0)
+                                               return;
                                } else if (name.indexOf("declare_eow") != -1) {
-                                       if ((metaTagBits & TagBits.AnnotationForField) != 0) return;
+                                       if ((metaTagBits & TagBits.AnnotationForField) != 0)
+                                               return;
                                }
                        }
                }
-               
+
                // not our special case, report the problem...
                super.disallowedTargetForAnnotation(annotation);
        }
-       
+
        public void overridesPackageDefaultMethod(MethodBinding localMethod, MethodBinding inheritedMethod) {
-         if (new String(localMethod.selector).startsWith("ajc$")) return;
-         super.overridesPackageDefaultMethod(localMethod,inheritedMethod);
+               if (new String(localMethod.selector).startsWith("ajc$"))
+                       return;
+               super.overridesPackageDefaultMethod(localMethod, inheritedMethod);
        }
-       
-       public void handle(
-               int problemId,
-               String[] problemArguments,
-               String[] messageArguments,
-               int severity,
-               int problemStartPosition,
-               int problemEndPosition,
-               ReferenceContext referenceContext,
-               CompilationResult unitResult)
-       {
+
+       public void handle(int problemId, String[] problemArguments, String[] messageArguments, int severity, int problemStartPosition,
+                       int problemEndPosition, ReferenceContext referenceContext, CompilationResult unitResult) {
                if (severity != ProblemSeverities.Ignore && DUMP_STACK) {
                        Thread.dumpStack();
                }
-               super.handle(
-                       problemId,
-                       problemArguments,
-                       messageArguments,
-                       severity,
-                       problemStartPosition,
-                       problemEndPosition,
-                       referenceContext,
-                       unitResult);
+               super.handle(problemId, problemArguments, messageArguments, severity, problemStartPosition, problemEndPosition,
+                               referenceContext, unitResult);
+       }
+
+       // PR71076
+       public void javadocMissingParamTag(char[] name, int sourceStart, int sourceEnd, int modifiers) {
+               boolean reportIt = true;
+               String sName = new String(name);
+               if (sName.startsWith("ajc$"))
+                       reportIt = false;
+               if (sName.equals("thisJoinPoint"))
+                       reportIt = false;
+               if (sName.equals("thisJoinPointStaticPart"))
+                       reportIt = false;
+               if (sName.equals("thisEnclosingJoinPointStaticPart"))
+                       reportIt = false;
+               if (sName.equals("ajc_aroundClosure"))
+                       reportIt = false;
+               if (reportIt)
+                       super.javadocMissingParamTag(name, sourceStart, sourceEnd, modifiers);
+       }
+
+       public void abstractMethodInAbstractClass(SourceTypeBinding type, AbstractMethodDeclaration methodDecl) {
+
+               String abstractMethodName = new String(methodDecl.selector);
+               if (abstractMethodName.startsWith("ajc$pointcut")) {
+                       // This will already have been reported, see: PointcutDeclaration.postParse()
+                       return;
+               }
+               String[] arguments = new String[] { new String(type.sourceName()), abstractMethodName };
+               super.handle(IProblem.AbstractMethodInAbstractClass, arguments, arguments, methodDecl.sourceStart, methodDecl.sourceEnd,
+                               this.referenceContext, this.referenceContext == null ? null : this.referenceContext.compilationResult());
        }
-    
-
-
-    // PR71076
-    public void javadocMissingParamTag(char[] name, int sourceStart, int sourceEnd, int modifiers) {
-        boolean reportIt = true;
-        String sName = new String(name);
-        if (sName.startsWith("ajc$")) reportIt = false;
-        if (sName.equals("thisJoinPoint")) reportIt = false;
-        if (sName.equals("thisJoinPointStaticPart")) reportIt = false;
-        if (sName.equals("thisEnclosingJoinPointStaticPart")) reportIt = false;
-        if (sName.equals("ajc_aroundClosure")) reportIt = false;
-        if (reportIt) 
-               super.javadocMissingParamTag(name,sourceStart,sourceEnd,modifiers);
-    }
-    
-    public void abstractMethodInAbstractClass(SourceTypeBinding type, AbstractMethodDeclaration methodDecl) {
-
-       String abstractMethodName = new String(methodDecl.selector);
-       if (abstractMethodName.startsWith("ajc$pointcut")) {
-               // This will already have been reported, see: PointcutDeclaration.postParse()
-               return;
-       }
-       String[] arguments = new String[] {new String(type.sourceName()), abstractMethodName};
-       super.handle(
-               IProblem.AbstractMethodInAbstractClass,
-               arguments,
-               arguments,
-               methodDecl.sourceStart,
-               methodDecl.sourceEnd,this.referenceContext, 
-                       this.referenceContext == null ? null : this.referenceContext.compilationResult());
-    }
-    
-    
-    /**
-     * Called when there is an ITD marked @override that doesn't override a supertypes method.
-     * The method and the binding are passed - some information is useful from each.  The 'method'
-     * knows about source offsets for the message, the 'binding' has the signature of what the
-     * ITD is trying to be in the target class.
-     */
-    public void itdMethodMustOverride(AbstractMethodDeclaration method,MethodBinding binding) {
-               this.handle(
-                               IProblem.MethodMustOverride,
-                               new String[] {new String(binding.selector), typesAsString(binding.isVarargs(), binding.parameters, false), new String(binding.declaringClass.readableName()), },
-                               new String[] {new String(binding.selector), typesAsString(binding.isVarargs(), binding.parameters, true), new String(binding.declaringClass.shortReadableName()),},
-                               method.sourceStart,
-                               method.sourceEnd,
-                               this.referenceContext, 
-                               this.referenceContext == null ? null : this.referenceContext.compilationResult());
+
+       /**
+        * Called when there is an ITD marked @override that doesn't override a supertypes method. The method and the binding are passed
+        * - some information is useful from each. The 'method' knows about source offsets for the message, the 'binding' has the
+        * signature of what the ITD is trying to be in the target class.
+        */
+       public void itdMethodMustOverride(AbstractMethodDeclaration method, MethodBinding binding) {
+               this.handle(IProblem.MethodMustOverride,
+                               new String[] { new String(binding.selector), typesAsString(binding.isVarargs(), binding.parameters, false),
+                                               new String(binding.declaringClass.readableName()), }, new String[] { new String(binding.selector),
+                                               typesAsString(binding.isVarargs(), binding.parameters, true),
+                                               new String(binding.declaringClass.shortReadableName()), }, method.sourceStart, method.sourceEnd,
+                               this.referenceContext, this.referenceContext == null ? null : this.referenceContext.compilationResult());
        }
-    
-    /**
-     * Overrides the implementation in ProblemReporter and is ITD aware.
-     * To report a *real* problem with an ITD marked @override, the other methodMustOverride() method is used.
-     */
-    public void methodMustOverride(AbstractMethodDeclaration method) {
-       MethodBinding binding = method.binding;
-       
-       // ignore ajc$ methods
-       if (new String(method.selector).startsWith("ajc$")) return;
+
+       /**
+        * Overrides the implementation in ProblemReporter and is ITD aware. To report a *real* problem with an ITD marked @override,
+        * the other methodMustOverride() method is used.
+        */
+       public void methodMustOverride(AbstractMethodDeclaration method) {
+               MethodBinding binding = method.binding;
+
+               // ignore ajc$ methods
+               if (new String(method.selector).startsWith("ajc$"))
+                       return;
                ResolvedMember possiblyErroneousRm = factory.makeResolvedMember(method.binding);
-       
-       ResolvedType onTypeX =  factory.fromEclipse(method.binding.declaringClass);
-       // Can't use 'getInterTypeMungersIncludingSupers()' since that will exclude abstract ITDs
-       // on any super classes - so we have to trawl up ourselves.. I wonder if this problem
-       // affects other code in the problem reporter that looks through ITDs...
-       ResolvedType supertypeToLookAt = onTypeX.getSuperclass();
-       while (supertypeToLookAt!=null) {
-               List itMungers = supertypeToLookAt.getInterTypeMungers();
-               for (Iterator i = itMungers.iterator(); i.hasNext(); ) {
-                               ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
+
+               ResolvedType onTypeX = factory.fromEclipse(method.binding.declaringClass);
+               // Can't use 'getInterTypeMungersIncludingSupers()' since that will exclude abstract ITDs
+               // on any super classes - so we have to trawl up ourselves.. I wonder if this problem
+               // affects other code in the problem reporter that looks through ITDs...
+               ResolvedType supertypeToLookAt = onTypeX.getSuperclass();
+               while (supertypeToLookAt != null) {
+                       List itMungers = supertypeToLookAt.getInterTypeMungers();
+                       for (Iterator i = itMungers.iterator(); i.hasNext();) {
+                               ConcreteTypeMunger m = (ConcreteTypeMunger) i.next();
                                ResolvedMember sig = m.getSignature();
-                               if (sig==null) continue; // we aren't interested in other kinds of munger
+                               if (sig == null)
+                                       continue; // we aren't interested in other kinds of munger
                                UnresolvedType dType = sig.getDeclaringType();
-                               if (dType==null) continue;
+                               if (dType == null)
+                                       continue;
                                ResolvedType resolvedDeclaringType = dType.resolve(factory.getWorld());
-                               ResolvedMember rm = AjcMemberMaker.interMethod(sig,m.getAspectType(),
-                                               resolvedDeclaringType.isInterface());
-                               if (ResolvedType.matches(rm,possiblyErroneousRm)) {
+                               ResolvedMember rm = AjcMemberMaker.interMethod(sig, m.getAspectType(), resolvedDeclaringType.isInterface());
+                               if (ResolvedType.matches(rm, possiblyErroneousRm)) {
                                        // match, so dont need to report a problem!
                                        return;
                                }
                        }
-               supertypeToLookAt = supertypeToLookAt.getSuperclass();
-       }
-       // report the error...
-       super.methodMustOverride(method);
-    }
-    
-    
-    private String typesAsString(boolean isVarargs, TypeBinding[] types, boolean makeShort) {
-       StringBuffer buffer = new StringBuffer(10);
-       for (int i = 0, length = types.length; i < length; i++) {
-               if (i != 0)
-                       buffer.append(", "); //$NON-NLS-1$
-               TypeBinding type = types[i];
-               boolean isVarargType = isVarargs && i == length-1;
-               if (isVarargType) type = ((ArrayBinding)type).elementsType();
-               buffer.append(new String(makeShort ? type.shortReadableName() : type.readableName()));
-               if (isVarargType) buffer.append("..."); //$NON-NLS-1$
-       }
-       return buffer.toString();
-    }
-    
-    public void visibilityConflict(MethodBinding currentMethod, MethodBinding inheritedMethod) {
-       // Not quite sure if the conditions on this test are right - basically I'm saying
-       // DONT WORRY if its ITDs since the error will be reported another way...
-       if (isIntertypeDeclaration(currentMethod) && 
-               isIntertypeDeclaration(inheritedMethod) && 
-               Modifier.isPrivate(currentMethod.modifiers) && 
-               Modifier.isPrivate(inheritedMethod.modifiers)) {
-               return;
-       }
-       super.visibilityConflict(currentMethod,inheritedMethod);
-    }
-    
-    public void unusedPrivateType(TypeDeclaration typeDecl) {
-       // don't output unused type warnings for aspects!
-       if (typeDecl instanceof AspectDeclaration) return;
-       if (typeDecl.enclosingType!=null && (typeDecl.enclosingType instanceof AspectDeclaration)) {
-               AspectDeclaration ad = (AspectDeclaration)typeDecl.enclosingType;
-               if (ad.concreteName!=null) {
-                       List declares = ad.concreteName.declares;
-                       for (Iterator iter = declares.iterator(); iter.hasNext();) {
-                                       Object dec =  iter.next();
+                       supertypeToLookAt = supertypeToLookAt.getSuperclass();
+               }
+               // report the error...
+               super.methodMustOverride(method);
+       }
+
+       private String typesAsString(boolean isVarargs, TypeBinding[] types, boolean makeShort) {
+               StringBuffer buffer = new StringBuffer(10);
+               for (int i = 0, length = types.length; i < length; i++) {
+                       if (i != 0)
+                               buffer.append(", "); //$NON-NLS-1$
+                       TypeBinding type = types[i];
+                       boolean isVarargType = isVarargs && i == length - 1;
+                       if (isVarargType)
+                               type = ((ArrayBinding) type).elementsType();
+                       buffer.append(new String(makeShort ? type.shortReadableName() : type.readableName()));
+                       if (isVarargType)
+                               buffer.append("..."); //$NON-NLS-1$
+               }
+               return buffer.toString();
+       }
+
+       public void visibilityConflict(MethodBinding currentMethod, MethodBinding inheritedMethod) {
+               // Not quite sure if the conditions on this test are right - basically I'm saying
+               // DONT WORRY if its ITDs since the error will be reported another way...
+               if (isIntertypeDeclaration(currentMethod) && isIntertypeDeclaration(inheritedMethod)
+                               && Modifier.isPrivate(currentMethod.modifiers) && Modifier.isPrivate(inheritedMethod.modifiers)) {
+                       return;
+               }
+               super.visibilityConflict(currentMethod, inheritedMethod);
+       }
+
+       public void unusedPrivateType(TypeDeclaration typeDecl) {
+               // don't output unused type warnings for aspects!
+               if (typeDecl instanceof AspectDeclaration)
+                       return;
+               if (typeDecl.enclosingType != null && (typeDecl.enclosingType instanceof AspectDeclaration)) {
+                       AspectDeclaration ad = (AspectDeclaration) typeDecl.enclosingType;
+                       if (ad.concreteName != null) {
+                               List declares = ad.concreteName.declares;
+                               for (Iterator iter = declares.iterator(); iter.hasNext();) {
+                                       Object dec = iter.next();
                                        if (dec instanceof DeclareParents) {
-                                               DeclareParents decp = (DeclareParents)dec;
+                                               DeclareParents decp = (DeclareParents) dec;
                                                TypePattern[] newparents = decp.getParents().getTypePatterns();
                                                for (int i = 0; i < newparents.length; i++) {
                                                        TypePattern pattern = newparents[i];
                                                        UnresolvedType ut = pattern.getExactType();
-                                                       if (ut==null) continue;
-                                                       if (CharOperation.compareWith(typeDecl.binding.signature(),ut.getSignature().toCharArray())==0) return;
+                                                       if (ut == null)
+                                                               continue;
+                                                       if (CharOperation.compareWith(typeDecl.binding.signature(), ut.getSignature().toCharArray()) == 0)
+                                                               return;
                                                }
                                        }
                                }
-               }
-       }
-       super.unusedPrivateType(typeDecl);
-    }
-
-    public void unusedPrivateMethod(AbstractMethodDeclaration methodDecl) {
-       // don't output unused warnings for pointcuts...
-       if (!(methodDecl instanceof PointcutDeclaration))
-                       super.unusedPrivateMethod(methodDecl);
-    }
-    
-    public void caseExpressionMustBeConstant(Expression expression) {
-       if (expression instanceof QualifiedNameReference) {
-               QualifiedNameReference qnr = (QualifiedNameReference)expression;
-               if (qnr.otherBindings!=null && qnr.otherBindings.length>0 && qnr.otherBindings[0] instanceof PrivilegedFieldBinding) {
-                       super.signalError(expression.sourceStart,expression.sourceEnd,"Fields accessible due to an aspect being privileged can not be used in switch statements");
-                       referenceContext.tagAsHavingErrors();
-                       return;
-               }
-       }
-       super.caseExpressionMustBeConstant(expression);
-    }
-    
-    public void unusedArgument(LocalDeclaration localDecl) {
-       // don't warn if this is an aj synthetic arg
-       String argType = new String(localDecl.type.resolvedType.signature());
-       if (argType.startsWith("Lorg/aspectj/runtime/internal")) return;
-       
-       // If the unused argument is in a pointcut, don't report the problem (for now... pr148219)
-       if (localDecl!=null && localDecl instanceof Argument) {
-               Argument arg = (Argument)localDecl;
-               if (arg.binding!=null && arg.binding.declaringScope!=null) {
-                       ReferenceContext context = arg.binding.declaringScope.referenceContext();
-                       if (context!=null && context instanceof PointcutDeclaration) return;
-               }
-       }
-       super.unusedArgument(localDecl);
-    }
-
-    /**
-     * A side-effect of the way that we handle itds on default methods on top-most implementors
-     * of interfaces is that a class acquiring a final default ITD will erroneously report
-     * that it can't override its own member. This method detects that situation.
-     */
-    public void finalMethodCannotBeOverridden(MethodBinding currentMethod, MethodBinding inheritedMethod) {
-       if (currentMethod == inheritedMethod) return;
-       super.finalMethodCannotBeOverridden(currentMethod, inheritedMethod);
-    }
-    
-    /**
-     * The method verifier is a bit 'keen' and doesn't cope well with ITDMs which are
-     * of course to be considered a 'default' implementation if the target type doesn't
-     * supply one.  This test may not be complete - it is possible that it should read if
-     * *either* is an ITD...but I dont have a testcase that shows that is required. yet.
-     * (pr115788)
-     */
-    public void duplicateInheritedMethods(SourceTypeBinding type, MethodBinding inheritedMethod1, MethodBinding inheritedMethod2) {
-       if (inheritedMethod1 instanceof InterTypeMethodBinding || inheritedMethod2 instanceof InterTypeMethodBinding) return;
-       if ((inheritedMethod1 instanceof ParameterizedMethodBinding) && ((ParameterizedMethodBinding)inheritedMethod1).original() instanceof InterTypeMethodBinding) return;
-       if ((inheritedMethod2 instanceof ParameterizedMethodBinding) && ((ParameterizedMethodBinding)inheritedMethod2).original() instanceof InterTypeMethodBinding) return;
-               super.duplicateInheritedMethods(type,inheritedMethod1,inheritedMethod2);
-    }
-    
-    /**
-     * All problems end up routed through here at some point...
-     */
-    public IProblem createProblem(char[] fileName, int problemId, String[] problemArguments, String[] messageArguments, int severity, int problemStartPosition, int problemEndPosition, int lineNumber) {
-       IProblem problem = super.createProblem(fileName, problemId, problemArguments,
-                       messageArguments, severity, problemStartPosition, problemEndPosition,
-                       lineNumber,0);
-       if (factory.getWorld().isInPinpointMode()) {
-               MessageIssued ex = new MessageIssued();
-               ex.fillInStackTrace();
-               StringWriter sw = new StringWriter();
-               ex.printStackTrace(new PrintWriter(sw));
-               StringBuffer sb = new StringBuffer();
-               sb.append(CompilationAndWeavingContext.getCurrentContext());
-               sb.append(sw.toString());
-               problem = new PinpointedProblem(problem,sb.toString());
-       }
-       return problem;
-    }
-    
-    private static class MessageIssued extends RuntimeException {
-       public String getMessage() {
-               return "message issued...";
-       }
-    }
-    
-    private static class PinpointedProblem implements IProblem {
-       
-       private IProblem delegate;
-       private String message;
-       
-       public PinpointedProblem(IProblem aProblem, String pinpoint) { 
-               this.delegate = aProblem; 
-               // if this was a problem that came via the weaver, it will already have
-               // pinpoint info, don't do it twice...
-               if (delegate.getMessage().indexOf("message issued...") == -1) {
-                       this.message = delegate.getMessage() + "\n" + pinpoint;
-               } else {
-                       this.message = delegate.getMessage();
-               }
-       }
-
-               public String[] getArguments() {return delegate.getArguments();}
-               public int getID() {return delegate.getID();}
-               public String getMessage() { return message; }
-               public char[] getOriginatingFileName() {return delegate.getOriginatingFileName();}
-               public int getSourceEnd() { return delegate.getSourceEnd();}
-               public int getSourceLineNumber() { return delegate.getSourceLineNumber();}
-               public int getSourceStart() { return delegate.getSourceStart();}
-               public boolean isError() { return delegate.isError();}
-               public boolean isWarning() { return delegate.isWarning();}
-               public void setSourceEnd(int sourceEnd) { delegate.setSourceEnd(sourceEnd); }
-               public void setSourceLineNumber(int lineNumber) { delegate.setSourceLineNumber(lineNumber);}
-               public void setSourceStart(int sourceStart) { delegate.setSourceStart(sourceStart);}
-               public void setSeeAlsoProblems(IProblem[] problems) { delegate.setSeeAlsoProblems(problems);}
-               public IProblem[] seeAlso() { return delegate.seeAlso();}
-               public void setSupplementaryMessageInfo(String msg) { delegate.setSupplementaryMessageInfo(msg);}
-               public String getSupplementaryMessageInfo() { return delegate.getSupplementaryMessageInfo();}
-    }
-
-    public void duplicateMethodInType(SourceTypeBinding type, AbstractMethodDeclaration methodDecl) {
-        if (new String(methodDecl.selector).startsWith("ajc$interMethod")) {
-            // this is an ITD clash and will be reported in another way by AspectJ (173602)
-            return;
-        }
-        super.duplicateMethodInType(type, methodDecl);
-    }
+                       }
+               }
+               super.unusedPrivateType(typeDecl);
+       }
+
+       public void unusedPrivateMethod(AbstractMethodDeclaration methodDecl) {
+               // don't output unused warnings for pointcuts...
+               if (!(methodDecl instanceof PointcutDeclaration))
+                       super.unusedPrivateMethod(methodDecl);
+       }
+
+       public void caseExpressionMustBeConstant(Expression expression) {
+               if (expression instanceof QualifiedNameReference) {
+                       QualifiedNameReference qnr = (QualifiedNameReference) expression;
+                       if (qnr.otherBindings != null && qnr.otherBindings.length > 0 && qnr.otherBindings[0] instanceof PrivilegedFieldBinding) {
+                               super.signalError(expression.sourceStart, expression.sourceEnd,
+                                               "Fields accessible due to an aspect being privileged can not be used in switch statements");
+                               referenceContext.tagAsHavingErrors();
+                               return;
+                       }
+               }
+               super.caseExpressionMustBeConstant(expression);
+       }
+
+       public void unusedArgument(LocalDeclaration localDecl) {
+               // don't warn if this is an aj synthetic arg
+               String argType = new String(localDecl.type.resolvedType.signature());
+               if (argType.startsWith("Lorg/aspectj/runtime/internal"))
+                       return;
+
+               // If the unused argument is in a pointcut, don't report the problem (for now... pr148219)
+               if (localDecl instanceof Argument) {
+                       Argument arg = (Argument) localDecl;
+                       if (arg.binding != null && arg.binding.declaringScope != null) {
+                               ReferenceContext context = arg.binding.declaringScope.referenceContext();
+                               if (context != null && context instanceof PointcutDeclaration)
+                                       return;
+                       }
+               }
+               super.unusedArgument(localDecl);
+       }
+
+       /**
+        * A side-effect of the way that we handle itds on default methods on top-most implementors of interfaces is that a class
+        * acquiring a final default ITD will erroneously report that it can't override its own member. This method detects that
+        * situation.
+        */
+       public void finalMethodCannotBeOverridden(MethodBinding currentMethod, MethodBinding inheritedMethod) {
+               if (currentMethod == inheritedMethod)
+                       return;
+               super.finalMethodCannotBeOverridden(currentMethod, inheritedMethod);
+       }
+
+       /**
+        * The method verifier is a bit 'keen' and doesn't cope well with ITDMs which are of course to be considered a 'default'
+        * implementation if the target type doesn't supply one. This test may not be complete - it is possible that it should read if
+        * *either* is an ITD...but I dont have a testcase that shows that is required. yet. (pr115788)
+        */
+       public void duplicateInheritedMethods(SourceTypeBinding type, MethodBinding inheritedMethod1, MethodBinding inheritedMethod2) {
+               if (inheritedMethod1 instanceof InterTypeMethodBinding || inheritedMethod2 instanceof InterTypeMethodBinding)
+                       return;
+               if ((inheritedMethod1 instanceof ParameterizedMethodBinding)
+                               && ((ParameterizedMethodBinding) inheritedMethod1).original() instanceof InterTypeMethodBinding)
+                       return;
+               if ((inheritedMethod2 instanceof ParameterizedMethodBinding)
+                               && ((ParameterizedMethodBinding) inheritedMethod2).original() instanceof InterTypeMethodBinding)
+                       return;
+               super.duplicateInheritedMethods(type, inheritedMethod1, inheritedMethod2);
+       }
+
+       /**
+        * All problems end up routed through here at some point...
+        */
+       public IProblem createProblem(char[] fileName, int problemId, String[] problemArguments, String[] messageArguments,
+                       int severity, int problemStartPosition, int problemEndPosition, int lineNumber) {
+               IProblem problem = super.createProblem(fileName, problemId, problemArguments, messageArguments, severity,
+                               problemStartPosition, problemEndPosition, lineNumber, 0);
+               if (factory.getWorld().isInPinpointMode()) {
+                       MessageIssued ex = new MessageIssued();
+                       ex.fillInStackTrace();
+                       StringWriter sw = new StringWriter();
+                       ex.printStackTrace(new PrintWriter(sw));
+                       StringBuffer sb = new StringBuffer();
+                       sb.append(CompilationAndWeavingContext.getCurrentContext());
+                       sb.append(sw.toString());
+                       problem = new PinpointedProblem(problem, sb.toString());
+               }
+               return problem;
+       }
+
+       private static class MessageIssued extends RuntimeException {
+               public String getMessage() {
+                       return "message issued...";
+               }
+       }
+
+       private static class PinpointedProblem implements IProblem {
+
+               private IProblem delegate;
+               private String message;
+
+               public PinpointedProblem(IProblem aProblem, String pinpoint) {
+                       this.delegate = aProblem;
+                       // if this was a problem that came via the weaver, it will already have
+                       // pinpoint info, don't do it twice...
+                       if (delegate.getMessage().indexOf("message issued...") == -1) {
+                               this.message = delegate.getMessage() + "\n" + pinpoint;
+                       } else {
+                               this.message = delegate.getMessage();
+                       }
+               }
+
+               public String[] getArguments() {
+                       return delegate.getArguments();
+               }
+
+               public int getID() {
+                       return delegate.getID();
+               }
+
+               public String getMessage() {
+                       return message;
+               }
+
+               public char[] getOriginatingFileName() {
+                       return delegate.getOriginatingFileName();
+               }
+
+               public int getSourceEnd() {
+                       return delegate.getSourceEnd();
+               }
+
+               public int getSourceLineNumber() {
+                       return delegate.getSourceLineNumber();
+               }
+
+               public int getSourceStart() {
+                       return delegate.getSourceStart();
+               }
+
+               public boolean isError() {
+                       return delegate.isError();
+               }
+
+               public boolean isWarning() {
+                       return delegate.isWarning();
+               }
+
+               public void setSourceEnd(int sourceEnd) {
+                       delegate.setSourceEnd(sourceEnd);
+               }
 
+               public void setSourceLineNumber(int lineNumber) {
+                       delegate.setSourceLineNumber(lineNumber);
+               }
+
+               public void setSourceStart(int sourceStart) {
+                       delegate.setSourceStart(sourceStart);
+               }
+
+               public void setSeeAlsoProblems(IProblem[] problems) {
+                       delegate.setSeeAlsoProblems(problems);
+               }
+
+               public IProblem[] seeAlso() {
+                       return delegate.seeAlso();
+               }
+
+               public void setSupplementaryMessageInfo(String msg) {
+                       delegate.setSupplementaryMessageInfo(msg);
+               }
+
+               public String getSupplementaryMessageInfo() {
+                       return delegate.getSupplementaryMessageInfo();
+               }
+       }
+
+       public void duplicateMethodInType(SourceTypeBinding type, AbstractMethodDeclaration methodDecl) {
+               if (new String(methodDecl.selector).startsWith("ajc$interMethod")) {
+                       // this is an ITD clash and will be reported in another way by AspectJ (173602)
+                       return;
+               }
+               super.duplicateMethodInType(type, methodDecl);
+       }
 
 }
index 849e676ab1464afd96a336425a9227372ce9ebfd..8614ed3ad40a3a1ac8598efcb9da16eb0a0bfb0e 100644 (file)
@@ -10,7 +10,6 @@
  *     PARC     initial implementation 
  * ******************************************************************/
 
-
 package org.aspectj.ajdt.internal.core.builder;
 
 import java.io.File;
@@ -54,59 +53,56 @@ import org.aspectj.weaver.bcel.BcelWeaver;
 import org.aspectj.weaver.bcel.BcelWorld;
 import org.aspectj.weaver.bcel.UnwovenClassFile;
 
-
 /**
  * Maintains state needed for incremental compilation
  * 
- * tests: two ajdt projects, aspect is changed in dependent, does dependee do a full build? (could just do it if on
- * aspect path but lets just do it for all now)
+ * tests: two ajdt projects, aspect is changed in dependent, does dependee do a full build? (could just do it if on aspect path but
+ * lets just do it for all now)
  * 
  */
 public class AjState {
-    
-    // SECRETAPI static so beware of multi-threading bugs...
-    public static IStateListener stateListener = null;
 
-    public static boolean FORCE_INCREMENTAL_DURING_TESTING = false;
+       // SECRETAPI static so beware of multi-threading bugs...
+       public static IStateListener stateListener = null;
+
+       public static boolean FORCE_INCREMENTAL_DURING_TESTING = false;
 
-    // if set to true we will not do a full build if we see a type changed on our classpath
-    // but no type in this state instance references it
-    public static boolean IGNORE_NON_REFERENCED_TYPES = true;
+       // if set to true we will not do a full build if we see a type changed on our classpath
+       // but no type in this state instance references it
+       public static boolean IGNORE_NON_REFERENCED_TYPES = true;
 
-    private AjBuildManager buildManager;
+       private AjBuildManager buildManager;
        private boolean couldBeSubsequentIncrementalBuild = false;
-       
+
        private IHierarchy structureModel;
        private IRelationshipMap relmap;
-       
+
        /**
-     * When looking at changes on the classpath, this set accumulates files in our state instance that affected by those
-     * changes. Then if we can do an incremental build - these must be compiled.
-     */
-    private Set affectedFiles = new HashSet();
-       
+        * When looking at changes on the classpath, this set accumulates files in our state instance that affected by those changes.
+        * Then if we can do an incremental build - these must be compiled.
+        */
+       private Set affectedFiles = new HashSet();
+
        private long lastSuccessfulFullBuildTime = -1;
-       private Hashtable /* File, long */ structuralChangesSinceLastFullBuild = new Hashtable();
-       
+       private Hashtable /* File, long */structuralChangesSinceLastFullBuild = new Hashtable();
+
        private long lastSuccessfulBuildTime = -1;
        private long currentBuildTime = -1;
-       
+
        private AjBuildConfig buildConfig;
-       
+
        private boolean batchBuildRequiredThisTime = false;
-       
+
        /**
-        * Keeps a list of (FQN,Filename) pairs (as ClassFile objects)
-        * for types that resulted from the compilation of the given
-        * File. Note :- the ClassFile objects contain no byte code, 
-        * they are simply a Filename,typename pair.
+        * Keeps a list of (FQN,Filename) pairs (as ClassFile objects) for types that resulted from the compilation of the given File.
+        * Note :- the ClassFile objects contain no byte code, they are simply a Filename,typename pair.
         * 
         * Populated in noteResult and used in addDependentsOf(File)
         * 
         * Added by AMC during state refactoring, 1Q06.
         */
-       private Map/*<File, List<ClassFile>*/ fullyQualifiedTypeNamesResultingFromCompilationUnit = new HashMap();
-       
+       private Map/* <File, List<ClassFile> */fullyQualifiedTypeNamesResultingFromCompilationUnit = new HashMap();
+
        /**
         * Source files defining aspects
         * 
@@ -114,108 +110,101 @@ public class AjState {
         * 
         * Added by AMC during state refactoring, 1Q06.
         */
-       private Set/*<File>*/ sourceFilesDefiningAspects = new HashSet();
-       
+       private Set/* <File> */sourceFilesDefiningAspects = new HashSet();
+
        /**
-        * Populated in noteResult to record the set of types that should be recompiled if
-        * the given file is modified or deleted. 
+        * Populated in noteResult to record the set of types that should be recompiled if the given file is modified or deleted.
         * 
         * Refered to during addAffectedSourceFiles when calculating incremental compilation set.
         */
-       private Map/*<File, ReferenceCollection>*/ references = new HashMap();
-       
+       private Map/* <File, ReferenceCollection> */references = new HashMap();
+
        /**
-        * Holds UnwovenClassFiles (byte[]s) originating from the given file source. This
-        * could be a jar file, a directory, or an individual .class file. This is an 
-        * *expensive* map. It is cleared immediately following a batch build, and the
-        * cheaper inputClassFilesBySource map is kept for processing of any subsequent
-        * incremental builds.
+        * Holds UnwovenClassFiles (byte[]s) originating from the given file source. This could be a jar file, a directory, or an
+        * individual .class file. This is an *expensive* map. It is cleared immediately following a batch build, and the cheaper
+        * inputClassFilesBySource map is kept for processing of any subsequent incremental builds.
         * 
         * Populated during AjBuildManager.initBcelWorld().
         * 
-        * Passed into AjCompiler adapter as the set of binary input files to reweave if the
-        * weaver determines a full weave is required.
+        * Passed into AjCompiler adapter as the set of binary input files to reweave if the weaver determines a full weave is required.
         * 
         * Cleared during initBcelWorld prior to repopulation.
         * 
-        * Used when a file is deleted during incremental compilation to delete all of the
-        * class files in the output directory that resulted from the weaving of File.
+        * Used when a file is deleted during incremental compilation to delete all of the class files in the output directory that
+        * resulted from the weaving of File.
         * 
-        * Used during getBinaryFilesToCompile when compiling incrementally to determine 
-        * which files should be recompiled if a given input file has changed.
+        * Used during getBinaryFilesToCompile when compiling incrementally to determine which files should be recompiled if a given
+        * input file has changed.
         * 
         */
-       private Map/*File, List<UnwovenClassFile>*/ binarySourceFiles = new HashMap();
+       private Map/* File, List<UnwovenClassFile> */binarySourceFiles = new HashMap();
 
        /**
-        * Initially a duplicate of the information held in binarySourceFiles, with the
-        * key difference that the values are ClassFiles (type name, File) not UnwovenClassFiles
-        * (which also have all the byte code in them). After a batch build, binarySourceFiles
-        * is cleared, leaving just this much lighter weight map to use in processing 
-        * subsequent incremental builds.
+        * Initially a duplicate of the information held in binarySourceFiles, with the key difference that the values are ClassFiles
+        * (type name, File) not UnwovenClassFiles (which also have all the byte code in them). After a batch build, binarySourceFiles
+        * is cleared, leaving just this much lighter weight map to use in processing subsequent incremental builds.
         */
-       private Map/*<File,List<ClassFile>*/ inputClassFilesBySource = new HashMap();
-       
+       private Map/* <File,List<ClassFile> */inputClassFilesBySource = new HashMap();
+
        /**
-        * Holds structure information on types as they were at the end of the last
-        * build. It would be nice to get rid of this too, but can't see an easy way to do
-        * that right now. 
+        * Holds structure information on types as they were at the end of the last build. It would be nice to get rid of this too, but
+        * can't see an easy way to do that right now.
         */
-       private Map/*FQN,CompactStructureRepresentation*/ resolvedTypeStructuresFromLastBuild = new HashMap();
-       
+       private Map/* FQN,CompactStructureRepresentation */resolvedTypeStructuresFromLastBuild = new HashMap();
+
        /**
-        * Populated in noteResult to record the set of UnwovenClassFiles (intermediate results)
-        * that originated from compilation of the class with the given fully-qualified name.
+        * Populated in noteResult to record the set of UnwovenClassFiles (intermediate results) that originated from compilation of the
+        * class with the given fully-qualified name.
         * 
         * Used in removeAllResultsOfLastBuild to remove .class files from output directory.
-        *
-        * Passed into StatefulNameEnvironment during incremental compilation to support 
-        * findType lookups.
+        * 
+        * Passed into StatefulNameEnvironment during incremental compilation to support findType lookups.
         */
-       private Map/*<String, File>*/ classesFromName = new HashMap();
-       
+       private Map/* <String, File> */classesFromName = new HashMap();
+
        /**
-        * Populated by AjBuildManager to record the aspects with the file name in which they're
-        * contained. This is later used when writing the outxml file in AjBuildManager. Need
-        * to record the file name because want to write an outxml file for each of the output
-        * directories and in order to ask the OutputLocationManager for the output location
-        * for a given aspect we need the file in which it is contained.
+        * Populated by AjBuildManager to record the aspects with the file name in which they're contained. This is later used when
+        * writing the outxml file in AjBuildManager. Need to record the file name because want to write an outxml file for each of the
+        * output directories and in order to ask the OutputLocationManager for the output location for a given aspect we need the file
+        * in which it is contained.
         */
-       private Map /*<String, char[]>*/ aspectsFromFileNames;
-       
+       private Map /* <String, char[]> */aspectsFromFileNames;
+
        private Set/* File */compiledSourceFiles = new HashSet();
-       private List/*String*/ resources = new ArrayList();
-       
-       // these are references created on a particular compile run - when looping round in 
+       private List/* String */resources = new ArrayList();
+
+       // these are references created on a particular compile run - when looping round in
        // addAffectedSourceFiles(), if some have been created then we look at which source files
        // touch upon those and get them recompiled.
        private StringSet qualifiedStrings = new StringSet(3);
 
-    private StringSet simpleStrings = new StringSet(3);
-       
+       private StringSet simpleStrings = new StringSet(3);
+
        private Set addedFiles;
        private Set deletedFiles;
-       private Set /*BinarySourceFile*/addedBinaryFiles;
-       private Set /*BinarySourceFile*/deletedBinaryFiles;
-       
+       private Set /* BinarySourceFile */addedBinaryFiles;
+       private Set /* BinarySourceFile */deletedBinaryFiles;
+
        private BcelWeaver weaver;
        private BcelWorld world;
-               
+
        public AjState(AjBuildManager buildManager) {
                this.buildManager = buildManager;
        }
-       
+
        public void setCouldBeSubsequentIncrementalBuild(boolean yesThereCould) {
                this.couldBeSubsequentIncrementalBuild = yesThereCould;
        }
-       
-       void successfulCompile(AjBuildConfig config,boolean wasFullBuild) {
+
+       void successfulCompile(AjBuildConfig config, boolean wasFullBuild) {
                buildConfig = config;
                lastSuccessfulBuildTime = currentBuildTime;
-               if (stateListener!=null) stateListener.buildSuccessful(wasFullBuild);
-               if (wasFullBuild) lastSuccessfulFullBuildTime = currentBuildTime;
+               if (stateListener != null)
+                       stateListener.buildSuccessful(wasFullBuild);
+               if (wasFullBuild)
+                       lastSuccessfulFullBuildTime = currentBuildTime;
        }
-       
+
        /**
         * Returns false if a batch build is needed.
         */
@@ -223,461 +212,485 @@ public class AjState {
                currentBuildTime = System.currentTimeMillis();
 
                if (!maybeIncremental()) {
-                       if (listenerDefined()) getListener().recordDecision("Preparing for build: not going to be incremental because either not in AJDT or incremental deactivated");
+                       if (listenerDefined())
+                               getListener().recordDecision(
+                                               "Preparing for build: not going to be incremental because either not in AJDT or incremental deactivated");
                        return false;
                }
 
                if (this.batchBuildRequiredThisTime) {
                        this.batchBuildRequiredThisTime = false;
-                       if (listenerDefined()) getListener().recordDecision("Preparing for build: not going to be incremental this time because batch build explicitly forced");
+                       if (listenerDefined())
+                               getListener().recordDecision(
+                                               "Preparing for build: not going to be incremental this time because batch build explicitly forced");
                        return false;
                }
-               
+
                if (lastSuccessfulBuildTime == -1 || buildConfig == null) {
                        structuralChangesSinceLastFullBuild.clear();
-                       if (listenerDefined()) getListener().recordDecision("Preparing for build: not going to be incremental because no successful previous full build");
+                       if (listenerDefined())
+                               getListener().recordDecision(
+                                               "Preparing for build: not going to be incremental because no successful previous full build");
                        return false;
                }
-               
+
                // we don't support incremental with an outjar yet
                if (newBuildConfig.getOutputJar() != null) {
                        structuralChangesSinceLastFullBuild.clear();
-                       if (listenerDefined()) getListener().recordDecision("Preparing for build: not going to be incremental because outjar being used");
+                       if (listenerDefined())
+                               getListener().recordDecision("Preparing for build: not going to be incremental because outjar being used");
                        return false;
                }
-               
-        affectedFiles.clear();
-        
+
+               affectedFiles.clear();
+
                // we can't do an incremental build if one of our paths
                // has changed, or a jar on a path has been modified
-               if (pathChange(buildConfig,newBuildConfig)) {
-                   // last time we built, .class files and resource files from jars on the
-                   // inpath will have been copied to the output directory.
-                   // these all need to be deleted in preparation for the clean build that is
-                   // coming - otherwise a file that has been deleted from an inpath jar 
-                   // since the last build will not be deleted from the output directory.
-                   removeAllResultsOfLastBuild();
-                       if (stateListener!=null) stateListener.pathChangeDetected();
+               if (pathChange(buildConfig, newBuildConfig)) {
+                       // last time we built, .class files and resource files from jars on the
+                       // inpath will have been copied to the output directory.
+                       // these all need to be deleted in preparation for the clean build that is
+                       // coming - otherwise a file that has been deleted from an inpath jar
+                       // since the last build will not be deleted from the output directory.
+                       removeAllResultsOfLastBuild();
+                       if (stateListener != null)
+                               stateListener.pathChangeDetected();
                        structuralChangesSinceLastFullBuild.clear();
-                       if (listenerDefined()) getListener().recordDecision("Preparing for build: not going to be incremental because path change detected (one of classpath/aspectpath/inpath/injars)");
-                   return false;
+                       if (listenerDefined())
+                               getListener()
+                                               .recordDecision(
+                                                               "Preparing for build: not going to be incremental because path change detected (one of classpath/aspectpath/inpath/injars)");
+                       return false;
                }
-               
+
                if (simpleStrings.elementSize > 20)
-            simpleStrings = new StringSet(3);
-        else
-            simpleStrings.clear();
-        if (qualifiedStrings.elementSize > 20)
-            qualifiedStrings = new StringSet(3);
-        else
-            qualifiedStrings.clear();
-               
+                       simpleStrings = new StringSet(3);
+               else
+                       simpleStrings.clear();
+               if (qualifiedStrings.elementSize > 20)
+                       qualifiedStrings = new StringSet(3);
+               else
+                       qualifiedStrings.clear();
+
                Set oldFiles = new HashSet(buildConfig.getFiles());
                Set newFiles = new HashSet(newBuildConfig.getFiles());
-               
+
                addedFiles = new HashSet(newFiles);
                addedFiles.removeAll(oldFiles);
                deletedFiles = new HashSet(oldFiles);
                deletedFiles.removeAll(newFiles);
-               
+
                Set oldBinaryFiles = new HashSet(buildConfig.getBinaryFiles());
                Set newBinaryFiles = new HashSet(newBuildConfig.getBinaryFiles());
-               
+
                addedBinaryFiles = new HashSet(newBinaryFiles);
                addedBinaryFiles.removeAll(oldBinaryFiles);
                deletedBinaryFiles = new HashSet(oldBinaryFiles);
                deletedBinaryFiles.removeAll(newBinaryFiles);
-                       
+
                boolean couldStillBeIncremental = processDeletedFiles(deletedFiles);
 
                if (!couldStillBeIncremental) {
-                       if (listenerDefined()) getListener().recordDecision("Preparing for build: not going to be incremental because an aspect was deleted");
+                       if (listenerDefined())
+                               getListener().recordDecision("Preparing for build: not going to be incremental because an aspect was deleted");
                        return false;
                }
-               
-               if (listenerDefined()) getListener().recordDecision("Preparing for build: planning to be an incremental build");
+
+               if (listenerDefined())
+                       getListener().recordDecision("Preparing for build: planning to be an incremental build");
                return true;
        }
-               
+
        /**
-        * Checks if any of the files in the set passed in contains an aspect declaration.  If one is found
-        * then we start the process of batch building, i.e. we remove all the results of the last build,
-        * call any registered listener to tell them whats happened and return false.
+        * Checks if any of the files in the set passed in contains an aspect declaration. If one is found then we start the process of
+        * batch building, i.e. we remove all the results of the last build, call any registered listener to tell them whats happened
+        * and return false.
         * 
         * @return false if we discovered an aspect declaration
         */
-    private boolean processDeletedFiles(Set deletedFiles) {
+       private boolean processDeletedFiles(Set deletedFiles) {
                for (Iterator iter = deletedFiles.iterator(); iter.hasNext();) {
-                       File  aDeletedFile = (File ) iter.next();
+                       File aDeletedFile = (File) iter.next();
                        if (this.sourceFilesDefiningAspects.contains(aDeletedFile)) {
                                removeAllResultsOfLastBuild();
-                               if (stateListener!=null) stateListener.detectedAspectDeleted(aDeletedFile);
-                               return false;                           
+                               if (stateListener != null)
+                                       stateListener.detectedAspectDeleted(aDeletedFile);
+                               return false;
                        }
-                       List/*ClassFile*/ classes = (List)fullyQualifiedTypeNamesResultingFromCompilationUnit.get(aDeletedFile);
-                       if (classes!=null) {
+                       List/* ClassFile */classes = (List) fullyQualifiedTypeNamesResultingFromCompilationUnit.get(aDeletedFile);
+                       if (classes != null) {
                                for (Iterator iterator = classes.iterator(); iterator.hasNext();) {
                                        ClassFile element = (ClassFile) iterator.next();
                                        resolvedTypeStructuresFromLastBuild.remove(element.fullyQualifiedTypeName);
                                }
-                       }                       
+                       }
                }
                return true;
-    }
-       
-       private Collection getModifiedFiles() {         
+       }
+
+       private Collection getModifiedFiles() {
                return getModifiedFiles(lastSuccessfulBuildTime);
        }
 
        Collection getModifiedFiles(long lastBuildTime) {
                Set ret = new HashSet();
-               //not our job to account for new and deleted files
-               for (Iterator i = buildConfig.getFiles().iterator(); i.hasNext(); ) {
-                       File file = (File)i.next();
-                       if (!file.exists()) continue;
-                       
+               // not our job to account for new and deleted files
+               for (Iterator i = buildConfig.getFiles().iterator(); i.hasNext();) {
+                       File file = (File) i.next();
+                       if (!file.exists())
+                               continue;
+
                        long modTime = file.lastModified();
-                       // System.out.println("check: " + file + " mod " + modTime + " build " + lastBuildTime);        
+                       // System.out.println("check: " + file + " mod " + modTime + " build " + lastBuildTime);
                        // need to add 1000 since lastModTime is only accurate to a second on some (all?) platforms
                        if (modTime + 1000 > lastBuildTime) {
                                ret.add(file);
-                       } 
+                       }
                }
                ret.addAll(affectedFiles);
                return ret;
        }
 
-       private Collection getModifiedBinaryFiles() {           
+       private Collection getModifiedBinaryFiles() {
                return getModifiedBinaryFiles(lastSuccessfulBuildTime);
        }
 
        Collection getModifiedBinaryFiles(long lastBuildTime) {
                List ret = new ArrayList();
-               //not our job to account for new and deleted files
-               for (Iterator i = buildConfig.getBinaryFiles().iterator(); i.hasNext(); ) {
-                       AjBuildConfig.BinarySourceFile bsfile = (AjBuildConfig.BinarySourceFile)i.next();
+               // not our job to account for new and deleted files
+               for (Iterator i = buildConfig.getBinaryFiles().iterator(); i.hasNext();) {
+                       AjBuildConfig.BinarySourceFile bsfile = (AjBuildConfig.BinarySourceFile) i.next();
                        File file = bsfile.binSrc;
-                       if (!file.exists()) continue;
-                       
+                       if (!file.exists())
+                               continue;
+
                        long modTime = file.lastModified();
-                       //System.out.println("check: " + file + " mod " + modTime + " build " + lastBuildTime);                 
+                       // System.out.println("check: " + file + " mod " + modTime + " build " + lastBuildTime);
                        // need to add 1000 since lastModTime is only accurate to a second on some (all?) platforms
                        if (modTime + 1000 >= lastBuildTime) {
                                ret.add(bsfile);
-                       } 
+                       }
                }
                return ret;
        }
-       
-       
+
        private static int CLASS_FILE_NO_CHANGES = 0;
 
-    private static int CLASS_FILE_CHANGED_THAT_NEEDS_INCREMENTAL_BUILD = 1;
+       private static int CLASS_FILE_CHANGED_THAT_NEEDS_INCREMENTAL_BUILD = 1;
+
+       private static int CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD = 2;
 
-    private static int CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD = 2;
+       private static int MAX_AFFECTED_FILES_BEFORE_FULL_BUILD = 30;
 
-    private static int MAX_AFFECTED_FILES_BEFORE_FULL_BUILD = 30;
-       
        /**
-     * Analyse .class files in the directory specified, if they have changed since the last successful build then see if
-     * we can determine which source files in our project depend on the change. If we can then we can still do an
-     * incremental build, if we can't then we have to do a full build.
-     * 
-     */
+        * Analyse .class files in the directory specified, if they have changed since the last successful build then see if we can
+        * determine which source files in our project depend on the change. If we can then we can still do an incremental build, if we
+        * can't then we have to do a full build.
+        
+        */
        private int classFileChangedInDirSinceLastBuildRequiringFullBuild(File dir) {
-           int defaultReply = (IGNORE_NON_REFERENCED_TYPES ? CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD : CLASS_FILE_CHANGED_THAT_NEEDS_INCREMENTAL_BUILD);
+               int defaultReply = (IGNORE_NON_REFERENCED_TYPES ? CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD
+                               : CLASS_FILE_CHANGED_THAT_NEEDS_INCREMENTAL_BUILD);
                // Is another AspectJ project building into that directory?
                AjState state = IncrementalStateManager.findStateManagingOutputLocation(dir);
                if (listenerDefined()) {
-            if (state != null) {
-                getListener().recordDecision("Found state instance managing output location : " + dir);
-            } else {
-                getListener().recordDecision("Failed to find a state instance managing output location : " + dir);
-            }
-        }
+                       if (state != null) {
+                               getListener().recordDecision("Found state instance managing output location : " + dir);
+                       } else {
+                               getListener().recordDecision("Failed to find a state instance managing output location : " + dir);
+                       }
+               }
 
                File[] classFiles = FileUtil.listFiles(dir, new FileFilter() {
                        public boolean accept(File pathname) {
                                return pathname.getName().endsWith(".class");
                        }
                });
-               
+
                for (int i = 0; i < classFiles.length; i++) {
                        long modTime = classFiles[i].lastModified();
-                       if ((modTime+1000)>=lastSuccessfulBuildTime) {
+                       if ((modTime + 1000) >= lastSuccessfulBuildTime) {
                                // so the class on disk has changed since our last successful build
-                               
-                           
+
                                // To work out if it is a real change we should ask any state
                                // object managing this output location whether the file has
                                // structurally changed or not
-                               if (state!=null) {
-                                   if (state.isAspect(classFiles[i])) {
-                        return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
-                    }
-                                   if (state.hasStructuralChangedSince(classFiles[i], lastSuccessfulBuildTime)) {
-                                       if (listenerDefined())
-                            getListener().recordDecision("Structural change detected in : " + classFiles[i]);
-
-                        if (!IGNORE_NON_REFERENCED_TYPES || isTypeWeReferTo(classFiles[i])) {
-                            if (affectedFiles.size() > MAX_AFFECTED_FILES_BEFORE_FULL_BUILD)
-                                return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
-                        }
-                    } else {
-                        if (listenerDefined())
-                            getListener().recordDecision("Change detected in " + classFiles[i] + " but it is not structural");
-                    }
-                                   // Is the change in a type that any of our source files care about? and if it is, is it
-                                   // a structural change?
-                    // if (!IGNORE_NON_REFERENCED_TYPES || isTypeWeReferTo(classFiles[i])) {
-                    // if (affectedFiles.size() > MAX_AFFECTED_FILES_BEFORE_FULL_BUILD)
-                    // return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
-                    // if (state.hasStructuralChangedSince(classFiles[i], lastSuccessfulBuildTime))
-                    // return defaultReply;
-                    // }
-                } else {
-                    // No state object to ask, so it only matters if we know which type depends on this file
-                    if (!IGNORE_NON_REFERENCED_TYPES) {
-                        return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
-                    } else {
-                        if (isTypeWeReferTo(classFiles[i])) {
-                            if (affectedFiles.size() > MAX_AFFECTED_FILES_BEFORE_FULL_BUILD)
-                                return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
-                            return CLASS_FILE_CHANGED_THAT_NEEDS_INCREMENTAL_BUILD;
-                        } else {
-                            return CLASS_FILE_NO_CHANGES;
-                        }
-                    }
-                }
+                               if (state != null) {
+                                       if (state.isAspect(classFiles[i])) {
+                                               return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
+                                       }
+                                       if (state.hasStructuralChangedSince(classFiles[i], lastSuccessfulBuildTime)) {
+                                               if (listenerDefined())
+                                                       getListener().recordDecision("Structural change detected in : " + classFiles[i]);
+
+                                               if (!IGNORE_NON_REFERENCED_TYPES || isTypeWeReferTo(classFiles[i])) {
+                                                       if (affectedFiles.size() > MAX_AFFECTED_FILES_BEFORE_FULL_BUILD)
+                                                               return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
+                                               }
+                                       } else {
+                                               if (listenerDefined())
+                                                       getListener().recordDecision("Change detected in " + classFiles[i] + " but it is not structural");
+                                       }
+                                       // Is the change in a type that any of our source files care about? and if it is, is it
+                                       // a structural change?
+                                       // if (!IGNORE_NON_REFERENCED_TYPES || isTypeWeReferTo(classFiles[i])) {
+                                       // if (affectedFiles.size() > MAX_AFFECTED_FILES_BEFORE_FULL_BUILD)
+                                       // return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
+                                       // if (state.hasStructuralChangedSince(classFiles[i], lastSuccessfulBuildTime))
+                                       // return defaultReply;
+                                       // }
+                               } else {
+                                       // No state object to ask, so it only matters if we know which type depends on this file
+                                       if (!IGNORE_NON_REFERENCED_TYPES) {
+                                               return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
+                                       } else {
+                                               if (isTypeWeReferTo(classFiles[i])) {
+                                                       if (affectedFiles.size() > MAX_AFFECTED_FILES_BEFORE_FULL_BUILD)
+                                                               return CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD;
+                                                       return CLASS_FILE_CHANGED_THAT_NEEDS_INCREMENTAL_BUILD;
+                                               } else {
+                                                       return CLASS_FILE_NO_CHANGES;
+                                               }
+                                       }
+                               }
                        }
                }
                return CLASS_FILE_NO_CHANGES;
        }
-       
+
        private boolean isAspect(File file) {
-           if (aspectsFromFileNames == null)
-            return false;
-           return aspectsFromFileNames.containsKey(file);
-    }
-
-    public static class SoftHashMap extends AbstractMap {
-
-        private Map map;
-
-        private ReferenceQueue rq = new ReferenceQueue();
-
-        public SoftHashMap(Map map) {
-            this.map = map;
-        }
-
-        public SoftHashMap() {
-            this(new HashMap());
-        }
-
-        public SoftHashMap(Map map, boolean b) {
-            this(map);
-        }
-
-        class SoftReferenceKnownKey extends SoftReference {
-
-            private final Object key;
-
-            SoftReferenceKnownKey(Object k, Object v) {
-                super(v, rq);
-                this.key = k;
-            }
-        }
-
-        private void processQueue() {
-            SoftReferenceKnownKey sv = null;
-            while ((sv = (SoftReferenceKnownKey) rq.poll()) != null) {
-                map.remove(sv.key);
-            }
-        }
-
-        public Object get(Object key) {
-            SoftReferenceKnownKey value = (SoftReferenceKnownKey) map.get(key);
-            if (value == null)
-                return null;
-            if (value.get() == null) {
-                // it got GC'd
-                map.remove(value.key);
-                return null;
-            } else {
-                return value.get();
-            }
-        }
-
-        public Object put(Object k, Object v) {
-            processQueue();
-            return map.put(k, new SoftReferenceKnownKey(k, v));
-        }
-
-        public Set entrySet() {
-            return map.entrySet();
-        }
-
-        public void clear() {
-            processQueue();
-            map.clear();
-        }
-
-        public int size() {
-            processQueue();
-            return map.size();
-        }
-
-        public Object remove(Object k) {
-            processQueue();
-            SoftReferenceKnownKey value = (SoftReferenceKnownKey) map.remove(k);
-            if (value == null)
-                return null;
-            if (value.get() != null) {
-                return value.get();
-            }
-            return null;
-        }
-    }
-       
+               if (aspectsFromFileNames == null)
+                       return false;
+               return aspectsFromFileNames.containsKey(file);
+       }
+
+       public static class SoftHashMap extends AbstractMap {
+
+               private Map map;
+
+               private ReferenceQueue rq = new ReferenceQueue();
+
+               public SoftHashMap(Map map) {
+                       this.map = map;
+               }
+
+               public SoftHashMap() {
+                       this(new HashMap());
+               }
+
+               public SoftHashMap(Map map, boolean b) {
+                       this(map);
+               }
+
+               class SoftReferenceKnownKey extends SoftReference {
+
+                       private final Object key;
+
+                       SoftReferenceKnownKey(Object k, Object v) {
+                               super(v, rq);
+                               this.key = k;
+                       }
+               }
+
+               private void processQueue() {
+                       SoftReferenceKnownKey sv = null;
+                       while ((sv = (SoftReferenceKnownKey) rq.poll()) != null) {
+                               map.remove(sv.key);
+                       }
+               }
+
+               public Object get(Object key) {
+                       SoftReferenceKnownKey value = (SoftReferenceKnownKey) map.get(key);
+                       if (value == null)
+                               return null;
+                       if (value.get() == null) {
+                               // it got GC'd
+                               map.remove(value.key);
+                               return null;
+                       } else {
+                               return value.get();
+                       }
+               }
+
+               public Object put(Object k, Object v) {
+                       processQueue();
+                       return map.put(k, new SoftReferenceKnownKey(k, v));
+               }
+
+               public Set entrySet() {
+                       return map.entrySet();
+               }
+
+               public void clear() {
+                       processQueue();
+                       map.clear();
+               }
+
+               public int size() {
+                       processQueue();
+                       return map.size();
+               }
+
+               public Object remove(Object k) {
+                       processQueue();
+                       SoftReferenceKnownKey value = (SoftReferenceKnownKey) map.remove(k);
+                       if (value == null)
+                               return null;
+                       if (value.get() != null) {
+                               return value.get();
+                       }
+                       return null;
+               }
+       }
+
        SoftHashMap/* <baseDir,SoftHashMap<theFile,className>> */fileToClassNameMap = new SoftHashMap();
 
        /**
-     * If a class file has changed in a path on our classpath, it may not be for a type that any of our source files
-     * care about. This method checks if any of our source files have a dependency on the class in question and if not,
-     * we don't consider it an interesting change.
-     */
+        * If a class file has changed in a path on our classpath, it may not be for a type that any of our source files care about.
+        * This method checks if any of our source files have a dependency on the class in question and if not, we don't consider it an
+        * interesting change.
+        */
        private boolean isTypeWeReferTo(File file) {
-           String fpath = file.getAbsolutePath();
-           int finalSeparator = fpath.lastIndexOf(File.separator);
-        String baseDir = fpath.substring(0, finalSeparator);
-        String theFile = fpath.substring(finalSeparator + 1);
-        SoftHashMap classNames = (SoftHashMap) fileToClassNameMap.get(baseDir);
-        if (classNames == null) {
-            classNames = new SoftHashMap();
-            fileToClassNameMap.put(baseDir, classNames);
-        }
-        char[] className = (char[]) classNames.get(theFile);
-        if (className == null) {
-//            if (listenerDefined())
-//                getListener().recordDecision("Cache miss, looking up classname for : " + fpath);
-
-            ClassFileReader cfr;
-            try {
-                cfr = ClassFileReader.read(file);
-            } catch (ClassFormatException e) {
-                return true;
-            } catch (IOException e) {
-                return true;
-            }
-            className = cfr.getName();
-            classNames.put(theFile, className);
-//       } else {
-//           if (listenerDefined())
-//               getListener().recordDecision("Cache hit, looking up classname for : " + fpath);
-        }
-        
-        char[][][] qualifiedNames = null;
-        char[][] simpleNames = null;
-        if (CharOperation.indexOf('/', className) != -1) {
-            qualifiedNames = new char[1][][];
-            qualifiedNames[0] = CharOperation.splitOn('/', className);
-            qualifiedNames = ReferenceCollection.internQualifiedNames(qualifiedNames);
-        } else {
-            simpleNames = new char[1][];
-            simpleNames[0] = className;
-            simpleNames = ReferenceCollection.internSimpleNames(simpleNames, true);
-        }
-
-        for (Iterator i = references.entrySet().iterator(); i.hasNext();) {
-            Map.Entry entry = (Map.Entry) i.next();
-            ReferenceCollection refs = (ReferenceCollection) entry.getValue();
-            if (refs != null && refs.includes(qualifiedNames, simpleNames)) {
-                if (listenerDefined()) {
-                    getListener().recordDecision(
-                        toString() + ": type " + new String(className) + " is depended upon by '" + entry.getKey() + "'");
-                }
-                affectedFiles.add(entry.getKey());
-                if (affectedFiles.size() > MAX_AFFECTED_FILES_BEFORE_FULL_BUILD)
-                    return true;
-               // return true;
-            }
-        }
-        if (affectedFiles.size() > 0)
-            return true;
-        if (listenerDefined())
-            getListener().recordDecision(
-                toString() + ": type " + new String(className) + " is not depended upon by this state");
-
-        return false;
-    }
-       
+               String fpath = file.getAbsolutePath();
+               int finalSeparator = fpath.lastIndexOf(File.separator);
+               String baseDir = fpath.substring(0, finalSeparator);
+               String theFile = fpath.substring(finalSeparator + 1);
+               SoftHashMap classNames = (SoftHashMap) fileToClassNameMap.get(baseDir);
+               if (classNames == null) {
+                       classNames = new SoftHashMap();
+                       fileToClassNameMap.put(baseDir, classNames);
+               }
+               char[] className = (char[]) classNames.get(theFile);
+               if (className == null) {
+                       // if (listenerDefined())
+                       // getListener().recordDecision("Cache miss, looking up classname for : " + fpath);
+
+                       ClassFileReader cfr;
+                       try {
+                               cfr = ClassFileReader.read(file);
+                       } catch (ClassFormatException e) {
+                               return true;
+                       } catch (IOException e) {
+                               return true;
+                       }
+                       className = cfr.getName();
+                       classNames.put(theFile, className);
+                       // } else {
+                       // if (listenerDefined())
+                       // getListener().recordDecision("Cache hit, looking up classname for : " + fpath);
+               }
+
+               char[][][] qualifiedNames = null;
+               char[][] simpleNames = null;
+               if (CharOperation.indexOf('/', className) != -1) {
+                       qualifiedNames = new char[1][][];
+                       qualifiedNames[0] = CharOperation.splitOn('/', className);
+                       qualifiedNames = ReferenceCollection.internQualifiedNames(qualifiedNames);
+               } else {
+                       simpleNames = new char[1][];
+                       simpleNames[0] = className;
+                       simpleNames = ReferenceCollection.internSimpleNames(simpleNames, true);
+               }
+
+               for (Iterator i = references.entrySet().iterator(); i.hasNext();) {
+                       Map.Entry entry = (Map.Entry) i.next();
+                       ReferenceCollection refs = (ReferenceCollection) entry.getValue();
+                       if (refs != null && refs.includes(qualifiedNames, simpleNames)) {
+                               if (listenerDefined()) {
+                                       getListener().recordDecision(
+                                                       toString() + ": type " + new String(className) + " is depended upon by '" + entry.getKey() + "'");
+                               }
+                               affectedFiles.add(entry.getKey());
+                               if (affectedFiles.size() > MAX_AFFECTED_FILES_BEFORE_FULL_BUILD)
+                                       return true;
+                               // return true;
+                       }
+               }
+               if (affectedFiles.size() > 0)
+                       return true;
+               if (listenerDefined())
+                       getListener().recordDecision(toString() + ": type " + new String(className) + " is not depended upon by this state");
+
+               return false;
+       }
+
        /**
-     * For a given class file, determine which source file it came from. This will only succeed if the class file is
-     * from a source file within this project.
-     */
+        * For a given class file, determine which source file it came from. This will only succeed if the class file is from a source
+        * file within this project.
+        */
        private File getSourceFileForClassFile(File classfile) {
-           Set sourceFiles = fullyQualifiedTypeNamesResultingFromCompilationUnit.keySet();
-           for (Iterator sourceFileIterator = sourceFiles.iterator(); sourceFileIterator.hasNext();) {
-               File sourceFile = (File) sourceFileIterator.next();
-            List/* ClassFile */ classesFromSourceFile = (List/* ClassFile */) fullyQualifiedTypeNamesResultingFromCompilationUnit.get(sourceFile);
-            for (int i=0;i<classesFromSourceFile.size();i++) {
-                if (((ClassFile)classesFromSourceFile.get(i)).locationOnDisk.equals(classfile)) return  sourceFile;
-            }
-        }
-           return null;
-       }
-       
+               Set sourceFiles = fullyQualifiedTypeNamesResultingFromCompilationUnit.keySet();
+               for (Iterator sourceFileIterator = sourceFiles.iterator(); sourceFileIterator.hasNext();) {
+                       File sourceFile = (File) sourceFileIterator.next();
+                       List/* ClassFile */classesFromSourceFile = (List/* ClassFile */) fullyQualifiedTypeNamesResultingFromCompilationUnit
+                                       .get(sourceFile);
+                       for (int i = 0; i < classesFromSourceFile.size(); i++) {
+                               if (((ClassFile) classesFromSourceFile.get(i)).locationOnDisk.equals(classfile))
+                                       return sourceFile;
+                       }
+               }
+               return null;
+       }
+
        public String toString() {
-        StringBuffer sb = new StringBuffer();
-        // null config means failed build i think as it is only set on successful full build?
-        sb.append("AjState(").append((buildConfig == null ? "NULLCONFIG" : buildConfig.getConfigFile().toString())).append(")");
-        return sb.toString();
-    }
-
-    /**
-     * Determine if a file has changed since a given time, using the local information recorded in the structural
-     * changes data structure.
-     * 
-     * file is the file we are wondering about lastSBT is the last build time for the state asking the question
-     */
-       private boolean hasStructuralChangedSince(File file,long lastSuccessfulBuildTime) {
-               //long lastModTime = file.lastModified();
-               Long l = (Long)structuralChangesSinceLastFullBuild.get(file.getAbsolutePath());
+               StringBuffer sb = new StringBuffer();
+               // null config means failed build i think as it is only set on successful full build?
+               sb.append("AjState(").append((buildConfig == null ? "NULLCONFIG" : buildConfig.getConfigFile().toString())).append(")");
+               return sb.toString();
+       }
+
+       /**
+        * Determine if a file has changed since a given time, using the local information recorded in the structural changes data
+        * structure.
+        
+        * file is the file we are wondering about lastSBT is the last build time for the state asking the question
+        */
+       private boolean hasStructuralChangedSince(File file, long lastSuccessfulBuildTime) {
+               // long lastModTime = file.lastModified();
+               Long l = (Long) structuralChangesSinceLastFullBuild.get(file.getAbsolutePath());
                long strucModTime = -1;
-               if (l!=null) strucModTime = l.longValue();
-               else         strucModTime = this.lastSuccessfulFullBuildTime;
+               if (l != null)
+                       strucModTime = l.longValue();
+               else
+                       strucModTime = this.lastSuccessfulFullBuildTime;
                // we now have:
                // 'strucModTime'-> the last time the class was structurally changed
-               return (strucModTime>lastSuccessfulBuildTime);
+               return (strucModTime > lastSuccessfulBuildTime);
        }
 
        private boolean pathChange(AjBuildConfig oldConfig, AjBuildConfig newConfig) {
                boolean changed = false;
-               
+
                List oldOutputLocs = getOutputLocations(oldConfig);
-               
+
                List oldClasspath = oldConfig.getClasspath();
                List newClasspath = newConfig.getClasspath();
-               if (stateListener!=null) stateListener.aboutToCompareClasspaths(oldClasspath,newClasspath);
-               if (changedAndNeedsFullBuild(oldClasspath,newClasspath,true,oldOutputLocs)) return true;
+               if (stateListener != null)
+                       stateListener.aboutToCompareClasspaths(oldClasspath, newClasspath);
+               if (changedAndNeedsFullBuild(oldClasspath, newClasspath, true, oldOutputLocs))
+                       return true;
                List oldAspectpath = oldConfig.getAspectpath();
                List newAspectpath = newConfig.getAspectpath();
-               if (changedAndNeedsFullBuild(oldAspectpath,newAspectpath,true,oldOutputLocs)) return true;
+               if (changedAndNeedsFullBuild(oldAspectpath, newAspectpath, true, oldOutputLocs))
+                       return true;
                List oldInJars = oldConfig.getInJars();
                List newInJars = newConfig.getInJars();
-               if (changedAndNeedsFullBuild(oldInJars,newInJars,false,oldOutputLocs)) return true;
+               if (changedAndNeedsFullBuild(oldInJars, newInJars, false, oldOutputLocs))
+                       return true;
                List oldInPath = oldConfig.getInpath();
                List newInPath = newConfig.getInpath();
-               if (changedAndNeedsFullBuild(oldInPath, newInPath,false,oldOutputLocs)) return true;
+               if (changedAndNeedsFullBuild(oldInPath, newInPath, false, oldOutputLocs))
+                       return true;
                return changed;
        }
-       
-       private List /*File*/ getOutputLocations(AjBuildConfig config) {
+
+       private List /* File */getOutputLocations(AjBuildConfig config) {
                List outputLocs = new ArrayList();
                if (config.getOutputDir() != null) {
                        try {
                                outputLocs.add(config.getOutputDir().getCanonicalFile());
-                       } catch (IOException e) {}
+                       } catch (IOException e) {
+                       }
                }
                if (config.getCompilationResultDestinationManager() != null) {
                        List dirs = config.getCompilationResultDestinationManager().getAllOutputLocations();
@@ -687,16 +700,19 @@ public class AjState {
                                        if (!outputLocs.contains(f.getCanonicalFile())) {
                                                outputLocs.add(f.getCanonicalFile());
                                        }
-                                       
-                               } catch (IOException e) {}
+
+                               } catch (IOException e) {
+                               }
                        }
                }
                return outputLocs;
        }
-       
-       private boolean changedAndNeedsFullBuild(List oldPath, List newPath, boolean checkClassFiles, List outputLocs) {        
-               if (oldPath == null) oldPath = new ArrayList();
-               if (newPath == null) newPath = new ArrayList();
+
+       private boolean changedAndNeedsFullBuild(List oldPath, List newPath, boolean checkClassFiles, List outputLocs) {
+               if (oldPath == null)
+                       oldPath = new ArrayList();
+               if (newPath == null)
+                       newPath = new ArrayList();
                if (oldPath.size() != newPath.size()) {
                        return true;
                }
@@ -705,10 +721,10 @@ public class AjState {
                        if (!oldPath.get(i).equals(newPath.get(i))) {
                                return true;
                        }
-                       Object o = oldPath.get(i);  // String on classpath, File on other paths
+                       Object o = oldPath.get(i); // String on classpath, File on other paths
                        File f = null;
                        if (o instanceof String) {
-                               f = new File((String)o);
+                               f = new File((String) o);
                        } else {
                                f = (File) o;
                        }
@@ -717,21 +733,20 @@ public class AjState {
                        }
                        if (f.exists() && f.isDirectory() && checkClassFiles) {
                                boolean foundMatch = false;
-                               for (Iterator iterator = outputLocs.iterator(); iterator
-                                               .hasNext();) {
+                               for (Iterator iterator = outputLocs.iterator(); iterator.hasNext();) {
                                        File dir = (File) iterator.next();
                                        if (f.equals(dir)) {
                                                foundMatch = true;
                                        }
                                }
                                if (!foundMatch) {
-                                   if (!analysedPaths.contains(f.getAbsolutePath())) { // Do not check paths more than once
-                        analysedPaths.add(f.getAbsolutePath());
-                        int classFileChanges = classFileChangedInDirSinceLastBuildRequiringFullBuild(f);
-                        if (classFileChanges == CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD)
-                            return true;
-                        // if (b && stateListener!=null) stateListener.detectedClassChangeInThisDir(f);
-                    }
+                                       if (!analysedPaths.contains(f.getAbsolutePath())) { // Do not check paths more than once
+                                               analysedPaths.add(f.getAbsolutePath());
+                                               int classFileChanges = classFileChangedInDirSinceLastBuildRequiringFullBuild(f);
+                                               if (classFileChanges == CLASS_FILE_CHANGED_THAT_NEEDS_FULL_BUILD)
+                                                       return true;
+                                               // if (b && stateListener!=null) stateListener.detectedClassChangeInThisDir(f);
+                                       }
                                }
                        }
                }
@@ -743,33 +758,33 @@ public class AjState {
                if (firstPass) {
                        compiledSourceFiles = new HashSet();
                        Collection modifiedFiles = getModifiedFiles();
-                       //System.out.println("modified: " + modifiedFiles);
+                       // System.out.println("modified: " + modifiedFiles);
                        thisTime.addAll(modifiedFiles);
-                       //??? eclipse IncrementalImageBuilder appears to do this
-       //              for (Iterator i = modifiedFiles.iterator(); i.hasNext();) {
-       //                      File file = (File) i.next();
-       //                      addDependentsOf(file);
-       //              }
-                       
-                       if(addedFiles != null) {
-                           for (Iterator fIter = addedFiles.iterator(); fIter.hasNext();) {
-                    Object o = fIter.next();
-                    if (!thisTime.contains(o))
-                        thisTime.add(o);
-                }
-                // thisTime.addAll(addedFiles);
-            }
-                       
+                       // ??? eclipse IncrementalImageBuilder appears to do this
+                       // for (Iterator i = modifiedFiles.iterator(); i.hasNext();) {
+                       // File file = (File) i.next();
+                       // addDependentsOf(file);
+                       // }
+
+                       if (addedFiles != null) {
+                               for (Iterator fIter = addedFiles.iterator(); fIter.hasNext();) {
+                                       Object o = fIter.next();
+                                       if (!thisTime.contains(o))
+                                               thisTime.add(o);
+                               }
+                               // thisTime.addAll(addedFiles);
+                       }
+
                        deleteClassFiles();
                        // Do not delete resources on incremental build, AJDT will handle
-                       // copying updates to the output folder.  AspectJ only does a copy
+                       // copying updates to the output folder. AspectJ only does a copy
                        // of them on full build (see copyResourcesToDestination() call
                        // in AjBuildManager)
-//                     deleteResources();
-                       
-                       addAffectedSourceFiles(thisTime,thisTime);
+                       // deleteResources();
+
+                       addAffectedSourceFiles(thisTime, thisTime);
                } else {
-                       addAffectedSourceFiles(thisTime,compiledSourceFiles);
+                       addAffectedSourceFiles(thisTime, compiledSourceFiles);
                }
                compiledSourceFiles = thisTime;
                return thisTime;
@@ -778,8 +793,8 @@ public class AjState {
        private boolean maybeIncremental() {
                return (FORCE_INCREMENTAL_DURING_TESTING || this.couldBeSubsequentIncrementalBuild);
        }
-       
-       public Map /* String -> List<ucf> */ getBinaryFilesToCompile(boolean firstTime) {
+
+       public Map /* String -> List<ucf> */getBinaryFilesToCompile(boolean firstTime) {
                if (lastSuccessfulBuildTime == -1 || buildConfig == null || !maybeIncremental()) {
                        return binarySourceFiles;
                }
@@ -792,15 +807,16 @@ public class AjState {
                        for (Iterator iter = addedOrModified.iterator(); iter.hasNext();) {
                                AjBuildConfig.BinarySourceFile bsf = (AjBuildConfig.BinarySourceFile) iter.next();
                                UnwovenClassFile ucf = createUnwovenClassFile(bsf);
-                               if (ucf == null) continue;
+                               if (ucf == null)
+                                       continue;
                                List ucfs = new ArrayList();
                                ucfs.add(ucf);
                                recordTypeChanged(ucf.getClassName());
-                               binarySourceFiles.put(bsf.binSrc.getPath(),ucfs);
+                               binarySourceFiles.put(bsf.binSrc.getPath(), ucfs);
                                List cfs = new ArrayList(1);
                                cfs.add(getClassFileFor(ucf));
                                this.inputClassFilesBySource.put(bsf.binSrc.getPath(), cfs);
-                               toWeave.put(bsf.binSrc.getPath(),ucfs);
+                               toWeave.put(bsf.binSrc.getPath(), ucfs);
                        }
                        deleteBinaryClassFiles();
                } else {
@@ -808,43 +824,43 @@ public class AjState {
                }
                return toWeave;
        }
-       
+
        /**
-        * Called when a path change is about to trigger a full build, but
-        * we haven't cleaned up from the last incremental build...
+        * Called when a path change is about to trigger a full build, but we haven't cleaned up from the last incremental build...
         */
        private void removeAllResultsOfLastBuild() {
-           // remove all binarySourceFiles, and all classesFromName...
-           for (Iterator iter = this.inputClassFilesBySource.values().iterator(); iter.hasNext();) {
-            List cfs = (List) iter.next();
-            for (Iterator iterator = cfs.iterator(); iterator.hasNext();) {
-                ClassFile cf = (ClassFile) iterator.next();
-                cf.deleteFromFileSystem();
-            }
-        }
-           for (Iterator iterator = classesFromName.values().iterator(); iterator.hasNext();) {
-            File f = (File) iterator.next();
-            new ClassFile("",f).deleteFromFileSystem();
-        }
-           for (Iterator iter = resources.iterator(); iter.hasNext();) {
-            String resource = (String) iter.next();
+               // remove all binarySourceFiles, and all classesFromName...
+               for (Iterator iter = this.inputClassFilesBySource.values().iterator(); iter.hasNext();) {
+                       List cfs = (List) iter.next();
+                       for (Iterator iterator = cfs.iterator(); iterator.hasNext();) {
+                               ClassFile cf = (ClassFile) iterator.next();
+                               cf.deleteFromFileSystem();
+                       }
+               }
+               for (Iterator iterator = classesFromName.values().iterator(); iterator.hasNext();) {
+                       File f = (File) iterator.next();
+                       new ClassFile("", f).deleteFromFileSystem();
+               }
+               for (Iterator iter = resources.iterator(); iter.hasNext();) {
+                       String resource = (String) iter.next();
                        List outputDirs = getOutputLocations(buildConfig);
                        for (Iterator iterator = outputDirs.iterator(); iterator.hasNext();) {
                                File dir = (File) iterator.next();
-                               File f = new File(dir,resource);
+                               File f = new File(dir, resource);
                                if (f.exists()) {
                                        f.delete();
-                               }                               
+                               }
                        }
-        }
+               }
        }
-       
+
        private void deleteClassFiles() {
-               if (deletedFiles == null) return;
-               for (Iterator i = deletedFiles.iterator(); i.hasNext(); ) {
-                       File deletedFile = (File)i.next();
+               if (deletedFiles == null)
+                       return;
+               for (Iterator i = deletedFiles.iterator(); i.hasNext();) {
+                       File deletedFile = (File) i.next();
                        addDependentsOf(deletedFile);
-                       
+
                        List cfs = (List) this.fullyQualifiedTypeNamesResultingFromCompilationUnit.get(deletedFile);
                        this.fullyQualifiedTypeNamesResultingFromCompilationUnit.remove(deletedFile);
 
@@ -854,107 +870,104 @@ public class AjState {
                                        deleteClassFile(cf);
                                }
                        }
-                       
+
                }
        }
-       
+
        private void deleteBinaryClassFiles() {
                // range of bsf is ucfs, domain is files (.class and jars) in inpath/jars
                for (Iterator iter = deletedBinaryFiles.iterator(); iter.hasNext();) {
                        AjBuildConfig.BinarySourceFile deletedFile = (AjBuildConfig.BinarySourceFile) iter.next();
                        List cfs = (List) this.inputClassFilesBySource.get(deletedFile.binSrc.getPath());
                        for (Iterator iterator = cfs.iterator(); iterator.hasNext();) {
-                               deleteClassFile((ClassFile)iterator.next());                            
+                               deleteClassFile((ClassFile) iterator.next());
                        }
                        this.inputClassFilesBySource.remove(deletedFile.binSrc.getPath());
                }
        }
-       
+
        private void deleteResources() {
                List oldResources = new ArrayList();
                oldResources.addAll(resources);
-               
+
                // note - this deliberately ignores resources in jars as we don't yet handle jar changes
                // with incremental compilation
-               for (Iterator i = buildConfig.getInpath().iterator(); i.hasNext(); ) {
-                       File inPathElement = (File)i.next();
+               for (Iterator i = buildConfig.getInpath().iterator(); i.hasNext();) {
+                       File inPathElement = (File) i.next();
                        if (inPathElement.isDirectory() && AjBuildManager.COPY_INPATH_DIR_RESOURCES) {
-                                 deleteResourcesFromDirectory(inPathElement,oldResources);
-                       }                       
-               }       
-               
+                               deleteResourcesFromDirectory(inPathElement, oldResources);
+                       }
+               }
+
                if (buildConfig.getSourcePathResources() != null) {
-                       for (Iterator i = buildConfig.getSourcePathResources().keySet().iterator(); i.hasNext(); ) {
-                               String resource = (String)i.next();
+                       for (Iterator i = buildConfig.getSourcePathResources().keySet().iterator(); i.hasNext();) {
+                               String resource = (String) i.next();
                                maybeDeleteResource(resource, oldResources);
                        }
                }
-               
+
                // oldResources need to be deleted...
                for (Iterator iter = oldResources.iterator(); iter.hasNext();) {
                        String victim = (String) iter.next();
                        List outputDirs = getOutputLocations(buildConfig);
                        for (Iterator iterator = outputDirs.iterator(); iterator.hasNext();) {
                                File dir = (File) iterator.next();
-                               File f = new File(dir,victim);
+                               File f = new File(dir, victim);
                                if (f.exists()) {
                                        f.delete();
-                               }                       
-                               resources.remove(victim);                               
+                               }
+                               resources.remove(victim);
                        }
                }
        }
-       
+
        private void maybeDeleteResource(String resName, List oldResources) {
                if (resources.contains(resName)) {
                        oldResources.remove(resName);
                        List outputDirs = getOutputLocations(buildConfig);
                        for (Iterator iterator = outputDirs.iterator(); iterator.hasNext();) {
                                File dir = (File) iterator.next();
-                               File source = new File(dir,resName);
-                               if ((source != null) && (source.exists()) &&
-                                               (source.lastModified() >= lastSuccessfulBuildTime)) {
+                               File source = new File(dir, resName);
+                               if (source.exists() && (source.lastModified() >= lastSuccessfulBuildTime)) {
                                        resources.remove(resName); // will ensure it is re-copied
                                }
                        }
-               }               
+               }
        }
-       
+
        private void deleteResourcesFromDirectory(File dir, List oldResources) {
-               File[] files = FileUtil.listFiles(dir,new FileFilter() {
+               File[] files = FileUtil.listFiles(dir, new FileFilter() {
                        public boolean accept(File f) {
-                               boolean accept = !(f.isDirectory() || f.getName().endsWith(".class")) ;
+                               boolean accept = !(f.isDirectory() || f.getName().endsWith(".class"));
                                return accept;
                        }
                });
-               
+
                // For each file, add it either as a real .class file or as a resource
                for (int i = 0; i < files.length; i++) {
                        // ASSERT: files[i].getAbsolutePath().startsWith(inFile.getAbsolutePath()
                        // or we are in trouble...
-                       String filename=null;
+                       String filename = null;
                        try {
-                               filename = files[i].getCanonicalPath().substring(
-                                           dir.getCanonicalPath().length()+1);
+                               filename = files[i].getCanonicalPath().substring(dir.getCanonicalPath().length() + 1);
                        } catch (IOException e) {
-                           // we are in trouble if this happens...
-                               IMessage msg = new Message("call to getCanonicalPath() failed for file " + files[i]+" with: "+e.getMessage(),
-                                                                                  new SourceLocation(files[i],0),false);
+                               // we are in trouble if this happens...
+                               IMessage msg = new Message("call to getCanonicalPath() failed for file " + files[i] + " with: " + e.getMessage(),
+                                               new SourceLocation(files[i], 0), false);
                                buildManager.handler.handleMessage(msg);
-                               filename = files[i].getAbsolutePath().substring(
-                                           dir.getAbsolutePath().length()+1);
+                               filename = files[i].getAbsolutePath().substring(dir.getAbsolutePath().length() + 1);
                        }
 
                        maybeDeleteResource(filename, oldResources);
-               }                               
+               }
        }
 
-       private void deleteClassFile(ClassFile cf) {            
+       private void deleteClassFile(ClassFile cf) {
                classesFromName.remove(cf.fullyQualifiedTypeName);
                weaver.deleteClassFile(cf.fullyQualifiedTypeName);
                cf.deleteFromFileSystem();
        }
-       
+
        private UnwovenClassFile createUnwovenClassFile(AjBuildConfig.BinarySourceFile bsf) {
                UnwovenClassFile ucf = null;
                try {
@@ -966,20 +979,18 @@ public class AjState {
                                outputDir = buildConfig.getCompilationResultDestinationManager().getDefaultOutputLocation();
                        }
                        ucf = weaver.addClassFile(bsf.binSrc, bsf.fromInPathDirectory, outputDir);
-               } catch(IOException ex) {
-                       IMessage msg = new Message("can't read class file " + bsf.binSrc.getPath(),
-                                                                          new SourceLocation(bsf.binSrc,0),false);
+               } catch (IOException ex) {
+                       IMessage msg = new Message("can't read class file " + bsf.binSrc.getPath(), new SourceLocation(bsf.binSrc, 0), false);
                        buildManager.handler.handleMessage(msg);
                }
                return ucf;
        }
-       
-       
+
        public void noteResult(InterimCompilationResult result) {
                if (!maybeIncremental()) {
                        return;
                }
-               
+
                File sourceFile = new File(result.fileName());
                CompilationResult cr = result.result();
 
@@ -987,29 +998,30 @@ public class AjState {
 
                UnwovenClassFile[] unwovenClassFiles = result.unwovenClassFiles();
                for (int i = 0; i < unwovenClassFiles.length; i++) {
-                       File lastTimeRound = (File) classesFromName.get(unwovenClassFiles[i].getClassName()); 
-                       recordClassFile(unwovenClassFiles[i],lastTimeRound);
-                       classesFromName.put(unwovenClassFiles[i].getClassName(),new File(unwovenClassFiles[i].getFilename()));
+                       File lastTimeRound = (File) classesFromName.get(unwovenClassFiles[i].getClassName());
+                       recordClassFile(unwovenClassFiles[i], lastTimeRound);
+                       classesFromName.put(unwovenClassFiles[i].getClassName(), new File(unwovenClassFiles[i].getFilename()));
                }
 
                // need to do this before types are deleted from the World...
-               recordWhetherCompilationUnitDefinedAspect(sourceFile,cr);               
+               recordWhetherCompilationUnitDefinedAspect(sourceFile, cr);
                deleteTypesThatWereInThisCompilationUnitLastTimeRoundButHaveBeenDeletedInThisIncrement(sourceFile, unwovenClassFiles);
-                               
-               recordFQNsResultingFromCompilationUnit(sourceFile,result);
+
+               recordFQNsResultingFromCompilationUnit(sourceFile, result);
        }
 
        /**
         * @param sourceFile
         * @param unwovenClassFiles
         */
-       private void deleteTypesThatWereInThisCompilationUnitLastTimeRoundButHaveBeenDeletedInThisIncrement(File sourceFile, UnwovenClassFile[] unwovenClassFiles) {
+       private void deleteTypesThatWereInThisCompilationUnitLastTimeRoundButHaveBeenDeletedInThisIncrement(File sourceFile,
+                       UnwovenClassFile[] unwovenClassFiles) {
                List classFiles = (List) this.fullyQualifiedTypeNamesResultingFromCompilationUnit.get(sourceFile);
                if (classFiles != null) {
                        for (int i = 0; i < unwovenClassFiles.length; i++) {
                                // deleting also deletes types from the weaver... don't do this if they are
                                // still present this time around...
-                               removeFromClassFilesIfPresent(unwovenClassFiles[i].getClassName(),classFiles);
+                               removeFromClassFilesIfPresent(unwovenClassFiles[i].getClassName(), classFiles);
                        }
                        for (Iterator iter = classFiles.iterator(); iter.hasNext();) {
                                ClassFile cf = (ClassFile) iter.next();
@@ -1017,8 +1029,7 @@ public class AjState {
                        }
                }
        }
-       
-       
+
        private void removeFromClassFilesIfPresent(String className, List classFiles) {
                ClassFile victim = null;
                for (Iterator iter = classFiles.iterator(); iter.hasNext();) {
@@ -1032,10 +1043,9 @@ public class AjState {
                        classFiles.remove(victim);
                }
        }
-       
+
        /**
-        * Record the fully-qualified names of the types that were declared in the given
-        * source file.
+        * Record the fully-qualified names of the types that were declared in the given source file.
         * 
         * @param sourceFile, the compilation unit
         * @param icr, the CompilationResult from compiling it
@@ -1044,28 +1054,26 @@ public class AjState {
                List classFiles = new ArrayList();
                UnwovenClassFile[] types = icr.unwovenClassFiles();
                for (int i = 0; i < types.length; i++) {
-                       classFiles.add(new ClassFile(types[i].getClassName(),new File(types[i].getFilename())));
+                       classFiles.add(new ClassFile(types[i].getClassName(), new File(types[i].getFilename())));
                }
-               this.fullyQualifiedTypeNamesResultingFromCompilationUnit.put(sourceFile,classFiles);
+               this.fullyQualifiedTypeNamesResultingFromCompilationUnit.put(sourceFile, classFiles);
        }
 
-       
        /**
-        * If this compilation unit defined an aspect, we need to know in case it is
-        * modified in a future increment.
+        * If this compilation unit defined an aspect, we need to know in case it is modified in a future increment.
         * 
         * @param sourceFile
         * @param cr
         */
        private void recordWhetherCompilationUnitDefinedAspect(File sourceFile, CompilationResult cr) {
                this.sourceFilesDefiningAspects.remove(sourceFile);
-               
-               if (cr!=null) {
+
+               if (cr != null) {
                        Map compiledTypes = cr.compiledTypes;
-                       if (compiledTypes!=null) {
+                       if (compiledTypes != null) {
                                for (Iterator iterator = compiledTypes.keySet().iterator(); iterator.hasNext();) {
-                                       char[] className = (char[])iterator.next();
-                                       String typeName = new String(className).replace('/','.');
+                                       char[] className = (char[]) iterator.next();
+                                       String typeName = new String(className).replace('/', '.');
                                        if (typeName.indexOf(BcelWeaver.SYNTHETIC_CLASS_POSTFIX) == -1) {
                                                ResolvedType rt = world.resolve(typeName);
                                                if (rt.isMissing()) {
@@ -1079,11 +1087,12 @@ public class AjState {
                                }
                        }
                }
-               
+
        }
-       
+
        private UnwovenClassFile removeFromPreviousIfPresent(UnwovenClassFile cf, InterimCompilationResult previous) {
-               if (previous == null) return null;
+               if (previous == null)
+                       return null;
                UnwovenClassFile[] unwovenClassFiles = previous.unwovenClassFiles();
                for (int i = 0; i < unwovenClassFiles.length; i++) {
                        UnwovenClassFile candidate = unwovenClassFiles[i];
@@ -1094,7 +1103,7 @@ public class AjState {
                }
                return null;
        }
-       
+
        private void recordClassFile(UnwovenClassFile thisTime, File lastTime) {
                if (simpleStrings == null) {
                        // batch build
@@ -1105,25 +1114,28 @@ public class AjState {
                        if (!rType.isMissing()) {
                                try {
                                        ClassFileReader reader = new ClassFileReader(thisTime.getBytes(), null);
-                                       this.resolvedTypeStructuresFromLastBuild.put(thisTime.getClassName(),new CompactTypeStructureRepresentation(reader));
+                                       this.resolvedTypeStructuresFromLastBuild.put(thisTime.getClassName(), new CompactTypeStructureRepresentation(
+                                                       reader));
                                } catch (ClassFormatException cfe) {
-                                       throw new BCException("Unexpected problem processing class",cfe);
+                                       throw new BCException("Unexpected problem processing class", cfe);
                                }
                        }
                        return;
                }
 
-               CompactTypeStructureRepresentation existingStructure = (CompactTypeStructureRepresentation) this.resolvedTypeStructuresFromLastBuild.get(thisTime.getClassName());
+               CompactTypeStructureRepresentation existingStructure = (CompactTypeStructureRepresentation) this.resolvedTypeStructuresFromLastBuild
+                               .get(thisTime.getClassName());
                ResolvedType newResolvedType = world.resolve(thisTime.getClassName());
                if (!newResolvedType.isMissing()) {
                        try {
                                ClassFileReader reader = new ClassFileReader(thisTime.getBytes(), null);
-                               this.resolvedTypeStructuresFromLastBuild.put(thisTime.getClassName(),new CompactTypeStructureRepresentation(reader));
+                               this.resolvedTypeStructuresFromLastBuild.put(thisTime.getClassName(),
+                                               new CompactTypeStructureRepresentation(reader));
                        } catch (ClassFormatException cfe) {
-                               throw new BCException("Unexpected problem processing class",cfe);
+                               throw new BCException("Unexpected problem processing class", cfe);
                        }
                }
-               
+
                if (lastTime == null) {
                        recordTypeChanged(thisTime.getClassName());
                        return;
@@ -1138,32 +1150,31 @@ public class AjState {
                        ClassFileReader reader = new ClassFileReader(newBytes, lastTime.getAbsolutePath().toCharArray());
                        // ignore local types since they're only visible inside a single method
                        if (!(reader.isLocal() || reader.isAnonymous())) {
-                               if (hasStructuralChanges(reader,existingStructure)) {
-                                       if (world.forDEBUG_structuralChangesCode) 
-                                               System.err.println("Detected a structural change in "+thisTime.getFilename());
-                                       structuralChangesSinceLastFullBuild.put(thisTime.getFilename(),new Long(currentBuildTime));
-                                       recordTypeChanged(new String(reader.getName()).replace('/','.'));
+                               if (hasStructuralChanges(reader, existingStructure)) {
+                                       if (world.forDEBUG_structuralChangesCode)
+                                               System.err.println("Detected a structural change in " + thisTime.getFilename());
+                                       structuralChangesSinceLastFullBuild.put(thisTime.getFilename(), new Long(currentBuildTime));
+                                       recordTypeChanged(new String(reader.getName()).replace('/', '.'));
                                }
                        }
                } catch (ClassFormatException e) {
                        recordTypeChanged(thisTime.getClassName());
-               }                                                       
+               }
        }
-       
+
        private static final char[][] EMPTY_CHAR_ARRAY = new char[0][];
-       private static final char[] BRACKET_V = {')','V'};
+
        /**
-        * Compare the class structure of the new intermediate (unwoven) class with the
-        * existingResolvedType of the same class that we have in the world, looking for
-        * any structural differences (and ignoring aj members resulting from weaving....)
+        * Compare the class structure of the new intermediate (unwoven) class with the existingResolvedType of the same class that we
+        * have in the world, looking for any structural differences (and ignoring aj members resulting from weaving....)
+        * 
+        * Some notes from Andy... lot of problems here, which I've eventually resolved by building the compactstructure based on a
+        * classfilereader, rather than on a ResolvedType. There are accessors for inner types and funky fields that the compiler
+        * creates to support the language - for non-static inner types it also mangles ctors to be prefixed with an instance of the
+        * surrounding type.
         * 
-        * Some notes from Andy... lot of problems here, which I've eventually resolved
-        * by building the compactstructure based on a classfilereader, rather than on a
-        * ResolvedType.  There are accessors for inner types and funky fields that the
-        * compiler creates to support the language - for non-static inner types it
-        * also mangles ctors to be prefixed with an instance of the surrounding type.
+        * Warning : long but boring method implementation...
         * 
-        * Warning : long but boring method implementation... 
         * @param reader
         * @param existingType
         * @return
@@ -1172,167 +1183,179 @@ public class AjState {
                if (existingType == null) {
                        return true;
                }
-               
+
                // modifiers
-               if (!modifiersEqual(reader.getModifiers(),existingType.modifiers)) {
+               if (!modifiersEqual(reader.getModifiers(), existingType.modifiers)) {
                        return true;
                }
-               
+
                // generic signature
-               if (!CharOperation.equals(reader.getGenericSignature(),existingType.genericSignature)) {
+               if (!CharOperation.equals(reader.getGenericSignature(), existingType.genericSignature)) {
                        return true;
                }
-               
+
                // superclass name
-               if (!CharOperation.equals(reader.getSuperclassName(),existingType.superclassName)) {
+               if (!CharOperation.equals(reader.getSuperclassName(), existingType.superclassName)) {
                        return true;
                }
-               
+
                // interfaces
                char[][] existingIfs = existingType.interfaces;
                char[][] newIfsAsChars = reader.getInterfaceNames();
-               if (newIfsAsChars == null) { newIfsAsChars = EMPTY_CHAR_ARRAY; } // damn I'm lazy...
-               if (existingIfs == null) { existingIfs = EMPTY_CHAR_ARRAY; }
-               if (existingIfs.length != newIfsAsChars.length) return true;
+               if (newIfsAsChars == null) {
+                       newIfsAsChars = EMPTY_CHAR_ARRAY;
+               } // damn I'm lazy...
+               if (existingIfs == null) {
+                       existingIfs = EMPTY_CHAR_ARRAY;
+               }
+               if (existingIfs.length != newIfsAsChars.length)
+                       return true;
                new_interface_loop: for (int i = 0; i < newIfsAsChars.length; i++) {
                        for (int j = 0; j < existingIfs.length; j++) {
-                               if (CharOperation.equals(existingIfs[j],newIfsAsChars[i])) {
+                               if (CharOperation.equals(existingIfs[j], newIfsAsChars[i])) {
                                        continue new_interface_loop;
                                }
                        }
                        return true;
                }
-               
+
                // fields
-//             CompactMemberStructureRepresentation[] existingFields = existingType.fields;
+               // CompactMemberStructureRepresentation[] existingFields = existingType.fields;
                IBinaryField[] newFields = reader.getFields();
-               if (newFields == null) { newFields = CompactTypeStructureRepresentation.NoField; }
+               if (newFields == null) {
+                       newFields = CompactTypeStructureRepresentation.NoField;
+               }
 
                // all redundant for now ... could be an optimization at some point...
                // remove any ajc$XXX fields from those we compare with
                // the existing fields - bug 129163
-//             List nonGenFields = new ArrayList();
-//             for (int i = 0; i < newFields.length; i++) {
-//                     IBinaryField field = newFields[i];
-//                     //if (!CharOperation.prefixEquals(NameMangler.AJC_DOLLAR_PREFIX,field.getName())) { // this would skip ajc$ fields
-//                     //if ((field.getModifiers()&0x1000)==0) // 0x1000 => synthetic    - this will skip synthetic fields (eg. this$0)
-//                     nonGenFields.add(field);
-//                     //}
-//             }
+               // List nonGenFields = new ArrayList();
+               // for (int i = 0; i < newFields.length; i++) {
+               // IBinaryField field = newFields[i];
+               // //if (!CharOperation.prefixEquals(NameMangler.AJC_DOLLAR_PREFIX,field.getName())) { // this would skip ajc$ fields
+               // //if ((field.getModifiers()&0x1000)==0) // 0x1000 => synthetic - this will skip synthetic fields (eg. this$0)
+               // nonGenFields.add(field);
+               // //}
+               // }
                IBinaryField[] existingFs = existingType.binFields;
-               if (newFields.length != existingFs.length) return true;
-               new_field_loop: 
-                       for (int i = 0; i < newFields.length; i++) {
-                               IBinaryField field = newFields[i];
-                               char[] fieldName = field.getName();
-                               for (int j = 0; j < existingFs.length; j++) {
-                                       if (CharOperation.equals(existingFs[j].getName(),fieldName)) {
-                                               if (!modifiersEqual(field.getModifiers(),existingFs[j].getModifiers())) {
-                                                       return true;
-                                               }
-                                               if (!CharOperation.equals(existingFs[j].getTypeName(),field.getTypeName())) {
-                                                       return true;
-                                               }
-                                               continue new_field_loop;
+               if (newFields.length != existingFs.length)
+                       return true;
+               new_field_loop: for (int i = 0; i < newFields.length; i++) {
+                       IBinaryField field = newFields[i];
+                       char[] fieldName = field.getName();
+                       for (int j = 0; j < existingFs.length; j++) {
+                               if (CharOperation.equals(existingFs[j].getName(), fieldName)) {
+                                       if (!modifiersEqual(field.getModifiers(), existingFs[j].getModifiers())) {
+                                               return true;
+                                       }
+                                       if (!CharOperation.equals(existingFs[j].getTypeName(), field.getTypeName())) {
+                                               return true;
                                        }
+                                       continue new_field_loop;
                                }
-                               return true;
                        }
-               
+                       return true;
+               }
+
                // methods
-//             CompactMemberStructureRepresentation[] existingMethods = existingType.methods;
+               // CompactMemberStructureRepresentation[] existingMethods = existingType.methods;
                IBinaryMethod[] newMethods = reader.getMethods();
-               if (newMethods == null) { newMethods = CompactTypeStructureRepresentation.NoMethod; }
-               
+               if (newMethods == null) {
+                       newMethods = CompactTypeStructureRepresentation.NoMethod;
+               }
+
                // all redundant for now ... could be an optimization at some point...
-               
+
                // Ctors in a non-static inner type have an 'extra parameter' of the enclosing type.
                // If skippableDescriptorPrefix gets set here then it is set to the descriptor portion
-               // for this 'extra parameter'.  For an inner class of pkg.Foo the skippable descriptor
+               // for this 'extra parameter'. For an inner class of pkg.Foo the skippable descriptor
                // prefix will be '(Lpkg/Foo;' - so later when comparing <init> methods we know what to
                // compare.
                // IF THIS CODE NEEDS TO GET MORE COMPLICATED, I THINK ITS WORTH RIPPING IT ALL OUT AND
                // CREATING THE STRUCTURAL CHANGES OBJECT BASED ON CLASSREADER OUTPUT RATHER THAN
                // THE RESOLVEDTYPE - THEN THERE WOULD BE NO NEED TO TREAT SOME METHODS IN A PECULIAR
                // WAY.
-//             char[] skippableDescriptorPrefix = null;
-//             char[] enclosingTypeName = reader.getEnclosingTypeName();
-//             boolean isStaticType = Modifier.isStatic(reader.getModifiers());
-//             if (!isStaticType && enclosingTypeName!=null) {
-//                     StringBuffer sb = new StringBuffer();
-//                     sb.append("(L").append(new String(enclosingTypeName)).append(";");
-//                     skippableDescriptorPrefix = sb.toString().toCharArray();
-//             }
-//             
-//             
-//             // remove the aspectOf, hasAspect, clinit and ajc$XXX methods 
-//             // from those we compare with the existing methods - bug 129163
-//             List nonGenMethods = new ArrayList();
-//             for (int i = 0; i < newMethods.length; i++) {
-//                     IBinaryMethod method = newMethods[i];
-////                   if ((method.getModifiers() & 0x1000)!=0) continue;  // 0x1000 => synthetic    - will cause us to skip access$0 - is this always safe?
-//                     char[] methodName = method.getSelector();
-////                   if (!CharOperation.equals(methodName,NameMangler.METHOD_ASPECTOF) && 
-////                           !CharOperation.equals(methodName,NameMangler.METHOD_HASASPECT) &&
-////                           !CharOperation.equals(methodName,NameMangler.STATIC_INITIALIZER) && 
-////                           !CharOperation.prefixEquals(NameMangler.AJC_DOLLAR_PREFIX,methodName) &&
-////                           !CharOperation.prefixEquals(NameMangler.CLINIT,methodName)) { 
-//                               nonGenMethods.add(method);
-////                   }
-//             }
+               // char[] skippableDescriptorPrefix = null;
+               // char[] enclosingTypeName = reader.getEnclosingTypeName();
+               // boolean isStaticType = Modifier.isStatic(reader.getModifiers());
+               // if (!isStaticType && enclosingTypeName!=null) {
+               // StringBuffer sb = new StringBuffer();
+               // sb.append("(L").append(new String(enclosingTypeName)).append(";");
+               // skippableDescriptorPrefix = sb.toString().toCharArray();
+               // }
+               //              
+               //              
+               // // remove the aspectOf, hasAspect, clinit and ajc$XXX methods
+               // // from those we compare with the existing methods - bug 129163
+               // List nonGenMethods = new ArrayList();
+               // for (int i = 0; i < newMethods.length; i++) {
+               // IBinaryMethod method = newMethods[i];
+               // // if ((method.getModifiers() & 0x1000)!=0) continue; // 0x1000 => synthetic - will cause us to skip access$0 - is this
+               // always safe?
+               // char[] methodName = method.getSelector();
+               // // if (!CharOperation.equals(methodName,NameMangler.METHOD_ASPECTOF) &&
+               // // !CharOperation.equals(methodName,NameMangler.METHOD_HASASPECT) &&
+               // // !CharOperation.equals(methodName,NameMangler.STATIC_INITIALIZER) &&
+               // // !CharOperation.prefixEquals(NameMangler.AJC_DOLLAR_PREFIX,methodName) &&
+               // // !CharOperation.prefixEquals(NameMangler.CLINIT,methodName)) {
+               // nonGenMethods.add(method);
+               // // }
+               // }
                IBinaryMethod[] existingMs = existingType.binMethods;
-               if (newMethods.length != existingMs.length) return true;
-               new_method_loop: 
-                       for (int i = 0; i < newMethods.length; i++) {
-                               IBinaryMethod method = newMethods[i];
-                               char[] methodName = method.getSelector();
-                               for (int j = 0; j < existingMs.length; j++) {
-                                       if (CharOperation.equals(existingMs[j].getSelector(),methodName)) {
-                                               // candidate match
-                                               if (!CharOperation.equals(method.getMethodDescriptor(),existingMs[j].getMethodDescriptor())) {
+               if (newMethods.length != existingMs.length)
+                       return true;
+               new_method_loop: for (int i = 0; i < newMethods.length; i++) {
+                       IBinaryMethod method = newMethods[i];
+                       char[] methodName = method.getSelector();
+                       for (int j = 0; j < existingMs.length; j++) {
+                               if (CharOperation.equals(existingMs[j].getSelector(), methodName)) {
+                                       // candidate match
+                                       if (!CharOperation.equals(method.getMethodDescriptor(), existingMs[j].getMethodDescriptor())) {
                                                // ok, the descriptors don't match, but is this a funky ctor on a non-static inner
                                                // type?
-//                                             boolean mightBeOK = 
-//                                                     skippableDescriptorPrefix!=null &&  // set for inner types
-//                                                     CharOperation.equals(methodName,NameMangler.INIT) && // ctor
-//                                  CharOperation.prefixEquals(skippableDescriptorPrefix,method.getMethodDescriptor()); // checking for prefix on the descriptor
-//                                             if (mightBeOK) {
-//                                                     // OK, so the descriptor starts something like '(Lpkg/Foo;' - we now may need to look at the rest of the 
-//                                                     // descriptor if it takes >1 parameter.
-//                                                     // eg. could be (Lpkg/C;Ljava/lang/String;) where the skippablePrefix is (Lpkg/C;
-//                                                     char [] md = method.getMethodDescriptor();
-//                                                     char[] remainder = CharOperation.subarray(md, skippableDescriptorPrefix.length, md.length);
-//                                                     if (CharOperation.equals(remainder,BRACKET_V)) continue new_method_loop; // no other parameters to worry about
-//                                                     char[] comparableSig = CharOperation.subarray(existingMethods[j].signature, 1, existingMethods[j].signature.length);
-//                                                     boolean match = CharOperation.equals(comparableSig, remainder);
-//                                                     if (match) continue new_method_loop;
-//                                             }
-                                                       continue; // might be overloading
-                                               } else {
-                                                       // matching sigs
-                                                       if (!modifiersEqual(method.getModifiers(),existingMs[j].getModifiers())) {
-                                                               return true;
-                                                       }
-                                                       continue new_method_loop;
+                                               // boolean mightBeOK =
+                                               // skippableDescriptorPrefix!=null && // set for inner types
+                                               // CharOperation.equals(methodName,NameMangler.INIT) && // ctor
+                                               // CharOperation.prefixEquals(skippableDescriptorPrefix,method.getMethodDescriptor()); // checking for
+                                               // prefix on the descriptor
+                                               // if (mightBeOK) {
+                                               // // OK, so the descriptor starts something like '(Lpkg/Foo;' - we now may need to look at the rest of the
+                                               // // descriptor if it takes >1 parameter.
+                                               // // eg. could be (Lpkg/C;Ljava/lang/String;) where the skippablePrefix is (Lpkg/C;
+                                               // char [] md = method.getMethodDescriptor();
+                                               // char[] remainder = CharOperation.subarray(md, skippableDescriptorPrefix.length, md.length);
+                                               // if (CharOperation.equals(remainder,BRACKET_V)) continue new_method_loop; // no other parameters to worry
+                                               // about
+                                               // char[] comparableSig = CharOperation.subarray(existingMethods[j].signature, 1,
+                                               // existingMethods[j].signature.length);
+                                               // boolean match = CharOperation.equals(comparableSig, remainder);
+                                               // if (match) continue new_method_loop;
+                                               // }
+                                               continue; // might be overloading
+                                       } else {
+                                               // matching sigs
+                                               if (!modifiersEqual(method.getModifiers(), existingMs[j].getModifiers())) {
+                                                       return true;
                                                }
+                                               continue new_method_loop;
                                        }
                                }
-                               return true; // (no match found)
                        }
-               
+                       return true; // (no match found)
+               }
+
                return false;
        }
 
-
        private boolean modifiersEqual(int eclipseModifiers, int resolvedTypeModifiers) {
                resolvedTypeModifiers = resolvedTypeModifiers & ExtraCompilerModifiers.AccJustFlag;
                eclipseModifiers = eclipseModifiers & ExtraCompilerModifiers.AccJustFlag;
-//             if ((eclipseModifiers & CompilerModifiers.AccSuper) != 0) {
-//                     eclipseModifiers -= CompilerModifiers.AccSuper;
-//             }
+               // if ((eclipseModifiers & CompilerModifiers.AccSuper) != 0) {
+               // eclipseModifiers -= CompilerModifiers.AccSuper;
+               // }
                return (eclipseModifiers == resolvedTypeModifiers);
        }
-       
+
        private static StringSet makeStringSet(List strings) {
                StringSet ret = new StringSet(strings.size());
                for (Iterator iter = strings.iterator(); iter.hasNext();) {
@@ -1341,26 +1364,27 @@ public class AjState {
                }
                return ret;
        }
-               
 
-    private String stringifyList(Set l) {
-         StringBuffer sb = new StringBuffer();
-         sb.append("{");
-         for (Iterator iter = l.iterator(); iter.hasNext();) {
+       private String stringifyList(Set l) {
+               StringBuffer sb = new StringBuffer();
+               sb.append("{");
+               for (Iterator iter = l.iterator(); iter.hasNext();) {
                        Object el = iter.next();
                        sb.append(el);
-                       if (iter.hasNext()) sb.append(",");
+                       if (iter.hasNext())
+                               sb.append(",");
                }
-         sb.append("}");
-         return sb.toString();
-    }
-       
+               sb.append("}");
+               return sb.toString();
+       }
+
        protected void addAffectedSourceFiles(Set addTo, Set lastTimeSources) {
-           if (qualifiedStrings.elementSize == 0 && simpleStrings.elementSize == 0)
-            return;
+               if (qualifiedStrings.elementSize == 0 && simpleStrings.elementSize == 0)
+                       return;
                if (listenerDefined())
-            getListener().recordDecision(
-                "Examining whether any other files now need compilation based on just compiling: '" + stringifyList(lastTimeSources) + "'");
+                       getListener().recordDecision(
+                                       "Examining whether any other files now need compilation based on just compiling: '"
+                                                       + stringifyList(lastTimeSources) + "'");
                // the qualifiedStrings are of the form 'p1/p2' & the simpleStrings are just 'X'
                char[][][] qualifiedNames = ReferenceCollection.internQualifiedNames(qualifiedStrings);
                // if a well known qualified name was found then we can skip over these
@@ -1371,18 +1395,18 @@ public class AjState {
                if (simpleNames.length < simpleStrings.elementSize)
                        simpleNames = null;
 
-               //System.err.println("simple: " + simpleStrings);
-               //System.err.println("qualif: " + qualifiedStrings);
+               // System.err.println("simple: " + simpleStrings);
+               // System.err.println("qualif: " + qualifiedStrings);
 
                for (Iterator i = references.entrySet().iterator(); i.hasNext();) {
                        Map.Entry entry = (Map.Entry) i.next();
-                       ReferenceCollection refs = (ReferenceCollection)entry.getValue();
+                       ReferenceCollection refs = (ReferenceCollection) entry.getValue();
                        if (refs != null && refs.includes(qualifiedNames, simpleNames)) {
-                               File file = (File)entry.getKey();
+                               File file = (File) entry.getKey();
                                if (file.exists()) {
-                                       if (!lastTimeSources.contains(file)) {  //??? O(n**2)
+                                       if (!lastTimeSources.contains(file)) { // ??? O(n**2)
                                                if (listenerDefined()) {
-                                                       getListener().recordDecision("Need to recompile '"+file.getName().toString()+"'");
+                                                       getListener().recordDecision("Need to recompile '" + file.getName().toString() + "'");
                                                }
                                                addTo.add(file);
                                        }
@@ -1393,38 +1417,37 @@ public class AjState {
                // stuff off disk (since we no longer have UnwovenClassFile objects) in order to satisfy references
                // in the new files we are about to compile (see pr133532)
                if (addTo.size() > 0)
-            addTo.addAll(lastTimeSources);
-        // // XXX Promote addTo to a Set - then we don't need this rubbish? but does it need to be ordered?
-        // if (addTo.size()>0) {
-        // for (Iterator iter = lastTimeSources.iterator(); iter.hasNext();) {
-        // Object element = (Object) iter.next();
-        // if (!addTo.contains(element)) addTo.add(element);
-        // }
-        // }
-
-        qualifiedStrings.clear();
+                       addTo.addAll(lastTimeSources);
+               // // XXX Promote addTo to a Set - then we don't need this rubbish? but does it need to be ordered?
+               // if (addTo.size()>0) {
+               // for (Iterator iter = lastTimeSources.iterator(); iter.hasNext();) {
+               // Object element = (Object) iter.next();
+               // if (!addTo.contains(element)) addTo.add(element);
+               // }
+               // }
+
+               qualifiedStrings.clear();
                simpleStrings.clear();
        }
 
        /**
-     * Record that a particular type has been touched during a compilation run. Information is used to ensure any types
-     * depending upon this one are also recompiled.
-     * 
-     * @param typename (possibly qualified) type name
-     */
-    protected void recordTypeChanged(String typename) {
-        int lastDot = typename.lastIndexOf('.');
+        * Record that a particular type has been touched during a compilation run. Information is used to ensure any types depending
+        * upon this one are also recompiled.
+        
+        * @param typename (possibly qualified) type name
+        */
+       protected void recordTypeChanged(String typename) {
+               int lastDot = typename.lastIndexOf('.');
                String typeName;
                if (lastDot != -1) {
-            String packageName = typename.substring(0, lastDot).replace('.', '/');
+                       String packageName = typename.substring(0, lastDot).replace('.', '/');
                        qualifiedStrings.add(packageName);
-            typeName = typename.substring(lastDot+1);
+                       typeName = typename.substring(lastDot + 1);
                } else {
                        qualifiedStrings.add("");
-            typeName = typename;
+                       typeName = typename;
                }
 
-                       
                int memberIndex = typeName.indexOf('$');
                if (memberIndex > 0)
                        typeName = typeName.substring(0, memberIndex);
@@ -1433,7 +1456,7 @@ public class AjState {
 
        protected void addDependentsOf(File sourceFile) {
                List cfs = (List) this.fullyQualifiedTypeNamesResultingFromCompilationUnit.get(sourceFile);
-               
+
                if (cfs != null) {
                        for (Iterator iter = cfs.iterator(); iter.hasNext();) {
                                ClassFile cf = (ClassFile) iter.next();
@@ -1448,27 +1471,42 @@ public class AjState {
        }
 
        public IHierarchy getStructureModel() {
-        return structureModel;
+               return structureModel;
+       }
+
+       public void setWeaver(BcelWeaver bw) {
+               weaver = bw;
+       }
+
+       public BcelWeaver getWeaver() {
+               return weaver;
        }
 
-       public void setWeaver(BcelWeaver bw) { weaver=bw;}
-       public BcelWeaver getWeaver()  {return weaver;}
+       public void setWorld(BcelWorld bw) {
+               world = bw;
+       }
+
+       public BcelWorld getBcelWorld() {
+               return world;
+       }
+
+       public void setRelationshipMap(IRelationshipMap irm) {
+               relmap = irm;
+       }
 
-       public void setWorld(BcelWorld bw) {world=bw;}
-       public BcelWorld getBcelWorld() {return world;  }
-       
-       public void setRelationshipMap(IRelationshipMap irm) { relmap = irm;}
-       public IRelationshipMap getRelationshipMap() { return relmap;}
+       public IRelationshipMap getRelationshipMap() {
+               return relmap;
+       }
 
        public int getNumberOfStructuralChangesSinceLastFullBuild() {
                return structuralChangesSinceLastFullBuild.size();
        }
-       
+
        /** Returns last time we did a full or incremental build. */
        public long getLastBuildTime() {
                return lastSuccessfulBuildTime;
        }
-       
+
        /** Returns last time we did a full build */
        public long getLastFullBuildTime() {
                return lastSuccessfulFullBuildTime;
@@ -1480,13 +1518,13 @@ public class AjState {
        public AjBuildConfig getBuildConfig() {
                return this.buildConfig;
        }
-       
+
        public void clearBinarySourceFiles() {
                this.binarySourceFiles = new HashMap();
        }
-       
+
        public void recordBinarySource(String fromPathName, List unwovenClassFiles) {
-               this.binarySourceFiles.put(fromPathName,unwovenClassFiles);
+               this.binarySourceFiles.put(fromPathName, unwovenClassFiles);
                if (this.maybeIncremental()) {
                        List simpleClassFiles = new LinkedList();
                        for (Iterator iter = unwovenClassFiles.iterator(); iter.hasNext();) {
@@ -1494,7 +1532,7 @@ public class AjState {
                                ClassFile cf = getClassFileFor(ucf);
                                simpleClassFiles.add(cf);
                        }
-                       this.inputClassFilesBySource.put(fromPathName,simpleClassFiles);
+                       this.inputClassFilesBySource.put(fromPathName, simpleClassFiles);
                }
        }
 
@@ -1503,21 +1541,21 @@ public class AjState {
         * @return
         */
        private ClassFile getClassFileFor(UnwovenClassFile ucf) {
-               return new ClassFile(ucf.getClassName(),new File(ucf.getFilename()));
+               return new ClassFile(ucf.getClassName(), new File(ucf.getFilename()));
        }
-       
+
        public Map getBinarySourceMap() {
                return this.binarySourceFiles;
        }
-       
+
        public Map getClassNameToFileMap() {
                return this.classesFromName;
        }
-       
+
        public boolean hasResource(String resourceName) {
                return this.resources.contains(resourceName);
        }
-       
+
        public void recordResource(String resourceName) {
                this.resources.add(resourceName);
        }
@@ -1535,35 +1573,36 @@ public class AjState {
        public Set getDeletedFiles() {
                return this.deletedFiles;
        }
-       
+
        public void forceBatchBuildNextTimeAround() {
                this.batchBuildRequiredThisTime = true;
        }
-       
+
        public boolean requiresFullBatchBuild() {
                return this.batchBuildRequiredThisTime;
        }
-       
+
        private static class ClassFile {
                public String fullyQualifiedTypeName;
-               public File   locationOnDisk;
-               
+               public File locationOnDisk;
+
                public ClassFile(String fqn, File location) {
                        this.fullyQualifiedTypeName = fqn;
                        this.locationOnDisk = location;
                }
-               
+
                public void deleteFromFileSystem() {
                        String namePrefix = locationOnDisk.getName();
-                       namePrefix = namePrefix.substring(0,namePrefix.lastIndexOf('.'));
+                       namePrefix = namePrefix.substring(0, namePrefix.lastIndexOf('.'));
                        final String targetPrefix = namePrefix + BcelWeaver.CLOSURE_CLASS_PREFIX;
                        File dir = locationOnDisk.getParentFile();
                        if (dir != null) {
                                File[] weaverGenerated = dir.listFiles(new FilenameFilter() {
                                        public boolean accept(File dir, String name) {
                                                return name.startsWith(targetPrefix);
-                                       }});
-                               if (weaverGenerated!=null) {
+                                       }
+                               });
+                               if (weaverGenerated != null) {
                                        for (int i = 0; i < weaverGenerated.length; i++) {
                                                weaverGenerated[i].delete();
                                        }
@@ -1577,7 +1616,7 @@ public class AjState {
                buildManager.state = null;
                buildManager.setStructureModel(null);
        }
-       
+
        public Map getAspectNamesToFileNameMap() {
                return aspectsFromFileNames;
        }
@@ -1585,20 +1624,20 @@ public class AjState {
        public void initializeAspectNamesToFileNameMap() {
                this.aspectsFromFileNames = new HashMap();
        }
-       
+
        // Will allow us to record decisions made during incremental processing, hopefully aid in debugging
        public boolean listenerDefined() {
-               return stateListener!=null;
+               return stateListener != null;
        }
-       
+
        public IStateListener getListener() {
                return stateListener;
        }
 
        public IBinaryType checkPreviousBuild(String name) {
-               return (IBinaryType)resolvedTypeStructuresFromLastBuild.get(name);
+               return (IBinaryType) resolvedTypeStructuresFromLastBuild.get(name);
        }
-       
+
        public AjBuildManager getAjBuildManager() {
                return buildManager;
        }
index 251e869c23f1308f39c0fe11a93fe6b33875f492..d846bedcb5493fba1d2137f9ddb845c176414789 100644 (file)
@@ -157,7 +157,7 @@ public class AjASTConverter extends ASTConverter {
                                adviceDecl.setBody(block);
                        }
                        if (block != null && statements != null) {
-                               int statementsLength = statements == null ? 0 : statements.length;
+                               int statementsLength = statements.length;
                                for (int i = 0; i < statementsLength; i++) {
                                        if (statements[i] instanceof org.aspectj.org.eclipse.jdt.internal.compiler.ast.LocalDeclaration) {
                                                checkAndAddMultipleLocalDeclaration(statements, i, block.statements());
index fdc14146b9695951d19746afdbcd3a40975cd7fd..6702208d14a3dc268b5a5a43c6bb3fecfbffd957 100644 (file)
  *     PARC     initial implementation 
  * ******************************************************************/
 
-
 package org.aspectj.ajdt.ajc;
 
 //import org.aspectj.ajdt.internal.core.builder.AjBuildConfig;
-import org.aspectj.ajdt.StreamPrintWriter;
-import org.aspectj.bridge.*;
-import org.aspectj.util.*;
-import org.aspectj.org.eclipse.jdt.core.compiler.InvalidInputException;
-
-import java.io.*;
-import java.util.*;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.ListIterator;
 
 import junit.framework.TestCase;
 
+import org.aspectj.ajdt.StreamPrintWriter;
+import org.aspectj.bridge.AbortException;
+import org.aspectj.bridge.CountingMessageHandler;
+import org.aspectj.bridge.IMessage;
+import org.aspectj.bridge.IMessageHolder;
+import org.aspectj.bridge.MessageHandler;
+import org.aspectj.bridge.MessageWriter;
+import org.aspectj.org.eclipse.jdt.core.compiler.InvalidInputException;
+import org.aspectj.util.FileUtil;
+
 /**
  * Some black-box test is happening here.
  */
 public class AjdtCommandTestCase extends TestCase {
 
-    private ArrayList tempFiles = new ArrayList();
+       private ArrayList tempFiles = new ArrayList();
        private StreamPrintWriter outputWriter = new StreamPrintWriter(new PrintWriter(System.out));
-//     private AjdtCommand command = new AjdtCommand();        
+       // private AjdtCommand command = new AjdtCommand();
        private MessageWriter messageWriter = new MessageWriter(outputWriter, false);
-       private CountingMessageHandler counter 
-        = new CountingMessageHandler(messageWriter);
+       private CountingMessageHandler counter = new CountingMessageHandler(messageWriter);
+
        public AjdtCommandTestCase(String name) {
                super(name);
-//             command.buildArgParser.out = outputWriter;
+               // command.buildArgParser.out = outputWriter;
+       }
+
+       private static boolean delete(File file) {
+               if ((null == file) || !file.exists()) {
+                       return true;
+               } else if (!file.canWrite()) {
+                       return false;
+               }
+               if (file.isDirectory()) {
+                       FileUtil.deleteContents(file);
+               }
+               return file.delete();
+       }
+
+       public void testIncrementalHandler() throws IOException {
+               // verify that AjdtCommand respects handler parm
+               // in runCommand and repeatCommand
+               final String sig = getClass().getName() + ".testIncrementalHandler";
+               boolean runTest = false;
+               try {
+                       runTest = null != System.getProperty(sig);
+               } catch (Throwable t) {
+               }
+               if (!runTest) {
+                       System.out.println("warning: to run " + sig + "(), set system property " + sig);
+                       return;
+               }
+               // setup initial compile
+               File testBase = new File("testdata/ajdtCommand");
+               assertTrue(testBase.isDirectory());
+               assertTrue(testBase.canWrite());
+               File genBase = new File(testBase, "genBase");
+               tempFiles.add(genBase);
+               if (genBase.exists()) {
+                       FileUtil.deleteContents(genBase);
+               } else {
+                       genBase.mkdirs();
+               }
+               assertTrue(genBase.canWrite());
+               File classesDir = new File(testBase, "classes");
+               tempFiles.add(classesDir);
+               assertTrue(classesDir.mkdirs());
+               File mainSrc = new File(testBase, "Main-1.java");
+               File main = new File(genBase, "Main.java");
+               FileUtil.copyFile(mainSrc, main);
+               assertTrue(main.canRead());
+               long initialSize = main.length();
+
+               // do initial compile
+               String[] args = new String[] { "-d", classesDir.getPath(), "-classpath", "../lib/test/aspectjrt.jar", main.getPath() };
+               AjdtCommand command = new AjdtCommand();
+               IMessageHolder holder = new MessageHandler();
+               boolean result = command.runCommand(args, holder);
+               assertTrue(result);
+               assertTrue(!holder.hasAnyMessage(IMessage.WARNING, true));
+               int initialMessages = holder.numMessages(null, true);
+
+               // do repeat compile, introducing an error
+               mainSrc = new File(testBase, "Main-2.java");
+               FileUtil.copyFile(mainSrc, main);
+               assertTrue(main.canRead());
+               long nextSize = main.length();
+               assertTrue(nextSize > initialSize);
+               IMessageHolder newHolder = new MessageHandler();
+               result = command.repeatCommand(newHolder);
+
+               // verify failed, no effect on first holder, error in second
+               assertFalse(result);
+               assertEquals(1, newHolder.numMessages(IMessage.ERROR, false));
+               assertEquals(initialMessages, holder.numMessages(null, true));
        }
-       
-    private static boolean delete(File file) {
-        if ((null == file) || !file.exists()) {
-            return true;
-        } else if (!file.canWrite()) {
-            return false;
-        }
-        if (file.isDirectory()) {
-            FileUtil.deleteContents(file);
-        }
-        return file.delete();
-    }
-    
-    public void testIncrementalHandler() throws IOException {
-        // verify that AjdtCommand respects handler parm 
-        // in runCommand and repeatCommand
-        final String sig = getClass().getName() 
-            + ".testIncrementalHandler";
-        boolean runTest = false;
-        try {
-            runTest = null != System.getProperty(sig);
-        } catch (Throwable t) {
-        }
-        if (!runTest) {
-            System.out.println("warning: to run " + sig
-                + "(), set system property " + sig);
-            return;
-        }
-        // setup initial compile
-        File testBase = new File("testdata/ajdtCommand");
-        assertTrue(testBase.isDirectory());
-        assertTrue(testBase.canWrite());
-        File genBase = new File(testBase, "genBase");
-        tempFiles.add(genBase);
-        if (genBase.exists()) {
-            FileUtil.deleteContents(genBase);
-        } else {
-            genBase.mkdirs();
-        }
-        assertTrue(genBase.canWrite());
-        File classesDir = new File(testBase, "classes");
-        tempFiles.add(classesDir);
-        assertTrue(classesDir.mkdirs());
-        File mainSrc= new File(testBase, "Main-1.java");
-        File main = new File(genBase, "Main.java");
-        FileUtil.copyFile(mainSrc, main);
-        assertTrue(main.canRead());
-        long initialSize = main.length();
-        
-        // do initial compile
-        String[] args = new String[] {
-            "-d",
-            classesDir.getPath(),
-            "-classpath",
-            "../lib/test/aspectjrt.jar",
-            main.getPath()
-        };
-        AjdtCommand command = new AjdtCommand();
-        IMessageHolder holder = new MessageHandler();
-        boolean result = command.runCommand(args, holder);
-        assertTrue(result);
-        assertTrue(!holder.hasAnyMessage(IMessage.WARNING, true));
-        int initialMessages = holder.numMessages(null, true);
-
-        // do repeat compile, introducing an error
-        mainSrc= new File(testBase, "Main-2.java");
-        FileUtil.copyFile(mainSrc, main);
-        assertTrue(main.canRead());
-        long nextSize = main.length();
-        assertTrue(nextSize > initialSize);
-        IMessageHolder newHolder = new MessageHandler();
-        result = command.repeatCommand(newHolder);
-
-        // verify failed, no effect on first holder, error in second
-        assertFalse(result);
-        assertEquals(1, newHolder.numMessages(IMessage.ERROR, false));
-        assertEquals(initialMessages, holder.numMessages(null, true));
-    }
 
        public void testIncrementalOption() throws InvalidInputException {
-               AjdtCommand.genBuildConfig(
-            new String[] {  "-incremental" }, 
-            counter);
-               
-               assertTrue(
-                       "didn't specify source root",
-                       outputWriter.getContents().indexOf("specify a source root") != -1);     
-               
-               outputWriter.flushBuffer();             
-               AjdtCommand.genBuildConfig(
-                       new String[] { "-incremental", "-sourceroots", 
-                    AjdtAjcTests.TESTDATA_PATH + "/src1" }, 
-                       counter);
-       
-               assertTrue(
-                       outputWriter.getContents(),
-                       outputWriter.getContents().equals(""));                 
-
-               outputWriter.flushBuffer();             
-               AjdtCommand.genBuildConfig(
-                       new String[] { "-incremental", "testdata/src1/Hello.java" }, 
-                       counter);
-               
-               assertTrue(
-                       "specified a file",
-                       outputWriter.getContents().indexOf("incremental mode only handles source files using -sourceroots") != -1);     ;
+               AjdtCommand.genBuildConfig(new String[] { "-incremental" }, counter);
+
+               assertTrue("didn't specify source root", outputWriter.getContents().indexOf("specify a source root") != -1);
+
+               outputWriter.flushBuffer();
+               AjdtCommand.genBuildConfig(new String[] { "-incremental", "-sourceroots", AjdtAjcTests.TESTDATA_PATH + "/src1" }, counter);
+
+               assertTrue(outputWriter.getContents(), outputWriter.getContents().equals(""));
+
+               outputWriter.flushBuffer();
+               AjdtCommand.genBuildConfig(new String[] { "-incremental", "testdata/src1/Hello.java" }, counter);
+
+               assertTrue("specified a file", outputWriter.getContents().indexOf(
+                               "incremental mode only handles source files using -sourceroots") != -1);
        }
-       
+
        public void testBadOptionAndUsagePrinting() throws InvalidInputException {
                try {
-                       AjdtCommand.genBuildConfig(
-                new String[] { "-mubleBadOption" }, 
-                counter);              
-               } catch (AbortException ae) { }
+                       AjdtCommand.genBuildConfig(new String[] { "-mubleBadOption" }, counter);
+               } catch (AbortException ae) {
+               }
                // usage printed by caller to genBuildConfig now...
-               assertTrue(
-                       outputWriter.getContents() + " contains? " + "Usage",
-                       outputWriter.getContents().indexOf("-mubleBadOption") != -1);           
-               
+               assertTrue(outputWriter.getContents() + " contains? " + "Usage",
+                               outputWriter.getContents().indexOf("-mubleBadOption") != -1);
+
        }
-       
+
        public void testHelpUsagePrinting() {
                String[] args = new String[] { "-help" };
-               
+
                PrintStream saveOut = System.out;
                ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
                PrintStream newOut = new PrintStream(byteArrayOut);
                System.setOut(newOut);
-               
+
                try {
                        try {
-                               
-                               AjdtCommand.genBuildConfig(
-                       args, 
-                       counter);
-                       } catch (AbortException  ae) { }
+
+                               AjdtCommand.genBuildConfig(args, counter);
+                       } catch (AbortException ae) {
+                       }
                } finally {
                        System.setOut(saveOut);
                }
-               
+
                String text = byteArrayOut.toString();
-               assertTrue(
-                       text + " contains? " + "Usage",
-                       text.indexOf("Usage") != -1);                   
+               assertTrue(text + " contains? " + "Usage", text.indexOf("Usage") != -1);
        }
-       
-       public void  q() throws InvalidInputException {
+
+       public void q() throws InvalidInputException {
                String[] args = new String[] { "-version" };
-               
+
                PrintStream saveOut = System.out;
                PrintStream saveErr = System.err;
                ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
@@ -196,48 +180,42 @@ public class AjdtCommandTestCase extends TestCase {
                PrintStream newErr = new PrintStream(byteArrayErr);
                System.setOut(newOut);
                System.setErr(newErr);
-               
+
                try {
                        try {
-                               
-                               AjdtCommand.genBuildConfig(
-                                       args, 
-                                       counter);
-                       } catch (AbortException  ae) { }
+
+                               AjdtCommand.genBuildConfig(args, counter);
+                       } catch (AbortException ae) {
+                       }
                } finally {
                        System.setOut(saveOut);
                        System.setErr(saveErr);
                }
-               
+
                String text = byteArrayOut.toString();
                String text2 = byteArrayErr.toString();
-               assertTrue(
-                       "version output does not include 'AspectJ Compiler', output was:\n'"+text+"'",
-                       text.indexOf("AspectJ Compiler") != -1);                
+               assertTrue("version output does not include 'AspectJ Compiler', output was:\n'" + text + "'", text
+                               .indexOf("AspectJ Compiler") != -1);
        }
-       
+
        public void testNonExistingLstFile() {
-               AjdtCommand.genBuildConfig(
-            new String[] { "@mumbleDoesNotExist" }, 
-            counter);
-               
-               assertTrue(
-                       outputWriter.getContents(),
-                       outputWriter.getContents().indexOf("file does not exist") != -1);                       
+               AjdtCommand.genBuildConfig(new String[] { "@mumbleDoesNotExist" }, counter);
+
+               assertTrue(outputWriter.getContents(), outputWriter.getContents().indexOf("file does not exist") != -1);
        }
-       
+
        protected void setUp() throws Exception {
                super.setUp();
        }
-       
+
        protected void tearDown() throws Exception {
                super.tearDown();
                outputWriter.flushBuffer();
-        for (ListIterator iter = tempFiles.listIterator(); iter.hasNext();) {
-            File file = (File) iter.next();
-            if (delete(file)) {
-                iter.remove();
-            }
-        }
+               for (ListIterator iter = tempFiles.listIterator(); iter.hasNext();) {
+                       File file = (File) iter.next();
+                       if (delete(file)) {
+                               iter.remove();
+                       }
+               }
        }
 }
index f2c198a779a16fcd764140f1914478f8c881fc4c..9851cda087da9c970d88b8aadb083c5527f66400 100644 (file)
@@ -24,78 +24,75 @@ public class CompilerDumpTestCase extends AjcTestCase {
        private File baseDir;
        private File dumpFile;
        private IMessage.Kind savedDumpCondition;
-       
+
        protected void setUp() throws Exception {
                super.setUp();
 
-               baseDir = new File("../org.aspectj.ajdt.core/testdata",PROJECT_DIR);
+               baseDir = new File("../org.aspectj.ajdt.core/testdata", PROJECT_DIR);
                dumpFile = null;
                savedDumpCondition = Dump.getDumpOnExit();
        }
 
        protected void tearDown() throws Exception {
                super.tearDown();
-               
+
                if (dumpFile != null && dumpFile.exists()) {
                        boolean deleted = dumpFile.delete();
-                       assertTrue("Dump file '" + dumpFile.getPath() + "' could not be deleted",deleted);
-               } 
+                       assertTrue("Dump file '" + dumpFile.getPath() + "' could not be deleted", deleted);
+               }
                Dump.setDumpOnExit(savedDumpCondition);
        }
 
        /**
-        * Aim: Dump after successful compile to ensure it contains the command 
-        * line information.
+        * Aim: Dump after successful compile to ensure it contains the command line information.
         * 
-        * Inputs to the compiler:
-        *   HelloWorld.java Pointcuts.aj Aspect.aj
+        * Inputs to the compiler: HelloWorld.java Pointcuts.aj Aspect.aj
         * 
         * Expected result = Compile succeeds.
         */
-       public void testDump () {
+       public void testDump() {
                String[] args = new String[] { "src/HelloWorld.java", "src/Pointcuts.aj", "src/Aspect.aj" };
-               CompilationResult result = ajc(baseDir,args);
+               CompilationResult result = ajc(baseDir, args);
                assertNoMessages(result);
                String fileName = Dump.dump("DumpTestCase.testDump()");
                dumpFile = new File(fileName);
-               org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Command Line","HelloWorld.java");
+               org.aspectj.weaver.DumpTestCase.assertContents(dumpFile, "Command Line", "HelloWorld.java");
        }
-       
+
        /**
-        * Aim: Dump after successful compile to ensure it contains warning 
-        * messages. 
+        * Aim: Dump after successful compile to ensure it contains warning messages.
         * 
-        * Inputs to the compiler:
-        *   HelloWorld.java Pointcuts.aj Aspect.aj DeclareWarning.aj
+        * Inputs to the compiler: HelloWorld.java Pointcuts.aj Aspect.aj DeclareWarning.aj
         * 
         * Expected result = Compile succeeds.
         */
-       public void testDumpWithWarnings () {
+       public void testDumpWithWarnings() {
                String[] args = new String[] { "src/HelloWorld.java", "src/Pointcuts.aj", "src/DeclareWarning.aj" };
                Dump.preserveOnNextReset();
-               CompilationResult result = ajc(baseDir,args);
+               // CompilationResult result =
+               ajc(baseDir, args);
                String fileName = Dump.dump("DumpTestCase.testDumpWithWarnings()");
                dumpFile = new File(fileName);
-               org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Compiler Messages","warning");
+               org.aspectj.weaver.DumpTestCase.assertContents(dumpFile, "Compiler Messages", "warning");
        }
-       
+
        /**
-        * Aim: Dump due to errors. 
+        * Aim: Dump due to errors.
         * 
-        * Inputs to the compiler:
-        *   HelloWorld.java Pointcuts.aj Aspect.aj DeclareError.aj
+        * Inputs to the compiler: HelloWorld.java Pointcuts.aj Aspect.aj DeclareError.aj
         * 
         * Expected result = Compile fails and dump file created.
         */
-       public void testWithErrors () {
+       public void testWithErrors() {
                Dump.setDumpOnExit(IMessage.ERROR);
                String previousFileName = Dump.getLastDumpFileName();
                String[] args = new String[] { "src/HelloWorld.java", "src/Pointcuts.aj", "src/DeclareError.aj" };
-               CompilationResult result = ajc(baseDir,args);
+               // CompilationResult result =
+               ajc(baseDir, args);
                String fileName = Dump.getLastDumpFileName();
-               assertTrue("Dump file should be created",!fileName.equals(previousFileName));
+               assertTrue("Dump file should be created", !fileName.equals(previousFileName));
                dumpFile = new File(fileName);
-               org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Compiler Messages","error");
+               org.aspectj.weaver.DumpTestCase.assertContents(dumpFile, "Compiler Messages", "error");
        }
 
 }
index 9d3464e38e111a050d73849f33e6d47c533fa007..a1d323dbd65a0202739eda0680da132b3af777fb 100644 (file)
@@ -24,471 +24,425 @@ import org.aspectj.bridge.IMessage;
 import org.aspectj.tools.ajc.AjcTestCase;
 import org.aspectj.tools.ajc.CompilationResult;
 
-
-
 /**
- * These tests verify the behavior of the binary implementation of declare parents.
- * Basically we attempt a source compile with all the classes/aspects - we get some
- * set of errors/warnings and weaving messages out from doing this.  We then compile the
- * source files and aspects separately and binary weave them together - we should
- * get the same set of weaving information messages.  Where possible we also execute one of the
- * classes after the binary weave to check it passes the verifier and executes.
+ * These tests verify the behavior of the binary implementation of declare parents. Basically we attempt a source compile with all
+ * the classes/aspects - we get some set of errors/warnings and weaving messages out from doing this. We then compile the source
+ * files and aspects separately and binary weave them together - we should get the same set of weaving information messages. Where
+ * possible we also execute one of the classes after the binary weave to check it passes the verifier and executes.
  * 
- * There are some notes about the implementation throughout these testcases and they
- * are marked: 'IMPORTANT:'
+ * There are some notes about the implementation throughout these testcases and they are marked: 'IMPORTANT:'
  * 
  * 
  * Two things missing:
-
- * In the case where inherited methods can't be overridden to reduce visibility, we should cope
- * with a subclass of the decp target also trying to do it ?  We need a way once we see a type
- * to say 'hey, watch out for this guys kids...' - this will also help us when working with abstract
- * classes that don't provide method implementations where their children might.
-    
+ * 
+ * In the case where inherited methods can't be overridden to reduce visibility, we should cope with a subclass of the decp target
+ * also trying to do it ? We need a way once we see a type to say 'hey, watch out for this guys kids...' - this will also help us
+ * when working with abstract classes that don't provide method implementations where their children might.
+ * 
  * Field inheritance? Is there something to worry about here?
+ * 
  * Covariance on method overrides is supported but untested because we need a Java5 compiler (so we can write easy tests)
  */
 public class DeclareParents extends AjcTestCase {
-    
-    private static final boolean verbose = false;
-
-    public static final String PROJECT_DIR = "binaryParents";
-
-    private File baseDir;
-    
-    
-    /**
-     * Check the order doesn't make a difference. (order1)
-     */
-    public void testVerifyOrderOfProcessingIrrelevant1() {
-        File testBase = new File(baseDir,"TestA");
-        runSourceAndBinaryTestcase(testBase,new String[]{"Z.java","B.java"},
-                                            new String[]{"AspectAB.aj"},false);
-//        runClass("B");
-    }
-  
-    
-    /**
-     * Check the order doesn't make a difference. (order2)
-     */
-    public void testVerifyOrderOfProcessingIrrelevant2() {
-        File testBase = new File(baseDir,"TestA");
-        runSourceAndBinaryTestcase(testBase,new String[]{"B.java","Z.java"},
-                                            new String[]{"AspectAB.aj"},false);
-//        runClass("B");
-    }
-    
-    
-    /**
-     * Three classes: 
-     *   Top1, Middle1, Bottom1.  Bottom1 extends Top1. Middle1 extends Top1.
-     *   AspectX1: declares Bottom1 extends Middle1
-     * Result: 
-     *   Should be OK, fits into the hierarchy no problem.
-     */
-    public void testSimpleDeclareParents() {
-      File testBase = new File(baseDir,"TestA");
-      runSourceAndBinaryTestcase(testBase,new String[]{"Top1.java","Middle1.java","Bottom1.java"},
-                                          new String[]{"AspectX1.java"},false);
-//      runClass("Bottom1");
-    }
-    
-    
-    /**
-     * Three classes: 
-     *   Top2, Middle2, Bottom2.  Bottom2 extends Top2. Middle2 extends Top2.
-     *   Bottom2 includes a call to super in a ctor.
-     *   AspectX2: declares Bottom2 extends Middle2
-     * Result: 
-     *   Should be OK, fits into the hierarchy no problem.
-     * Implementation: 
-     *   The super call should be modified from a Top2.<init> call to a Middle2.<init> call
-     */
-    public void test_SuperCtorCall() {
-      File testBase = new File(baseDir,"TestA");
-      runSourceAndBinaryTestcase(testBase,new String[]{"Top2.java","Middle2.java","Bottom2.java"},
-                                          new String[]{"AspectX2.java"},false);
-//      runClass("Bottom2");
-    }
-    
-    
-    /**
-     * Three classes: 
-     *   Top3, Middle3, Bottom3.  Bottom3 extends Top3. Middle3 extends Top3.
-     *   Bottom3 includes a call to a super method in an instance method.
-     *   AspectX3: declares Bottom3 extends Middle3
-     * Result: Should be OK.
-     * Implementation:
-     *   We don't modify the call to Top3.m() that is in the Bottom3 class, we don't have to because
-     *   the JVM will ensure that the m() chosen at runtime is the one nearest the Bottom3 class -
-     *   when the hierarchy has changed this will be the Middle3.m() version and so it all works.
-     * IMPORTANT: 
-     *   This leaves a subtle difference in the code generated from decp application at source time
-     *   and decp application at weave time - in the source time case the call in Bottom3 will have
-     *   been set to Middle3.m() during code gen, whereas in the weave time case it will still
-     *   say Top3.m() - I'm not sure this makes any practical difference though?  We could easily
-     *   fix it and morph the Top3.m() call to a Middle3.m() call but it would impact peformance
-     *   crawling through all the bytecodes to make this change.
-     */
-    public void test_SuperMethodCall() {
-        File testBase = new File(baseDir,"TestA");
-        runSourceAndBinaryTestcase(testBase,new String[]{"Top3.java","Middle3.java","Bottom3.java"},
-                                            new String[]{"AspectX3.java"},false);
-//        runClass("Bottom3");
-    }
-    
-    
-    /**
-     * Three classes: 
-     *   Top4, Middle4, Bottom4.  Bottom4 extends Top4. Middle4 extends Top4.
-     *   AspectX4: declares Bottom4 extends Middle4
-     * Result: Should fail - because Middle4 doesn't include a ctor that takes a String, which is called by Bottom4
-     */
-    public void test_missingCtorInIntroducedClass() {
-      File testBase = new File(baseDir,"TestA");
-      runSourceAndBinaryTestcase(testBase,new String[]{"Top4.java","Middle4.java","Bottom4.java"},
-                                          new String[]{"AspectX4.java"},true,false);
-    }
-    
-    
-    /**
-     * If overriding an instance method, can't make it static.
-     * If overriding a static method, can't make it an instance method.
-     * 
-     * Note: Error messages and locations for binary weaving are much better than their source counterparts !
-     */
-    public void test_cantMakeInheritedInstanceMethodsStatic() {
-        File testBase = new File(baseDir,"TestC");
-        CompilationResult result = null;
-        runSourceAndBinaryTestcase(new File(baseDir,"TestC"),
-                new String[]{"A1.java","B1.java"},
-                new String[]{"X1.java"},true,false);
-    }
-    
-    /**
-     * Cannot extend a final class
-     */
-    public void xxxtest_cantExtendFinalClass() {    // XXX removed test, need to discuss with andy how to repair...
-         File testBase = new File(baseDir,"TestC");
-         CompilationResult result = null;
-         runSourceAndBinaryTestcase(new File(baseDir,"TestC"),
-                 new String[]{"A2.java","B2.java"},
-                 new String[]{"X2.java"},true,true);  
-    }
-    
-    /**
-     * The Object class cannot be subject to declare parents extends
-     * 
-     * This is tested when the aspect is compiled - so couldn't occur during binary weaving of decp.
-     */
-    
-    
-    /**
-     * if you inherit methods you cannot override them and reduce their visibility
-     */
-    public void test_cantReduceVisibilityOfOverriddenMethods_1() {
-        File testBase = new File(baseDir,"TestB");
-        CompilationResult result = null;
-        runSourceAndBinaryTestcase(new File(baseDir,"TestB"),
-                new String[]{"Top1.java","Middle1.java"},
-                new String[]{"Aspect1.java"},true,false);
-    }
-    
-    /**
-     * if you inherit methods you cannot override them and reduce their visibility.
-     * 
-     * test 2 in this set checks methods from a superclass of the named new parent.
-     */
-    public void test_cantReduceVisibilityOfOverriddenMethods_2() {
-        File testBase = new File(baseDir,"TestB");
-        CompilationResult result = null;
-        runSourceAndBinaryTestcase(new File(baseDir,"TestB"),
-                new String[]{"TopTop6.java","Top6.java","Middle6.java"},
-                new String[]{"Aspect6.java"},true,false);
-    }
-    
-    
-    
-    /**
-     * If you inherit methods you cannot have incompatible return types (java1.5 will
-     * make this a little messier).
-     */
-    public void test_overriddenMethodsCantHaveIncompatibleReturnTypes() {
-         File testBase = new File(baseDir,"TestB");
-         CompilationResult result = null;
-         runSourceAndBinaryTestcase(new File(baseDir,"TestB"),
-                 new String[]{"Top2.java","Middle2.java","Super.java","Sub.java"},
-                 new String[]{"Aspect2.java"},true);
-    }
-    
-    
-    /**
-     * Testing: If you inherit abstract methods and you are not abstract you need to provide
-     * an implementation.
-     * 
-     * Test 1 in this set is simple.
-     */
-    public void test_inheritedAbstractMethodsMustBeImplemented_1() {
-        File testBase = new File(baseDir,"TestB");
-        CompilationResult result = null;
-        runSourceAndBinaryTestcase(new File(baseDir,"TestB"),
-                new String[]{"Top3.java","Middle3.java","Super.java","Sub.java"},
-                new String[]{"Aspect3.java"},true);
-    }
-    
-    /**
-     * Testing: If the decp makes you implement an interface, you must provide the implementation 
-     */
-    public void test_interfaceMethodsImplemented() {
-        File testBase = new File(baseDir,"TestD");
-        CompilationResult result = null;
-        runSourceAndBinaryTestcase(testBase,
-                new String[]{"SimpleClass1.java","SimpleIntf1.java"},
-                new String[]{"SimpleAspect1.java"},true);
-    }
-   
-    /**
-     * Testing: If you inherit abstract methods and you are not abstract you need to provide
-     * an implementation.
-     * 
-     * Test 2 in this set includes methods further up the hierarchy that must be
-     * implemented.
-     */
-    public void test_inheritedAbstractMethodsMustBeImplemented_2() {
-        File testBase = new File(baseDir,"TestB");
-        CompilationResult result = null;
-        runSourceAndBinaryTestcase(new File(baseDir,"TestB"),
-                new String[]{"TopTop4.java","Top4.java","Middle4.java"},
-                new String[]{"Aspect4.java"},true);
-    }
-    
-        
-    /**
-     * Testing: If you inherit abstract methods and you are not abstract you need to provide
-     * an implementation.
-     * 
-     * Test 3 in this set includes methods further up the hierarchy that must be
-     * implemented *and* the dependencies are satisfied by ITDs from the aspect
-     */
-    public void test_inheritedAbstractMethodsMustBeImplemented_3() {
-        File testBase = new File(baseDir,"TestD");
-        CompilationResult result = null;
-        runSourceAndBinaryTestcase(new File(baseDir,"TestD"),
-                new String[]{"SimpleClass2.java"},
-                new String[]{"SimpleAspect2.java"},true);
-  }
-    
-    /**
-     * If adding a type into a hierarchy, any missing ctor could be added via an ITDC so allow for
-     * that !
-     */
-    public void test_missingCtorAddedViaITD() {
-        File testBase = new File(baseDir,"TestE");
-        CompilationResult result = null;
-        runSourceAndBinaryTestcase(testBase,
-                new String[]{"A.java","B.java","C.java"},
-                new String[]{"X.java"},true);
-    }
-    
-    //////////////////////////////////////////////////////////////////////////////////////////
-    //////////////////////////////////////////////////////////////////////////////////////////
-    //////////////////////////////////////////////////////////////////////////////////////////
-    
-    public void runSourceAndBinaryTestcase(File testBase,String[] classes,String[] aspects,boolean expectErrors) {
-     runSourceAndBinaryTestcase(testBase,classes,aspects,expectErrors,true);   
-    }
-    
-    public void runSourceAndBinaryTestcase(File testBase,String[] classes,String[] aspects,boolean expectErrors,boolean compareErrors) {
-        // Do a compile of everything together from source ...
-        CompilationResult result = null;
-        
-        // Execute: "ajc <classes> <aspects> -showWeaveInfo"
-        String[] sourceCompileCommandLine = new String[classes.length+aspects.length+1];
-        System.arraycopy(classes,0,sourceCompileCommandLine,0,classes.length);
-        System.arraycopy(aspects,0,sourceCompileCommandLine,classes.length,aspects.length);
-        String[] extraOption = new String[]{"-showWeaveInfo"};
-        System.arraycopy(extraOption,0,sourceCompileCommandLine,classes.length+aspects.length,1);
-        result = ajc(testBase,sourceCompileCommandLine);
-        if (!expectErrors) assertTrue("errors? \n"+result.getErrorMessages(),!result.hasErrorMessages());
-        List sourceWeaveMessages      = getWeaveMessages(result);
-        int  sourceWeaveMessagesCount = sourceWeaveMessages.size();
-        List sourceErrorMessages      = result.getErrorMessages();
-        int  sourceErrorMessagesCount = sourceErrorMessages.size();
-
-        if (verbose) {
-          System.err.println("Source Compilation: Error count = "+sourceErrorMessagesCount+"\n"+sourceErrorMessages);
-          System.err.println("Source Compilation: Weaving count = "+sourceWeaveMessagesCount+"\n"+sourceWeaveMessages);
-        }
-        
-        // Do separate compiles of the classes then the aspects then do a binary weave
-        
-        // Execute: "ajc <classes> -g -d classes"
-        result = ajc(testBase,mergeOptions(classes,new String[]{"-g","-d","classes"}));
-        setShouldEmptySandbox(false);
-        // Execute: "ajc <aspects> -g -outjar aspects.jar -classpath classes -proceedOnError"
-        result = ajc(testBase,mergeOptions(aspects,new String[]{"-g","-outjar","aspects.jar","-classpath","classes","-proceedOnError"}));
-        if (result.getErrorMessages().size()!=0) System.err.println("Expecting no errors from jar building but got\n"+result.getErrorMessages());
-        assertTrue("Should get no errors for this compile, but got: "+result.getErrorMessages().size(),result.getErrorMessages().size()==0);
-        // Execute: "ajc -inpath classes -showWeaveInfo -d classes2 -aspectpath aspects.jar"
-        result = ajc(testBase,new String[]{"-inpath","classes","-showWeaveInfo","-d","classes2","-aspectpath","aspects.jar"});
-
-        if (!expectErrors) assertTrue("unexpected errors? \n"+result.getErrorMessages(),!result.hasErrorMessages());
-        
-        List binaryWeaveMessages      = getWeaveMessages(result);
-        int  binaryWeaveMessagesCount = binaryWeaveMessages.size();
-        List binaryErrorMessages      = result.getErrorMessages();
-        int  binaryErrorMessagesCount = binaryErrorMessages.size();
-        
-        if (verbose) {
-            System.err.println("Binary Compilation: Error count = "+binaryErrorMessagesCount+"\n"+binaryErrorMessages);
-            System.err.println("Binary Compilation: Weaving count = "+binaryWeaveMessagesCount+"\n"+binaryWeaveMessages);
-            System.err.println("StandardError from final binary compile stage: "+result.getStandardError());
-        }
-        
-        assertTrue("Should have same number of errors in either case: "+sourceErrorMessagesCount+"!="+binaryErrorMessagesCount,
-                sourceErrorMessagesCount==binaryErrorMessagesCount);
-        
-        /////////////////////////////////////////////////////////////////////////////
-        // Check the error messages are comparable (allow for differing orderings)
-        if (compareErrors) {
-          for (Iterator iter = binaryErrorMessages.iterator(); iter.hasNext();) {
-                       IMessage binaryMessage = (IMessage) iter.next();
-            IMessage correctSourceMessage = null;
-                       for (Iterator iterator = sourceErrorMessages.iterator(); iterator.hasNext() && correctSourceMessage==null;) {
-                               IMessage sourceMessage = (IMessage) iterator.next();
-
-                               if (sourceMessage.getMessage().equals(binaryMessage.getMessage())) {
-                    correctSourceMessage = sourceMessage;
-                }
+
+       private static final boolean verbose = false;
+
+       public static final String PROJECT_DIR = "binaryParents";
+
+       private File baseDir;
+
+       /**
+        * Check the order doesn't make a difference. (order1)
+        */
+       public void testVerifyOrderOfProcessingIrrelevant1() {
+               File testBase = new File(baseDir, "TestA");
+               runSourceAndBinaryTestcase(testBase, new String[] { "Z.java", "B.java" }, new String[] { "AspectAB.aj" }, false);
+               // runClass("B");
+       }
+
+       /**
+        * Check the order doesn't make a difference. (order2)
+        */
+       public void testVerifyOrderOfProcessingIrrelevant2() {
+               File testBase = new File(baseDir, "TestA");
+               runSourceAndBinaryTestcase(testBase, new String[] { "B.java", "Z.java" }, new String[] { "AspectAB.aj" }, false);
+               // runClass("B");
+       }
+
+       /**
+        * Three classes: Top1, Middle1, Bottom1. Bottom1 extends Top1. Middle1 extends Top1. AspectX1: declares Bottom1 extends Middle1
+        * Result: Should be OK, fits into the hierarchy no problem.
+        */
+       public void testSimpleDeclareParents() {
+               File testBase = new File(baseDir, "TestA");
+               runSourceAndBinaryTestcase(testBase, new String[] { "Top1.java", "Middle1.java", "Bottom1.java" },
+                               new String[] { "AspectX1.java" }, false);
+               // runClass("Bottom1");
+       }
+
+       /**
+        * Three classes: Top2, Middle2, Bottom2. Bottom2 extends Top2. Middle2 extends Top2. Bottom2 includes a call to super in a
+        * ctor. AspectX2: declares Bottom2 extends Middle2 Result: Should be OK, fits into the hierarchy no problem. Implementation:
+        * The super call should be modified from a Top2.<init> call to a Middle2.<init> call
+        */
+       public void test_SuperCtorCall() {
+               File testBase = new File(baseDir, "TestA");
+               runSourceAndBinaryTestcase(testBase, new String[] { "Top2.java", "Middle2.java", "Bottom2.java" },
+                               new String[] { "AspectX2.java" }, false);
+               // runClass("Bottom2");
+       }
+
+       /**
+        * Three classes: Top3, Middle3, Bottom3. Bottom3 extends Top3. Middle3 extends Top3. Bottom3 includes a call to a super method
+        * in an instance method. AspectX3: declares Bottom3 extends Middle3 Result: Should be OK. Implementation: We don't modify the
+        * call to Top3.m() that is in the Bottom3 class, we don't have to because the JVM will ensure that the m() chosen at runtime is
+        * the one nearest the Bottom3 class - when the hierarchy has changed this will be the Middle3.m() version and so it all works.
+        * IMPORTANT: This leaves a subtle difference in the code generated from decp application at source time and decp application at
+        * weave time - in the source time case the call in Bottom3 will have been set to Middle3.m() during code gen, whereas in the
+        * weave time case it will still say Top3.m() - I'm not sure this makes any practical difference though? We could easily fix it
+        * and morph the Top3.m() call to a Middle3.m() call but it would impact peformance crawling through all the bytecodes to make
+        * this change.
+        */
+       public void test_SuperMethodCall() {
+               File testBase = new File(baseDir, "TestA");
+               runSourceAndBinaryTestcase(testBase, new String[] { "Top3.java", "Middle3.java", "Bottom3.java" },
+                               new String[] { "AspectX3.java" }, false);
+               // runClass("Bottom3");
+       }
+
+       /**
+        * Three classes: Top4, Middle4, Bottom4. Bottom4 extends Top4. Middle4 extends Top4. AspectX4: declares Bottom4 extends Middle4
+        * Result: Should fail - because Middle4 doesn't include a ctor that takes a String, which is called by Bottom4
+        */
+       public void test_missingCtorInIntroducedClass() {
+               File testBase = new File(baseDir, "TestA");
+               runSourceAndBinaryTestcase(testBase, new String[] { "Top4.java", "Middle4.java", "Bottom4.java" },
+                               new String[] { "AspectX4.java" }, true, false);
+       }
+
+       /**
+        * If overriding an instance method, can't make it static. If overriding a static method, can't make it an instance method.
+        * 
+        * Note: Error messages and locations for binary weaving are much better than their source counterparts !
+        */
+       public void test_cantMakeInheritedInstanceMethodsStatic() {
+               File testBase = new File(baseDir, "TestC");
+               runSourceAndBinaryTestcase(new File(baseDir, "TestC"), new String[] { "A1.java", "B1.java" }, new String[] { "X1.java" },
+                               true, false);
+       }
+
+       /**
+        * Cannot extend a final class
+        */
+       public void xxxtest_cantExtendFinalClass() { // XXX removed test, need to discuss with andy how to repair...
+               File testBase = new File(baseDir, "TestC");
+               runSourceAndBinaryTestcase(new File(baseDir, "TestC"), new String[] { "A2.java", "B2.java" }, new String[] { "X2.java" },
+                               true, true);
+       }
+
+       /**
+        * The Object class cannot be subject to declare parents extends
+        * 
+        * This is tested when the aspect is compiled - so couldn't occur during binary weaving of decp.
+        */
+
+       /**
+        * if you inherit methods you cannot override them and reduce their visibility
+        */
+       public void test_cantReduceVisibilityOfOverriddenMethods_1() {
+               File testBase = new File(baseDir, "TestB");
+               runSourceAndBinaryTestcase(new File(baseDir, "TestB"), new String[] { "Top1.java", "Middle1.java" },
+                               new String[] { "Aspect1.java" }, true, false);
+       }
+
+       /**
+        * if you inherit methods you cannot override them and reduce their visibility.
+        * 
+        * test 2 in this set checks methods from a superclass of the named new parent.
+        */
+       public void test_cantReduceVisibilityOfOverriddenMethods_2() {
+               File testBase = new File(baseDir, "TestB");
+               runSourceAndBinaryTestcase(new File(baseDir, "TestB"), new String[] { "TopTop6.java", "Top6.java", "Middle6.java" },
+                               new String[] { "Aspect6.java" }, true, false);
+       }
+
+       /**
+        * If you inherit methods you cannot have incompatible return types (java1.5 will make this a little messier).
+        */
+       public void test_overriddenMethodsCantHaveIncompatibleReturnTypes() {
+               File testBase = new File(baseDir, "TestB");
+               CompilationResult result = null;
+               runSourceAndBinaryTestcase(new File(baseDir, "TestB"),
+                               new String[] { "Top2.java", "Middle2.java", "Super.java", "Sub.java" }, new String[] { "Aspect2.java" }, true);
+       }
+
+       /**
+        * Testing: If you inherit abstract methods and you are not abstract you need to provide an implementation.
+        * 
+        * Test 1 in this set is simple.
+        */
+       public void test_inheritedAbstractMethodsMustBeImplemented_1() {
+               File testBase = new File(baseDir, "TestB");
+               CompilationResult result = null;
+               runSourceAndBinaryTestcase(new File(baseDir, "TestB"),
+                               new String[] { "Top3.java", "Middle3.java", "Super.java", "Sub.java" }, new String[] { "Aspect3.java" }, true);
+       }
+
+       /**
+        * Testing: If the decp makes you implement an interface, you must provide the implementation
+        */
+       public void test_interfaceMethodsImplemented() {
+               File testBase = new File(baseDir, "TestD");
+               CompilationResult result = null;
+               runSourceAndBinaryTestcase(testBase, new String[] { "SimpleClass1.java", "SimpleIntf1.java" },
+                               new String[] { "SimpleAspect1.java" }, true);
+       }
+
+       /**
+        * Testing: If you inherit abstract methods and you are not abstract you need to provide an implementation.
+        * 
+        * Test 2 in this set includes methods further up the hierarchy that must be implemented.
+        */
+       public void test_inheritedAbstractMethodsMustBeImplemented_2() {
+               File testBase = new File(baseDir, "TestB");
+               CompilationResult result = null;
+               runSourceAndBinaryTestcase(new File(baseDir, "TestB"), new String[] { "TopTop4.java", "Top4.java", "Middle4.java" },
+                               new String[] { "Aspect4.java" }, true);
+       }
+
+       /**
+        * Testing: If you inherit abstract methods and you are not abstract you need to provide an implementation.
+        * 
+        * Test 3 in this set includes methods further up the hierarchy that must be implemented *and* the dependencies are satisfied by
+        * ITDs from the aspect
+        */
+       public void test_inheritedAbstractMethodsMustBeImplemented_3() {
+               File testBase = new File(baseDir, "TestD");
+               CompilationResult result = null;
+               runSourceAndBinaryTestcase(new File(baseDir, "TestD"), new String[] { "SimpleClass2.java" },
+                               new String[] { "SimpleAspect2.java" }, true);
+       }
+
+       /**
+        * If adding a type into a hierarchy, any missing ctor could be added via an ITDC so allow for that !
+        */
+       public void test_missingCtorAddedViaITD() {
+               File testBase = new File(baseDir, "TestE");
+               CompilationResult result = null;
+               runSourceAndBinaryTestcase(testBase, new String[] { "A.java", "B.java", "C.java" }, new String[] { "X.java" }, true);
+       }
+
+       // ////////////////////////////////////////////////////////////////////////////////////////
+       // ////////////////////////////////////////////////////////////////////////////////////////
+       // ////////////////////////////////////////////////////////////////////////////////////////
+
+       public void runSourceAndBinaryTestcase(File testBase, String[] classes, String[] aspects, boolean expectErrors) {
+               runSourceAndBinaryTestcase(testBase, classes, aspects, expectErrors, true);
+       }
+
+       public void runSourceAndBinaryTestcase(File testBase, String[] classes, String[] aspects, boolean expectErrors,
+                       boolean compareErrors) {
+               // Do a compile of everything together from source ...
+               CompilationResult result = null;
+
+               // Execute: "ajc <classes> <aspects> -showWeaveInfo"
+               String[] sourceCompileCommandLine = new String[classes.length + aspects.length + 1];
+               System.arraycopy(classes, 0, sourceCompileCommandLine, 0, classes.length);
+               System.arraycopy(aspects, 0, sourceCompileCommandLine, classes.length, aspects.length);
+               String[] extraOption = new String[] { "-showWeaveInfo" };
+               System.arraycopy(extraOption, 0, sourceCompileCommandLine, classes.length + aspects.length, 1);
+               result = ajc(testBase, sourceCompileCommandLine);
+               if (!expectErrors)
+                       assertTrue("errors? \n" + result.getErrorMessages(), !result.hasErrorMessages());
+               List sourceWeaveMessages = getWeaveMessages(result);
+               int sourceWeaveMessagesCount = sourceWeaveMessages.size();
+               List sourceErrorMessages = result.getErrorMessages();
+               int sourceErrorMessagesCount = sourceErrorMessages.size();
+
+               if (verbose) {
+                       System.err.println("Source Compilation: Error count = " + sourceErrorMessagesCount + "\n" + sourceErrorMessages);
+                       System.err.println("Source Compilation: Weaving count = " + sourceWeaveMessagesCount + "\n" + sourceWeaveMessages);
+               }
+
+               // Do separate compiles of the classes then the aspects then do a binary weave
+
+               // Execute: "ajc <classes> -g -d classes"
+               result = ajc(testBase, mergeOptions(classes, new String[] { "-g", "-d", "classes" }));
+               setShouldEmptySandbox(false);
+               // Execute: "ajc <aspects> -g -outjar aspects.jar -classpath classes -proceedOnError"
+               result = ajc(testBase, mergeOptions(aspects, new String[] { "-g", "-outjar", "aspects.jar", "-classpath", "classes",
+                               "-proceedOnError" }));
+               if (result.getErrorMessages().size() != 0)
+                       System.err.println("Expecting no errors from jar building but got\n" + result.getErrorMessages());
+               assertTrue("Should get no errors for this compile, but got: " + result.getErrorMessages().size(), result.getErrorMessages()
+                               .size() == 0);
+               // Execute: "ajc -inpath classes -showWeaveInfo -d classes2 -aspectpath aspects.jar"
+               result = ajc(testBase, new String[] { "-inpath", "classes", "-showWeaveInfo", "-d", "classes2", "-aspectpath",
+                               "aspects.jar" });
+
+               if (!expectErrors)
+                       assertTrue("unexpected errors? \n" + result.getErrorMessages(), !result.hasErrorMessages());
+
+               List binaryWeaveMessages = getWeaveMessages(result);
+               int binaryWeaveMessagesCount = binaryWeaveMessages.size();
+               List binaryErrorMessages = result.getErrorMessages();
+               int binaryErrorMessagesCount = binaryErrorMessages.size();
+
+               if (verbose) {
+                       System.err.println("Binary Compilation: Error count = " + binaryErrorMessagesCount + "\n" + binaryErrorMessages);
+                       System.err.println("Binary Compilation: Weaving count = " + binaryWeaveMessagesCount + "\n" + binaryWeaveMessages);
+                       System.err.println("StandardError from final binary compile stage: " + result.getStandardError());
+               }
+
+               assertTrue("Should have same number of errors in either case: " + sourceErrorMessagesCount + "!="
+                               + binaryErrorMessagesCount, sourceErrorMessagesCount == binaryErrorMessagesCount);
+
+               // ///////////////////////////////////////////////////////////////////////////
+               // Check the error messages are comparable (allow for differing orderings)
+               if (compareErrors) {
+                       for (Iterator iter = binaryErrorMessages.iterator(); iter.hasNext();) {
+                               IMessage binaryMessage = (IMessage) iter.next();
+                               IMessage correctSourceMessage = null;
+                               for (Iterator iterator = sourceErrorMessages.iterator(); iterator.hasNext() && correctSourceMessage == null;) {
+                                       IMessage sourceMessage = (IMessage) iterator.next();
+
+                                       if (sourceMessage.getMessage().equals(binaryMessage.getMessage())) {
+                                               correctSourceMessage = sourceMessage;
+                                       }
+                               }
+                               if (correctSourceMessage == null) {
+                                       fail("This error obtained during binary weaving '" + binaryMessage
+                                                       + "' has no equivalent in the list of messages from source compilation");
+                               }
+                               sourceErrorMessages.remove(correctSourceMessage);
+                       }
+                       if (sourceErrorMessages.size() > 0) {
+                               for (Iterator iter = sourceErrorMessages.iterator(); iter.hasNext();) {
+                                       IMessage srcMsg = (IMessage) iter.next();
+                                       System.err.println("This error message from source compilation '" + srcMsg
+                                                       + "' didn't occur during binary weaving.");
+                               }
+                               fail("Got " + sourceErrorMessages.size() + " extra error messages during source compilation");
+                       }
+               }
+
+               // //////////////////////////////////////////////////////////////////////////
+               // Check the weaving messages are comparable
+               if (sourceWeaveMessagesCount != binaryWeaveMessagesCount) {
+                       fail("Didn't get same number of weave info messages when source weaving and binary weaving: "
+                                       + sourceWeaveMessagesCount + "!=" + binaryWeaveMessagesCount);
+               }
+
+               // Check weaving messages are comparable
+               for (int i = 0; i < sourceWeaveMessages.size(); i++) {
+                       IMessage m1 = (IMessage) sourceWeaveMessages.get(i);
+                       IMessage m2 = (IMessage) binaryWeaveMessages.get(i);
+                       String s1 = m1.getDetails();
+                       String s2 = m2.getDetails();
+
+                       if (!s1.equals(s2)) {
+                               System.err.println("Source Weave Messages: #" + sourceWeaveMessages.size() + "\n" + sourceWeaveMessages);
+                               System.err.println("Binary Weave Messages: #" + binaryWeaveMessages.size() + "\n" + binaryWeaveMessages);
+                               fail("Two weaving messages aren't the same?? sourceMessage=[" + s1 + "] binaryMessage=[" + s2 + "]");
+                       }
+                       if (m1.getSourceLocation() != null || m2.getSourceLocation() != null) {
+                               if (!m1.getSourceLocation().equals(m2.getSourceLocation())) {
+                                       fail("Different source locations for weaving messages? \n" + m1.getSourceLocation() + "\n"
+                                                       + m2.getSourceLocation());
+                               }
+                       }
+               }
+
+               // // Check the result of binary weaving !
+               // ClassPath cp = new ClassPath(ajc.getSandboxDirectory()+File.separator+"classes2"+
+               // File.pathSeparator+System.getProperty("sun.boot.class.path"));
+               // System.err.println(cp);
+               // SyntheticRepository r = SyntheticRepository.getInstance(cp);
+               // Repository.setRepository(r);
+               // for (int i = 0; i < classes.length; i++) {
+               // String name = classes[i].substring(0,classes[i].lastIndexOf("."));
+               // List verificationProblems = verify(name);
+               // assertTrue("Did not expect any verification problems for class: "+name+": \n"+verificationProblems,verificationProblems.
+               // size()==0);
+               // }
+       }
+
+       public String[] mergeOptions(String[] input, String[] extras) {
+               String[] ret = new String[input.length + extras.length];
+               System.arraycopy(input, 0, ret, 0, input.length);
+               System.arraycopy(extras, 0, ret, input.length, extras.length);
+               return ret;
+       }
+
+       private List getWeaveMessages(CompilationResult result) {
+               List infoMessages = result.getInfoMessages();
+               List weaveMessages = new ArrayList();
+               for (Iterator iter = infoMessages.iterator(); iter.hasNext();) {
+                       IMessage element = (IMessage) iter.next();
+                       if (element.getKind() == IMessage.WEAVEINFO)
+                               weaveMessages.add(element);
+               }
+               return weaveMessages;
+       }
+
+       protected void setUp() throws Exception {
+               super.setUp();
+               baseDir = new File("../org.aspectj.ajdt.core/testdata", PROJECT_DIR);
+       }
+
+       private List verify(String name) {
+               List verifyProblems = new ArrayList();
+               System.out.println("Now verifying: " + name + "\n");
+
+               Verifier v = VerifierFactory.getVerifier(name);
+               VerificationResult vr;
+
+               vr = v.doPass1();
+               if (vr != VerificationResult.VR_OK)
+                       verifyProblems.add("Pass1: " + vr.getMessage());
+
+               vr = v.doPass2();
+               if (vr != VerificationResult.VR_OK)
+                       verifyProblems.add("Pass2: " + vr.getMessage());
+
+               if (vr == VerificationResult.VR_OK) {
+                       JavaClass jc = Repository.lookupClass(name);
+                       for (int i = 0; i < jc.getMethods().length; i++) {
+                               vr = v.doPass3a(i);
+                               if (vr != VerificationResult.VR_OK)
+                                       verifyProblems.add("Pass3a: " + jc.getMethods()[i] + " " + vr.getMessage());
+
+                               vr = v.doPass3b(i);
+                               if (vr != VerificationResult.VR_OK)
+                                       verifyProblems.add("Pass3b: " + jc.getMethods()[i] + " " + vr.getMessage());
                        }
-            if (correctSourceMessage == null) {
-              fail("This error obtained during binary weaving '"+binaryMessage+"' has no equivalent in the list of messages from source compilation");   
-            }
-            sourceErrorMessages.remove(correctSourceMessage);
-                 }
-          if (sourceErrorMessages.size()>0) {
-            for (Iterator iter = sourceErrorMessages.iterator(); iter.hasNext();) {
-                         IMessage srcMsg = (IMessage) iter.next();
-                         System.err.println("This error message from source compilation '"+srcMsg+"' didn't occur during binary weaving.");
-                   }   
-            fail("Got "+sourceErrorMessages.size()+" extra error messages during source compilation");
-          }
-        }
-   
-        ////////////////////////////////////////////////////////////////////////////
-        // Check the weaving messages are comparable
-        if (sourceWeaveMessagesCount!=binaryWeaveMessagesCount) {
-            fail("Didn't get same number of weave info messages when source weaving and binary weaving: "+sourceWeaveMessagesCount+"!="+binaryWeaveMessagesCount);   
-        }
-        
-        // Check weaving messages are comparable
-        for (int i=0; i<sourceWeaveMessages.size(); i++) {
-         IMessage m1 = (IMessage)sourceWeaveMessages.get(i);
-         IMessage m2 = (IMessage)binaryWeaveMessages.get(i);
-         String s1 = m1.getDetails();   
-         String s2 = m2.getDetails();  
-
-         if (!s1.equals(s2)) {
-            System.err.println("Source Weave Messages: #"+sourceWeaveMessages.size()+"\n"+sourceWeaveMessages);
-            System.err.println("Binary Weave Messages: #"+binaryWeaveMessages.size()+"\n"+binaryWeaveMessages);
-            fail("Two weaving messages aren't the same?? sourceMessage=["+s1+"] binaryMessage=["+s2+"]");
-         }
-         if (m1.getSourceLocation()!=null || m2.getSourceLocation()!=null) {
-         if (!m1.getSourceLocation().equals(m2.getSourceLocation())) {
-          fail("Different source locations for weaving messages? \n"+m1.getSourceLocation()+"\n"+m2.getSourceLocation()) ; 
-         }
-         }
-        }
-        
-//        // Check the result of binary weaving !
-//        ClassPath cp = new ClassPath(ajc.getSandboxDirectory()+File.separator+"classes2"+
-//                                     File.pathSeparator+System.getProperty("sun.boot.class.path"));
-//        System.err.println(cp);
-//        SyntheticRepository r = SyntheticRepository.getInstance(cp);
-//        Repository.setRepository(r);
-//        for (int i = 0; i < classes.length; i++) {
-//                     String name = classes[i].substring(0,classes[i].lastIndexOf("."));
-//            List verificationProblems = verify(name);
-//            assertTrue("Did not expect any verification problems for class: "+name+": \n"+verificationProblems,verificationProblems.size()==0);
-//             }
-    }
-    
-    public String[] mergeOptions(String[] input,String[] extras) {
-       String[] ret = new String[input.length+extras.length];
-       System.arraycopy(input,0,ret,0,input.length);
-       System.arraycopy(extras,0,ret,input.length,extras.length);
-       return ret;
-    }
-    
-    
-    
-
-    private List getWeaveMessages(CompilationResult result) {
-        List infoMessages = result.getInfoMessages();
-        List weaveMessages = new ArrayList();
-        for (Iterator iter = infoMessages.iterator(); iter.hasNext();) {
-            IMessage element = (IMessage) iter.next();
-            if (element.getKind()== IMessage.WEAVEINFO) weaveMessages.add(element);
-        }
-        return weaveMessages;
-    }
-    
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        baseDir = new File("../org.aspectj.ajdt.core/testdata",PROJECT_DIR);
-    }
-    
-    private List verify(String name) {
-        List verifyProblems = new ArrayList();
-        System.out.println("Now verifying: "+name+"\n");
-
-        Verifier v = VerifierFactory.getVerifier(name);
-        VerificationResult vr;
-
-        vr = v.doPass1();
-        if (vr != VerificationResult.VR_OK) verifyProblems.add("Pass1: "+vr.getMessage());
-
-        vr = v.doPass2();
-        if (vr != VerificationResult.VR_OK) verifyProblems.add("Pass2: "+vr.getMessage());
-
-        if (vr == VerificationResult.VR_OK){
-            JavaClass jc = Repository.lookupClass(name);
-            for (int i=0; i<jc.getMethods().length; i++){
-                vr = v.doPass3a(i);
-                if (vr != VerificationResult.VR_OK) verifyProblems.add("Pass3a: "+jc.getMethods()[i]+" "+vr.getMessage());
-
-                vr = v.doPass3b(i);
-                if (vr != VerificationResult.VR_OK) verifyProblems.add("Pass3b: "+jc.getMethods()[i]+" "+vr.getMessage());
-            }
-        }
-
-        System.out.println("Warnings:");
-        String[] warnings = v.getMessages();
-        if (warnings.length == 0) System.out.println("<none>");
-        for (int j=0; j<warnings.length; j++){
-            System.out.println(warnings[j]);
-        }
-
-        System.out.println("\n");
-
-        // avoid swapping.
-        v.flush();
-        Repository.clearCache();
-        return verifyProblems;
-    }    
-
-    private void runClass(String name) {
-      RunResult rr = null;
-      try {
-        rr = run(name,new String[]{},ajc.getSandboxDirectory()+File.separator+"classes2");
-      }  catch (VerifyError ve) {
-        ve.printStackTrace();
-        fail("Unexpected VerifyError for type upon which we declared parents"); 
-      }
-      //assertTrue("Didn't expect any errors from the run of "+name+", but got: "+rr.toString(),rr.get);
-    }
-    
+               }
+
+               System.out.println("Warnings:");
+               String[] warnings = v.getMessages();
+               if (warnings.length == 0)
+                       System.out.println("<none>");
+               for (int j = 0; j < warnings.length; j++) {
+                       System.out.println(warnings[j]);
+               }
+
+               System.out.println("\n");
+
+               // avoid swapping.
+               v.flush();
+               Repository.clearCache();
+               return verifyProblems;
+       }
+
+       private void runClass(String name) {
+               RunResult rr = null;
+               try {
+                       rr = run(name, new String[] {}, ajc.getSandboxDirectory() + File.separator + "classes2");
+               } catch (VerifyError ve) {
+                       ve.printStackTrace();
+                       fail("Unexpected VerifyError for type upon which we declared parents");
+               }
+               // assertTrue("Didn't expect any errors from the run of "+name+", but got: "+rr.toString(),rr.get);
+       }
+
 }
index 5e353cc3c6fd6e6d3d3b3c7aa111dbdb6ce76a30..70d42bf4a6eea5562df36bd65531c199380a2b46 100644 (file)
@@ -16,59 +16,53 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Date;
 
-import org.aspectj.ajdt.internal.core.builder.AjBuildManager;
-
-
 public class ProceedOnErrorTestCase extends CommandTestCase {
 
        public ProceedOnErrorTestCase(String name) {
                super(name);
        }
 
-       /** 
-        * Compile C1.java that defines C.class then compile C2.java which contains another version of C.class but also
-        * contains errors.  Because -proceedOnError is not supplied, the .class file should not be touched when compiling
-        * C2.java.
+       /**
+        * Compile C1.java that defines C.class then compile C2.java which contains another version of C.class but also contains errors.
+        * Because -proceedOnError is not supplied, the .class file should not be touched when compiling C2.java.
         */
        public void testNoProceedOnError() throws IOException {
-//             try {
-//                     AjBuildManager.continueWhenErrors=false;
-                       checkCompile("src1/C1.java", NO_ERRORS);
-                   File f =new File(getSandboxName(),"C.class");
-                   long oldmodtime = f.lastModified();
-                   pause(2);
-                       checkCompile("src1/C2.java", new int[]{1});
-                   f =new File(getSandboxName(),"C.class");
-                   long newmodtime = f.lastModified();
-               // Without -proceedOnError supplied, we should *not* change the time stamp on the .class file
-                   assertTrue("The .class file should not have been modified as '-proceedOnError' was not supplied (old="+
-                                  new Date(oldmodtime).toString()+")(new="+new Date(newmodtime).toString()+")",
-                                  oldmodtime==newmodtime);
-//             } finally {
-//                     AjBuildManager.continueWhenErrors=true;
-//             }
+               // try {
+               // AjBuildManager.continueWhenErrors=false;
+               checkCompile("src1/C1.java", NO_ERRORS);
+               File f = new File(getSandboxName(), "C.class");
+               long oldmodtime = f.lastModified();
+               pause(2);
+               checkCompile("src1/C2.java", new int[] { 1 });
+               f = new File(getSandboxName(), "C.class");
+               long newmodtime = f.lastModified();
+               // Without -proceedOnError supplied, we should *not* change the time stamp on the .class file
+               assertTrue("The .class file should not have been modified as '-proceedOnError' was not supplied (old="
+                               + new Date(oldmodtime).toString() + ")(new=" + new Date(newmodtime).toString() + ")", oldmodtime == newmodtime);
+               // } finally {
+               // AjBuildManager.continueWhenErrors=true;
+               // }
        }
 
        public void testProceedOnError() throws IOException {
                checkCompile("src1/C1.java", NO_ERRORS);
-           File f =new File(getSandboxName(),"C.class");
-           long oldmodtime = f.lastModified();
-           pause(2);
-           String sandboxName = getSandboxName();
-               checkCompile("src1/C2.java",new String[]{"-proceedOnError"}, new int[]{1}, sandboxName);
-           f =new File(sandboxName,"C.class");
-           long newmodtime = f.lastModified();
-        // Without -proceedOnError supplied, we should *not* change the time stamp on the .class file
-           assertTrue("The .class file should have been modified as '-proceedOnError' *was* supplied (old="+
-                          new Date(oldmodtime).toString()+")(new="+new Date(newmodtime).toString()+")",
-                          newmodtime>oldmodtime);
-       }       
-       
-       
+               File f = new File(getSandboxName(), "C.class");
+               long oldmodtime = f.lastModified();
+               pause(2);
+               String sandboxName = getSandboxName();
+               checkCompile("src1/C2.java", new String[] { "-proceedOnError" }, new int[] { 1 }, sandboxName);
+               f = new File(sandboxName, "C.class");
+               long newmodtime = f.lastModified();
+               // Without -proceedOnError supplied, we should *not* change the time stamp on the .class file
+               assertTrue("The .class file should have been modified as '-proceedOnError' *was* supplied (old="
+                               + new Date(oldmodtime).toString() + ")(new=" + new Date(newmodtime).toString() + ")", newmodtime > oldmodtime);
+       }
+
        private void pause(int secs) {
                try {
-                       Thread.sleep(secs*1000);
-               } catch (InterruptedException ie) {}
+                       Thread.sleep(secs * 1000);
+               } catch (InterruptedException ie) {
+               }
        }
-               
+
 }
index 9f7011c6181779e549a8397d20bab6562e4e227c..ba7196de512e0428d506d98d73e9e7281c97cff3 100644 (file)
@@ -68,344 +68,306 @@ import org.aspectj.org.eclipse.jdt.core.dom.TypePattern;
 /**
  * For each AspectJ ASTNode there is a test for:
  * 
- *    - that a new instance can be created via ajast.newXXX()
- *    - that the property descriptors have been set correctly
- *    - that the get/set methods for the different properties 
- *      work as expected
- *    - that the clone0 method sets the correct properties 
- *    - that the internalStructuralPropertiesForType(int) and
- *      internalGetSetXXXProperty(..) methods have been implemented
- *      correctly
- *      
- *  These are all that is required for an ASTNode, except an
- *  implementation of the accept0() method which is tested
- *  in ASTVisitorTest.     
+ * - that a new instance can be created via ajast.newXXX() - that the property descriptors have been set correctly - that the
+ * get/set methods for the different properties work as expected - that the clone0 method sets the correct properties - that the
+ * internalStructuralPropertiesForType(int) and internalGetSetXXXProperty(..) methods have been implemented correctly
+ * 
+ * These are all that is required for an ASTNode, except an implementation of the accept0() method which is tested in
+ * ASTVisitorTest.
  */
 public class AjASTTest extends AjASTTestCase {
-       
+
        // -------------- DefaultPointcut tests ---------------
-       
+
        public void testNewDefaultPointcut() {
                AjAST ajast = createAjAST();
                DefaultPointcut p = ajast.newDefaultPointcut();
-               assertNotNull("a new DefaultPointcut should have been created",p);
+               assertNotNull("a new DefaultPointcut should have been created", p);
        }
 
        public void testGetAndSetDetail() {
                AjAST ajast = createAjAST();
                DefaultPointcut p = ajast.newDefaultPointcut();
-               assertEquals("The default detail should be the empty string","",p.getDetail());
+               assertEquals("The default detail should be the empty string", "", p.getDetail());
                p.setDetail("some detail");
-               assertEquals("The detail should now be 'some detail'","some detail",p.getDetail());
+               assertEquals("The detail should now be 'some detail'", "some detail", p.getDetail());
        }
-       
+
        // -------------- ReferencePointcut tests ---------------
 
        public void testNewReferencePointcut() {
                AjAST ajast = createAjAST();
                ReferencePointcut p = ajast.newReferencePointcut();
-               assertNotNull("a new ReferencePointcut should have been created",p);
+               assertNotNull("a new ReferencePointcut should have been created", p);
        }
-       
+
        /**
-        * ReferencePointcut's have a name property - tests
-        * the getting and setting of this property
+        * ReferencePointcut's have a name property - tests the getting and setting of this property
         */
        public void testGetAndSetRefPointcutName() {
                AjAST ajast = createAjAST();
                ReferencePointcut p = ajast.newReferencePointcut();
-               assertEquals("the default reference pointcut name should be MISSING",
-                               "MISSING",p.getName().getFullyQualifiedName());
+               assertEquals("the default reference pointcut name should be MISSING", "MISSING", p.getName().getFullyQualifiedName());
                p.setName(ajast.newSimpleName("refPointcutName"));
-               assertEquals("the pointcut name should now be set to 'refPointcutName'",
-                               "refPointcutName",p.getName().getFullyQualifiedName());
+               assertEquals("the pointcut name should now be set to 'refPointcutName'", "refPointcutName", p.getName()
+                               .getFullyQualifiedName());
        }
-       
+
        public void testNewAndPointcut() {
                AjAST ajast = createAjAST();
                AndPointcut p = ajast.newAndPointcut();
-               assertNotNull("a new AndPointcut should have been created",p);          
+               assertNotNull("a new AndPointcut should have been created", p);
        }
-       
+
        // -------------- AndPointcut tests ---------------
 
        /**
-        * AndPointcut's have a left property - test the getting
-        * and setting of this property
+        * AndPointcut's have a left property - test the getting and setting of this property
         */
        public void testGetAndSetLeftOfAndPointcut() {
                AjAST ajast = createAjAST();
                AndPointcut ap = ajast.newAndPointcut();
-               assertNull("by default the left side of an AndPointcut should be null",
-                               ap.getLeft());
+               assertNull("by default the left side of an AndPointcut should be null", ap.getLeft());
                ReferencePointcut p = ajast.newReferencePointcut();
                ap.setLeft(p);
-               assertEquals("the left side of the AndPointcut should now be the" +
-                               " ReferencePointcut",p,ap.getLeft());
+               assertEquals("the left side of the AndPointcut should now be the" + " ReferencePointcut", p, ap.getLeft());
        }
-       
+
        /**
-        * AndPointcut's have a right property - test the getting
-        * and setting of this property
-        */     
+        * AndPointcut's have a right property - test the getting and setting of this property
+        */
        public void testGetAndSetRightOfAndPointcut() {
                AjAST ajast = createAjAST();
                AndPointcut ap = ajast.newAndPointcut();
-               assertNull("by default the right side of an AndPointcut should be null",
-                               ap.getRight());
+               assertNull("by default the right side of an AndPointcut should be null", ap.getRight());
                ReferencePointcut p = ajast.newReferencePointcut();
                ap.setRight(p);
-               assertEquals("the right side of the AndPointcut should now be the" +
-                               " ReferencePointcut",p,ap.getRight());          
+               assertEquals("the right side of the AndPointcut should now be the" + " ReferencePointcut", p, ap.getRight());
        }
-       
+
        // -------------- CflowPointcut tests ---------------
 
        public void testNewCflowPointcut() {
                AjAST ajast = createAjAST();
                CflowPointcut p = ajast.newCflowPointcut();
-               assertNotNull("a new CflowPointcut should have been created",p);                        
+               assertNotNull("a new CflowPointcut should have been created", p);
        }
-       
+
        /**
-        * CflowPointcut's have a body property - test the getting
-        * and setting of this property
+        * CflowPointcut's have a body property - test the getting and setting of this property
         */
        public void testGetAndSetBodyOfCflowPointcut() {
                AjAST ajast = createAjAST();
                CflowPointcut p = ajast.newCflowPointcut();
-               assertNull("by default a CflowPointcut should have a null body",p.getBody());
+               assertNull("by default a CflowPointcut should have a null body", p.getBody());
                ReferencePointcut rp = ajast.newReferencePointcut();
                p.setBody(rp);
-               assertEquals("the body of the CflowPointcut should now be a " +
-                               "ReferencePointcut", rp, p.getBody());
+               assertEquals("the body of the CflowPointcut should now be a " + "ReferencePointcut", rp, p.getBody());
        }
-       
+
        // -------------- NotPointcut tests ---------------
 
        public void testNewNotPointcut() {
                AjAST ajast = createAjAST();
                NotPointcut p = ajast.newNotPointcut();
-               assertNotNull("a new NotPointcut should have been created",p);                  
+               assertNotNull("a new NotPointcut should have been created", p);
        }
-       
+
        /**
-        * NotPointcut's have a body property - test the getting
-        * and setting of this property
+        * NotPointcut's have a body property - test the getting and setting of this property
         */
        public void testGetAndSetBodyOfNotPointcut() {
                AjAST ajast = createAjAST();
                NotPointcut p = ajast.newNotPointcut();
-               assertNull("by default a NotPointcut should have a null body",p.getBody());
+               assertNull("by default a NotPointcut should have a null body", p.getBody());
                ReferencePointcut rp = ajast.newReferencePointcut();
                p.setBody(rp);
-               assertEquals("the body of the NotPointcut should now be a " +
-                               "ReferencePointcut", rp, p.getBody());
+               assertEquals("the body of the NotPointcut should now be a " + "ReferencePointcut", rp, p.getBody());
        }
-       
+
        // -------------- OrPointcut tests ---------------
 
        public void testNewOrPointcut() {
                AjAST ajast = createAjAST();
                OrPointcut p = ajast.newOrPointcut();
-               assertNotNull("a new OrPointcut should have been created",p);           
+               assertNotNull("a new OrPointcut should have been created", p);
        }
-       
+
        /**
-        * OrPointcut's have a left property - test the getting
-        * and setting of this property
+        * OrPointcut's have a left property - test the getting and setting of this property
         */
        public void testGetAndSetLeftOfOrPointcut() {
                AjAST ajast = createAjAST();
                OrPointcut op = ajast.newOrPointcut();
-               assertNull("by default the left side of an OrPointcut should be null",
-                               op.getLeft());
+               assertNull("by default the left side of an OrPointcut should be null", op.getLeft());
                ReferencePointcut p = ajast.newReferencePointcut();
                op.setLeft(p);
-               assertEquals("the left side of the OrPointcut should now be the" +
-                               " ReferencePointcut",p,op.getLeft());
+               assertEquals("the left side of the OrPointcut should now be the" + " ReferencePointcut", p, op.getLeft());
        }
-       
+
        /**
-        * OrPointcut's have a right property - test the getting
-        * and setting of this property
+        * OrPointcut's have a right property - test the getting and setting of this property
         */
        public void testGetAndSetRightOfOrPointcut() {
                AjAST ajast = createAjAST();
                OrPointcut op = ajast.newOrPointcut();
-               assertNull("by default the right side of an OrPointcut should be null",
-                               op.getRight());
+               assertNull("by default the right side of an OrPointcut should be null", op.getRight());
                ReferencePointcut p = ajast.newReferencePointcut();
                op.setRight(p);
-               assertEquals("the right side of the OrPointcut should now be the" +
-                               " ReferencePointcut",p,op.getRight());          
+               assertEquals("the right side of the OrPointcut should now be the" + " ReferencePointcut", p, op.getRight());
        }
-       
+
        // -------------- PerCflow tests ---------------
 
        public void testNewPerCflow() {
                AjAST ajast = createAjAST();
                PerCflow p = ajast.newPerCflow();
-               assertNotNull("a new PerCflow should have been created",p);                     
+               assertNotNull("a new PerCflow should have been created", p);
        }
-       
+
        /**
-        * PerCflow's have a body property - test the getting
-        * and setting of this property
+        * PerCflow's have a body property - test the getting and setting of this property
         */
        public void testGetAndSetBodyOfPerCflow() {
                AjAST ajast = createAjAST();
                PerCflow p = ajast.newPerCflow();
-               assertNull("by default a PerCflow should have a null body",p.getBody());
+               assertNull("by default a PerCflow should have a null body", p.getBody());
                ReferencePointcut rp = ajast.newReferencePointcut();
                p.setBody(rp);
-               assertEquals("the body of the PerCflow should now be a " +
-                               "ReferencePointcut", rp, p.getBody());
+               assertEquals("the body of the PerCflow should now be a " + "ReferencePointcut", rp, p.getBody());
        }
-       
+
        // -------------- PerObject tests ---------------
 
        public void testNewPerObject() {
                AjAST ajast = createAjAST();
                PerObject p = ajast.newPerObject();
-               assertNotNull("a new PerObject should have been created",p);                    
+               assertNotNull("a new PerObject should have been created", p);
        }
-       
+
        /**
-        * PerObject's have a body property - test the getting
-        * and setting of this property
+        * PerObject's have a body property - test the getting and setting of this property
         */
        public void testGetAndSetBodyOfPerObject() {
                AjAST ajast = createAjAST();
                PerObject p = ajast.newPerObject();
-               assertNull("by default a PerObject should have a null body",p.getBody());
+               assertNull("by default a PerObject should have a null body", p.getBody());
                ReferencePointcut rp = ajast.newReferencePointcut();
                p.setBody(rp);
-               assertEquals("the body of the PerObject should now be a " +
-                               "ReferencePointcut", rp, p.getBody());
+               assertEquals("the body of the PerObject should now be a " + "ReferencePointcut", rp, p.getBody());
        }
-       
+
        // -------------- PerTypeWithin tests ---------------
 
        public void testNewPerTypeWithin() {
                AjAST ajast = createAjAST();
                PerTypeWithin p = ajast.newPerTypeWithin();
-               assertNotNull("a new PerTypeWithin should have been created",p);                        
+               assertNotNull("a new PerTypeWithin should have been created", p);
        }
-       
+
        // -------------- DefaultTypePattern tests ---------------
-       
+
        public void testNewDefaultTypePattern() {
                AjAST ajast = createAjAST();
                DefaultTypePattern p = ajast.newDefaultTypePattern();
-               assertNotNull("a new DefaultTypePattern should have been created",p);
+               assertNotNull("a new DefaultTypePattern should have been created", p);
        }
 
        public void testGetAndSetDetailInDefaultTypePattern() {
                AjAST ajast = createAjAST();
                DefaultTypePattern p = ajast.newDefaultTypePattern();
-               assertEquals("The default detail should be the empty string","",p.getDetail());
+               assertEquals("The default detail should be the empty string", "", p.getDetail());
                p.setDetail("some detail");
-               assertEquals("The detail should now be 'some detail'","some detail",p.getDetail());
+               assertEquals("The detail should now be 'some detail'", "some detail", p.getDetail());
        }
-       
+
        public void testPropertyDescriptorsForDefaultTypePattern() {
                AjAST ajast = createAjAST();
                DefaultTypePattern d = ajast.newDefaultTypePattern();
                List props = DefaultTypePattern.propertyDescriptors(AST.JLS3);
-               assertEquals("there should be no properties for the DefaultTypePattern",
-                               0,props.size());
+               assertEquals("there should be no properties for the DefaultTypePattern", 0, props.size());
        }
-       
+
        public void testCloneDefaultTypePattern() {
                AjAST ajast = createAjAST();
                DefaultTypePattern d = ajast.newDefaultTypePattern();
                d.setDetail("new detail");
-               DefaultTypePattern copy = (DefaultTypePattern)ASTNode.copySubtree(ajast,d);
-               assertEquals("the copy should have detail 'new detail'","new detail",copy.getDetail());
+               DefaultTypePattern copy = (DefaultTypePattern) ASTNode.copySubtree(ajast, d);
+               assertEquals("the copy should have detail 'new detail'", "new detail", copy.getDetail());
        }
-       
+
        // -------------- SignaturePattern tests ---------------
-       
+
        public void testNewSignaturePattern() {
                AjAST ajast = createAjAST();
                SignaturePattern p = ajast.newSignaturePattern();
-               assertNotNull("a new SignaturePattern should have been created",p);
+               assertNotNull("a new SignaturePattern should have been created", p);
        }
 
        public void testGetAndSetDetailInSignaturePattern() {
                AjAST ajast = createAjAST();
                SignaturePattern p = ajast.newSignaturePattern();
-               assertEquals("The default detail should be the empty string","",p.getDetail());
+               assertEquals("The default detail should be the empty string", "", p.getDetail());
                p.setDetail("some detail");
-               assertEquals("The detail should now be 'some detail'","some detail",p.getDetail());
+               assertEquals("The detail should now be 'some detail'", "some detail", p.getDetail());
        }
-       
+
        public void testPropertyDescriptorsForSignaturePattern() {
                AjAST ajast = createAjAST();
                SignaturePattern p = ajast.newSignaturePattern();
                List props = SignaturePattern.propertyDescriptors(AST.JLS3);
-               assertEquals("there should be no properties for the DefaultTypePattern",
-                               0,props.size());
+               assertEquals("there should be no properties for the DefaultTypePattern", 0, props.size());
        }
-       
+
        public void testCloneDefaultSignaturePattern() {
                AjAST ajast = createAjAST();
                SignaturePattern p = ajast.newSignaturePattern();
                p.setDetail("new detail");
-               SignaturePattern copy = (SignaturePattern)ASTNode.copySubtree(ajast,p);
-               assertEquals("the copy should have detail 'new detail'","new detail",copy.getDetail());
+               SignaturePattern copy = (SignaturePattern) ASTNode.copySubtree(ajast, p);
+               assertEquals("the copy should have detail 'new detail'", "new detail", copy.getDetail());
        }
-       
+
        // -------------- PointcutDeclaration tests ---------------
 
        public void testNewPointcutDeclaration() {
                AjAST ajast = createAjAST();
                PointcutDeclaration pd = ajast.newPointcutDeclaration();
-               assertNotNull("a new PointcutDeclaration should have been created",pd);
+               assertNotNull("a new PointcutDeclaration should have been created", pd);
        }
-       
+
        /**
-        * PointcutDeclarations's have a name property - test the getting
-        * and setting of this property
+        * PointcutDeclarations's have a name property - test the getting and setting of this property
         */
        public void testGetAndSetPointcutName() {
                AjAST ajast = createAjAST();
                PointcutDeclaration pd = ajast.newPointcutDeclaration();
-               assertEquals("the default pointcut name should be MISSING",
-                               "MISSING",pd.getName().getFullyQualifiedName());
+               assertEquals("the default pointcut name should be MISSING", "MISSING", pd.getName().getFullyQualifiedName());
                pd.setName(ajast.newSimpleName("p"));
-               assertEquals("the pointcut name should now be set to 'p'",
-                               "p",pd.getName().getFullyQualifiedName());
+               assertEquals("the pointcut name should now be set to 'p'", "p", pd.getName().getFullyQualifiedName());
        }
-       
+
        /**
-        * PointcutDeclarations's have a designator property - test the getting
-        * and setting of this property
+        * PointcutDeclarations's have a designator property - test the getting and setting of this property
         */
        public void testGetAndSetPointcutDesignator() {
                AjAST ajast = createAjAST();
                PointcutDeclaration pd = ajast.newPointcutDeclaration();
-               assertNull("by default the pointcut designator is null",pd.getDesignator());
+               assertNull("by default the pointcut designator is null", pd.getDesignator());
                ReferencePointcut rp = ajast.newReferencePointcut();
                pd.setDesignator(rp);
-               assertEquals("should have set the pointcut designator to be " +
-                               "the ReferencePointcut",rp,pd.getDesignator());
+               assertEquals("should have set the pointcut designator to be " + "the ReferencePointcut", rp, pd.getDesignator());
        }
-       
-       public void testGetAndSetPointcutArguments(){
+
+       public void testGetAndSetPointcutArguments() {
                AjAST ajast = createAjAST();
                PointcutDeclaration pd = ajast.newPointcutDeclaration();
-               assertEquals("by default the number of arguments is zero",pd.parameters().size(), 0);
+               assertEquals("by default the number of arguments is zero", pd.parameters().size(), 0);
                List l = pd.parameters();
-               assertEquals("there shouldn't be any arguments associated with" +
-                               "the pointcut yet",0,l.size());
+               assertEquals("there shouldn't be any arguments associated with" + "the pointcut yet", 0, l.size());
                SingleVariableDeclaration p1 = ajast.newSingleVariableDeclaration();
                l.add(p1);
-               assertEquals("there should be one parameter associated with" +
-                               "the pointcut",1,pd.parameters().size());
-               assertEquals("there should be a SingleVariableDeclaration associated with" +
-                               "the pointcut",p1,pd.parameters().get(0));
+               assertEquals("there should be one parameter associated with" + "the pointcut", 1, pd.parameters().size());
+               assertEquals("there should be a SingleVariableDeclaration associated with" + "the pointcut", p1, pd.parameters().get(0));
        }
 
        public void testPropertyDescriptorsForPointcutDeclaration() {
@@ -420,7 +382,7 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
                        if ((o instanceof ChildPropertyDescriptor)) {
-                               ChildPropertyDescriptor element = (ChildPropertyDescriptor)o;
+                               ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
                                String id = element.getId();
                                if (id.equals("javadoc")) {
                                        foundJavadoc = true;
@@ -432,9 +394,9 @@ public class AjASTTest extends AjASTTestCase {
                                        fail("unknown PropertyDescriptor associated with PointcutDeclaration: " + element.getId());
                                }
                        } else if (o instanceof ChildListPropertyDescriptor) {
-                               ChildListPropertyDescriptor element = (ChildListPropertyDescriptor)o;
+                               ChildListPropertyDescriptor element = (ChildListPropertyDescriptor) o;
                                if (element.getId().equals("parameters")) {
-                                       foundParamList= true;                                   
+                                       foundParamList = true;
                                } else if (element.getId().equals("modifiers")) {
                                        foundModifiers = true;
                                }
@@ -442,25 +404,23 @@ public class AjASTTest extends AjASTTestCase {
                                fail("unknown PropertyDescriptor associated with PointcutDeclaration: " + o);
                        }
                }
-               assertTrue("PointcutDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("PointcutDeclaration should have a designator PropertyDescriptor",foundDesignator);
-               assertTrue("PointcutDeclaration should have an name PropertyDescriptor",foundName);
-               assertTrue("PointcutDeclaration should have a parameters PropertyDescriptor",foundParamList);
-               assertTrue("PointcutDeclaration should have a modifiers PropertyDescriptor",foundModifiers);
+               assertTrue("PointcutDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("PointcutDeclaration should have a designator PropertyDescriptor", foundDesignator);
+               assertTrue("PointcutDeclaration should have an name PropertyDescriptor", foundName);
+               assertTrue("PointcutDeclaration should have a parameters PropertyDescriptor", foundParamList);
+               assertTrue("PointcutDeclaration should have a modifiers PropertyDescriptor", foundModifiers);
        }
-       
+
        public void testClonePointcutDeclaration() {
                AjAST ajast = createAjAST();
                PointcutDeclaration d = ajast.newPointcutDeclaration();
                d.setName(ajast.newSimpleName("pointcut_name"));
                d.parameters().add(ajast.newSingleVariableDeclaration());
-               PointcutDeclaration copy = (PointcutDeclaration)ASTNode.copySubtree(ajast,d);
-               assertEquals("there should be one parameter associated with" +
-                               "the pointcut copy",1,copy.parameters().size());
-               assertEquals("the PointcutDeclaration clone should have the name ", "pointcut_name",
-                               copy.getName().toString());
+               PointcutDeclaration copy = (PointcutDeclaration) ASTNode.copySubtree(ajast, d);
+               assertEquals("there should be one parameter associated with" + "the pointcut copy", 1, copy.parameters().size());
+               assertEquals("the PointcutDeclaration clone should have the name ", "pointcut_name", copy.getName().toString());
        }
-       
+
        public void testInternalPointcutDeclaration() {
                AjAST ajast = createAjAST();
                PointcutDeclaration d = ajast.newPointcutDeclaration();
@@ -468,31 +428,27 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
                        if (o instanceof ChildPropertyDescriptor) {
-                               ChildPropertyDescriptor element = (ChildPropertyDescriptor)o;
+                               ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
                                if (element.getId().equals("name")) {
-                                       assertNotNull("PointcutDeclaration's " + element.getId() + " property" +
-                                                       " should not be null since it is lazily created",
-                                                       d.getStructuralProperty(element));                              
+                                       assertNotNull("PointcutDeclaration's " + element.getId() + " property"
+                                                       + " should not be null since it is lazily created", d.getStructuralProperty(element));
                                } else {
-                                       assertNull("PointcutDeclaration's " + element.getId() + " property" +
-                                                       " should be null since we haven't set it yet",
-                                                       d.getStructuralProperty(element));                              
-                               }                               
+                                       assertNull("PointcutDeclaration's " + element.getId() + " property"
+                                                       + " should be null since we haven't set it yet", d.getStructuralProperty(element));
+                               }
                        } else if (o instanceof ChildListPropertyDescriptor) {
-                               ChildListPropertyDescriptor element = (ChildListPropertyDescriptor)o;
-                               assertNotNull("PointcutDeclaration's " + element.getId() + " property" +
-                                               "should not be null since it is a list",
-                                               d.getStructuralProperty(element));
+                               ChildListPropertyDescriptor element = (ChildListPropertyDescriptor) o;
+                               assertNotNull("PointcutDeclaration's " + element.getId() + " property" + "should not be null since it is a list", d
+                                               .getStructuralProperty(element));
                                boolean isIExtendedModifier = element.getElementType().equals(IExtendedModifier.class);
                                boolean isSingleVariable = element.getElementType().equals(SingleVariableDeclaration.class);
-                               assertTrue("should only be able to put SingleVariableDeclaration's" +
-                                               " (which itself has node type IExtendedModifier) into the list",
-                                               isIExtendedModifier || isSingleVariable);
+                               assertTrue("should only be able to put SingleVariableDeclaration's"
+                                               + " (which itself has node type IExtendedModifier) into the list", isIExtendedModifier || isSingleVariable);
                        } else if (o instanceof SimplePropertyDescriptor) {
-                               SimplePropertyDescriptor element = (SimplePropertyDescriptor)o;
-                               assertNotNull("PointcutDeclaration's " + element.getId() + " property" +
-                                               "should not be null since it is a boolean",
-                                               d.getStructuralProperty(element));                                                                      
+                               SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
+                               assertNotNull(
+                                               "PointcutDeclaration's " + element.getId() + " property" + "should not be null since it is a boolean", d
+                                                               .getStructuralProperty(element));
                        } else {
                                fail("unknown PropertyDescriptor associated with PointcutDeclaration: " + o);
                        }
@@ -503,29 +459,29 @@ public class AjASTTest extends AjASTTestCase {
                                ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
                                if (element.getId().equals("designator")) {
                                        ReferencePointcut rp = ajast.newReferencePointcut();
-                                       d.setStructuralProperty(element,rp);
-                                       assertEquals("PointcutDeclaration's designator property should" +
-                                                       " now be a ReferencePointcut",rp,d.getStructuralProperty(element));
+                                       d.setStructuralProperty(element, rp);
+                                       assertEquals("PointcutDeclaration's designator property should" + " now be a ReferencePointcut", rp, d
+                                                       .getStructuralProperty(element));
                                } else if (element.getId().equals("javadoc")) {
                                        // do nothing since makes no sense to have javadoc
                                } else if (element.getId().equals("name")) {
                                        SimpleName sn = ajast.newSimpleName("p");
-                                       d.setStructuralProperty(element,sn);
-                                       assertEquals("PointcutDeclaration's name property should" +
-                                                       " now be a SimpleName",sn,d.getStructuralProperty(element));
+                                       d.setStructuralProperty(element, sn);
+                                       assertEquals("PointcutDeclaration's name property should" + " now be a SimpleName", sn, d
+                                                       .getStructuralProperty(element));
                                }
-                       } 
+                       }
                }
        }
-       
+
        // -------------- AspectDeclaration tests ---------------
 
        public void testNewAspectDeclaration() {
                AjAST ajast = createAjAST();
                AspectDeclaration ad = ajast.newAspectDeclaration();
-               assertNotNull("a new AspectDeclaration should have been created",ad);
+               assertNotNull("a new AspectDeclaration should have been created", ad);
        }
-       
+
        public void testPropertyDescriptorsForAspectDeclaration() {
                AjAST ajast = createAjAST();
                AspectDeclaration d = ajast.newAspectDeclaration();
@@ -537,7 +493,7 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
                        if ((o instanceof ChildPropertyDescriptor)) {
-                               ChildPropertyDescriptor element = (ChildPropertyDescriptor)o;
+                               ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
                                String id = element.getId();
                                if (id.equals("javadoc")) {
                                        foundJavadoc = true;
@@ -545,7 +501,7 @@ public class AjASTTest extends AjASTTestCase {
                                        foundPerClause = true;
                                }
                        } else if (o instanceof SimplePropertyDescriptor) {
-                               SimplePropertyDescriptor element = (SimplePropertyDescriptor)o;
+                               SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
                                String id = element.getId();
                                if (id.equals("privileged")) {
                                        foundIsPrivileged = true;
@@ -554,231 +510,210 @@ public class AjASTTest extends AjASTTestCase {
                                }
                        }
                }
-               assertTrue("AspectDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("AspectDeclaration should have a perClause PropertyDescriptor",foundPerClause);
-               assertTrue("AspectDeclaration should have a privileged PropertyDescriptor",foundIsPrivileged);
-               assertTrue("AspectDeclaration should have inherited an aspect PropertyDescriptor",foundIsAspect);
+               assertTrue("AspectDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("AspectDeclaration should have a perClause PropertyDescriptor", foundPerClause);
+               assertTrue("AspectDeclaration should have a privileged PropertyDescriptor", foundIsPrivileged);
+               assertTrue("AspectDeclaration should have inherited an aspect PropertyDescriptor", foundIsAspect);
        }
-                       
+
        public void testCloneAspectDeclaration() {
                AjAST ajast = createAjAST();
                AspectDeclaration d = ajast.newAspectDeclaration();
                d.setPerClause(ajast.newPerTypeWithin());
                d.setPrivileged(true);
-               AspectDeclaration copy = (AspectDeclaration)ASTNode.copySubtree(ajast,d);
-               assertNotNull("the AspectDeclaration clone should have a perClause set",
-                               copy.getPerClause());
-               assertTrue("the AspectDeclaration clone should be a 'privileged'",
-                               copy.isPrivileged());
-       }
-       
-       
+               AspectDeclaration copy = (AspectDeclaration) ASTNode.copySubtree(ajast, d);
+               assertNotNull("the AspectDeclaration clone should have a perClause set", copy.getPerClause());
+               assertTrue("the AspectDeclaration clone should be a 'privileged'", copy.isPrivileged());
+       }
+
        /**
-        * AsepctDeclarations's have a perClause property - test the getting
-        * and setting of this property
+        * AsepctDeclarations's have a perClause property - test the getting and setting of this property
         */
        public void testSetPerClauseInAspectDeclaration() {
                AjAST ajast = createAjAST();
                AspectDeclaration ad = ajast.newAspectDeclaration();
-               assertNull("by default the perClause should be null",ad.getPerClause());
+               assertNull("by default the perClause should be null", ad.getPerClause());
                PerCflow pcf = ajast.newPerCflow();
                ad.setPerClause(pcf);
-               assertEquals("should have set the perClause to be a PerCflow",
-                               pcf,ad.getPerClause());
+               assertEquals("should have set the perClause to be a PerCflow", pcf, ad.getPerClause());
        }
-       
+
        /**
-        * AsepctDeclarations's have a isPrivileged property - test the getting
-        * and setting of this property
+        * AsepctDeclarations's have a isPrivileged property - test the getting and setting of this property
         */
        public void testSetPrivilegedInAspectDeclaration() {
                AjAST ajast = createAjAST();
                AspectDeclaration ad = ajast.newAspectDeclaration();
-               assertFalse("by default the aspect should not be privileged",ad.isPrivileged());
+               assertFalse("by default the aspect should not be privileged", ad.isPrivileged());
                ad.setPrivileged(true);
-               assertTrue("the aspect should now privileged",ad.isPrivileged());
+               assertTrue("the aspect should now privileged", ad.isPrivileged());
        }
-       
+
        // -------------- AfterAdviceDeclaration tests ---------------
 
        public void testNewAfterAdviceDeclaration() {
                AjAST ajast = createAjAST();
                AfterAdviceDeclaration ad = ajast.newAfterAdviceDeclaration();
-               assertNotNull("a new AfterAdviceDeclaration should have been created",ad);
+               assertNotNull("a new AfterAdviceDeclaration should have been created", ad);
        }
-       
+
        // -------------- BeforeAdviceDeclaration tests ---------------
 
        public void testNewBeforeAdviceDeclaration() {
                AjAST ajast = createAjAST();
                BeforeAdviceDeclaration bd = ajast.newBeforeAdviceDeclaration();
-               assertNotNull("a new BeforeAdviceDeclaration should have been created",bd);
+               assertNotNull("a new BeforeAdviceDeclaration should have been created", bd);
        }
-       
+
        /**
-        * AdviceDeclarations's have a pointcut property - test the getting
-        * and setting of this property
+        * AdviceDeclarations's have a pointcut property - test the getting and setting of this property
         */
        public void testGetAndSetPointcutInAdviceDeclaration() {
                AjAST ajast = createAjAST();
                BeforeAdviceDeclaration bd = ajast.newBeforeAdviceDeclaration();
-               assertNull("by default there should be no pointcut associated with" +
-                               " the advice",bd.getPointcut());
+               assertNull("by default there should be no pointcut associated with" + " the advice", bd.getPointcut());
                AndPointcut p = ajast.newAndPointcut();
                bd.setPointcut(p);
-               assertEquals("there should now be an AndPointcut associated with" +
-                               " the advice",p,bd.getPointcut());
+               assertEquals("there should now be an AndPointcut associated with" + " the advice", p, bd.getPointcut());
        }
-       
+
        /**
-        * AdviceDeclarations's have a body property - test the getting
-        * and setting of this property
+        * AdviceDeclarations's have a body property - test the getting and setting of this property
         */
        public void testGetAndSetBodyInAdviceDeclaration() {
                AjAST ajast = createAjAST();
                BeforeAdviceDeclaration bd = ajast.newBeforeAdviceDeclaration();
-               assertNull("by default there should be no body associated with" +
-                               " the advice",bd.getBody());
+               assertNull("by default there should be no body associated with" + " the advice", bd.getBody());
                Block b = ajast.newBlock();
                bd.setBody(b);
-               assertEquals("there should now be a body associated with" +
-                               " the advice",b,bd.getBody());  
+               assertEquals("there should now be a body associated with" + " the advice", b, bd.getBody());
        }
-       
+
        // -------------- AfterReturningAdviceDeclaration tests ---------------
 
        public void testNewAfterReturningAdviceDeclaration() {
                AjAST ajast = createAjAST();
                AfterReturningAdviceDeclaration d = ajast.newAfterReturningAdviceDeclaration();
-               assertNotNull("should have created an AfterReturningAdviceDeclaration",d);
+               assertNotNull("should have created an AfterReturningAdviceDeclaration", d);
        }
-       
+
        /**
-        * AfterReturningAdviceDeclarations's have a returning property - 
-        * test the getting and setting of this property
+        * AfterReturningAdviceDeclarations's have a returning property - test the getting and setting of this property
         */
        public void testGetAndSetReturning() {
                AjAST ajast = createAjAST();
                AfterReturningAdviceDeclaration d = ajast.newAfterReturningAdviceDeclaration();
-               assertNull("by default there should be no returning property associated with" +
-                               " the AfterReturningAdviceDeclaration",d.getReturning());
+               assertNull("by default there should be no returning property associated with" + " the AfterReturningAdviceDeclaration", d
+                               .getReturning());
                SingleVariableDeclaration s = ajast.newSingleVariableDeclaration();
                d.setReturning(s);
-               assertEquals("there should now be a returning property associated with" +
-                               " the AfterReturningAdviceDeclaration",s,d.getReturning());     
+               assertEquals("there should now be a returning property associated with" + " the AfterReturningAdviceDeclaration", s, d
+                               .getReturning());
        }
-       
+
        // -------------- AfterThrowingAdviceDeclaration tests ---------------
 
        public void testNewAfterThrowingAdviceDeclaration() {
                AjAST ajast = createAjAST();
                AfterThrowingAdviceDeclaration d = ajast.newAfterThrowingAdviceDeclaration();
-               assertNotNull("should have created an AfterThrowingAdviceDeclaration",d);
+               assertNotNull("should have created an AfterThrowingAdviceDeclaration", d);
        }
-       
+
        /**
-        * AfterThrowingAdviceDeclaration's have a throwing property - 
-        * test the getting and setting of this property
+        * AfterThrowingAdviceDeclaration's have a throwing property - test the getting and setting of this property
         */
        public void testGetAndSetThrowing() {
                AjAST ajast = createAjAST();
                AfterThrowingAdviceDeclaration d = ajast.newAfterThrowingAdviceDeclaration();
-               assertNull("by default there should be no throwing property associated with" +
-                               " the AfterThrowingAdviceDeclaration",d.getThrowing());
+               assertNull("by default there should be no throwing property associated with" + " the AfterThrowingAdviceDeclaration", d
+                               .getThrowing());
                SingleVariableDeclaration s = ajast.newSingleVariableDeclaration();
                d.setThrowing(s);
-               assertEquals("there should now be a throwing property associated with" +
-                               " the AfterThrowingAdviceDeclaration",s,d.getThrowing());       
+               assertEquals("there should now be a throwing property associated with" + " the AfterThrowingAdviceDeclaration", s, d
+                               .getThrowing());
        }
-       
+
        // -------------- AroundAdviceDeclaration tests ---------------
 
        public void testNewAroundAdviceDeclaration() {
                AjAST ajast = createAjAST();
                AroundAdviceDeclaration d = ajast.newAroundAdviceDeclaration();
-               assertNotNull("should have created an AroundAdviceDeclaration",d);              
+               assertNotNull("should have created an AroundAdviceDeclaration", d);
        }
-       
+
        /**
-        * AroundAdviceDeclaration's have a return type property - 
-        * test the getting and setting of this property (different
+        * AroundAdviceDeclaration's have a return type property - test the getting and setting of this property (different
         * implementation for JLS2 and JLS3)
         */
        public void testGetAndSetReturnTypeJLS2() {
                AjAST ajast = createAjAST(AST.JLS2);
                AroundAdviceDeclaration d = ajast.newAroundAdviceDeclaration();
                Type t = d.getReturnType();
-               assertTrue("by default the return type associated with the" +
-                               " AroundAdviceDeclaration should be a PrimitiveType",
+               assertTrue("by default the return type associated with the" + " AroundAdviceDeclaration should be a PrimitiveType",
                                t instanceof PrimitiveType);
-               assertEquals("by default there should be the PrimitiveType.VOID return " +
-                               "type associated with the AroundAdviceDeclaration",
-                               PrimitiveType.VOID.toString(),((PrimitiveType)t).toString());
+               assertEquals("by default there should be the PrimitiveType.VOID return "
+                               + "type associated with the AroundAdviceDeclaration", PrimitiveType.VOID.toString(), ((PrimitiveType) t).toString());
                SimpleType s = ajast.newSimpleType(ajast.newSimpleName("name"));
                d.setReturnType(s);
-               assertEquals("there should now be a SimpleType return type associated with" +
-                               " the AroundAdviceDeclaration",s,d.getReturnType());    
+               assertEquals("there should now be a SimpleType return type associated with" + " the AroundAdviceDeclaration", s, d
+                               .getReturnType());
        }
 
        /**
-        * AroundAdviceDeclaration's have a return type property - 
-        * test the getting and setting of this property (different
+        * AroundAdviceDeclaration's have a return type property - test the getting and setting of this property (different
         * implementation for JLS2 and JLS3)
         */
        public void testGetAndSetReturnTypeJLS3() {
                AjAST ajast = createAjAST();
                AroundAdviceDeclaration d = ajast.newAroundAdviceDeclaration();
                Type t = d.getReturnType2();
-               assertTrue("by default the return type associated with the" +
-                               " AroundAdviceDeclaration should be a PrimitiveType",
+               assertTrue("by default the return type associated with the" + " AroundAdviceDeclaration should be a PrimitiveType",
                                t instanceof PrimitiveType);
-               assertEquals("by default there should be the PrimitiveType.VOID return " +
-                               "type associated with the AroundAdviceDeclaration",
-                               PrimitiveType.VOID.toString(),((PrimitiveType)t).toString());
+               assertEquals("by default there should be the PrimitiveType.VOID return "
+                               + "type associated with the AroundAdviceDeclaration", PrimitiveType.VOID.toString(), ((PrimitiveType) t).toString());
                SimpleType s = ajast.newSimpleType(ajast.newSimpleName("name"));
                d.setReturnType2(s);
-               assertEquals("there should now be a SimpleType return type associated with" +
-                               " the AroundAdviceDeclaration",s,d.getReturnType2());   
+               assertEquals("there should now be a SimpleType return type associated with" + " the AroundAdviceDeclaration", s, d
+                               .getReturnType2());
        }
-       
+
        // -------------- InterTypeFieldDeclaration tests ---------------
 
        public void testNewITDFieldDeclaration() {
                AjAST ajast = createAjAST();
                InterTypeFieldDeclaration d = ajast.newInterTypeFieldDeclaration();
-               assertNotNull("should have created an InterTypeFieldDeclaration",d);                    
+               assertNotNull("should have created an InterTypeFieldDeclaration", d);
        }
-       
+
        // -------------- InterTypeMethodDeclaration tests ---------------
 
        public void testNewITDMethodDeclaration() {
                AjAST ajast = createAjAST();
                InterTypeMethodDeclaration d = ajast.newInterTypeMethodDeclaration();
-               assertNotNull("should have created an InterTypeMethodDeclaration",d);                   
+               assertNotNull("should have created an InterTypeMethodDeclaration", d);
        }
-       
+
        // -------------- AjTypeDeclaration tests ---------------
 
        public void testNewAjTypeDeclaration() {
                AjAST ajast = createAjAST();
                AjTypeDeclaration d = ajast.newAjTypeDeclaration();
-               assertNotNull("should have created an AjTypeDeclaration",d);                    
+               assertNotNull("should have created an AjTypeDeclaration", d);
        }
-       
+
        /**
-        * AjTypeDeclaration's have an isAspect property - 
-        * test the getting and setting of this property
+        * AjTypeDeclaration's have an isAspect property - test the getting and setting of this property
         */
        public void testGetAndSetIsAspect() {
                AjAST ajast = createAjAST();
                AjTypeDeclaration d = ajast.newAjTypeDeclaration();
-               assertFalse("by default an AjTypeDeclaration should be a class",d.isAspect());
+               assertFalse("by default an AjTypeDeclaration should be a class", d.isAspect());
                d.setAspect(true);
-               assertTrue("AjTypeDeclaration should now be an aspect",d.isAspect());   
+               assertTrue("AjTypeDeclaration should now be an aspect", d.isAspect());
                d.setAspect(false);
-               assertFalse("AjTypeDeclaration should now be a class",d.isAspect());    
+               assertFalse("AjTypeDeclaration should now be a class", d.isAspect());
        }
-       
+
        public void testPropertyDescriptorsForAjTypeDeclaration() {
                AjAST ajast = createAjAST();
                AjTypeDeclaration d = ajast.newAjTypeDeclaration();
@@ -787,26 +722,25 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
                        if (o instanceof SimplePropertyDescriptor) {
-                               SimplePropertyDescriptor element = (SimplePropertyDescriptor)o;
+                               SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
                                String id = element.getId();
                                if (id.equals("aspect")) {
                                        foundAspect = true;
-                               }                                                                               
+                               }
                        }
                }
-               assertTrue("AjTypeDeclaration should have an aspect PropertyDescriptor",foundAspect);
+               assertTrue("AjTypeDeclaration should have an aspect PropertyDescriptor", foundAspect);
        }
-               
+
        public void testCloneAjTypeDeclaration() {
                AjAST ajast = createAjAST();
                AjTypeDeclaration d = ajast.newAjTypeDeclaration();
                d.setAspect(true);
-               AjTypeDeclaration copy = (AjTypeDeclaration)ASTNode.copySubtree(ajast,d);
-               assertTrue("the AjTypeDeclaration clone should be an aspect",
-                               copy.isAspect());
+               AjTypeDeclaration copy = (AjTypeDeclaration) ASTNode.copySubtree(ajast, d);
+               assertTrue("the AjTypeDeclaration clone should be an aspect", copy.isAspect());
        }
 
-       // test for bug 125809 - make sure the property descriptors 
+       // test for bug 125809 - make sure the property descriptors
        // associated with the AspectDeclaration aren't consequently
        // associated with the AjTypeDeclaration
        public void testPropertyDescriptorsForAjTypeDeclaration2() {
@@ -821,23 +755,23 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
                        if (o instanceof SimplePropertyDescriptor) {
-                               SimplePropertyDescriptor element = (SimplePropertyDescriptor)o;
+                               SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
                                String id = element.getId();
                                if (id.equals("privileged")) {
                                        foundPrivileged = true;
-                               }                                                                               
+                               }
                        } else if (o instanceof ChildPropertyDescriptor) {
-                               ChildPropertyDescriptor element = (ChildPropertyDescriptor)o;
+                               ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
                                if (element.getId().equals("perClause")) {
                                        foundPerClause = true;
                                }
                        }
                }
-               assertFalse("AjTypeDeclaration should not have a privileged PropertyDescriptor",foundPrivileged);
-               assertFalse("AjTypeDeclaration should not have a perClause PropertyDescriptor",foundPerClause);
+               assertFalse("AjTypeDeclaration should not have a privileged PropertyDescriptor", foundPrivileged);
+               assertFalse("AjTypeDeclaration should not have a perClause PropertyDescriptor", foundPerClause);
        }
-       
-       // test for bug 125809 - make sure the property descriptors 
+
+       // test for bug 125809 - make sure the property descriptors
        // associated with the AjTypeDeclaration aren't consequently
        // associated with the TypeDeclaration
        public void testPropertyDescriptorsForAjTypeDeclaration3() {
@@ -850,24 +784,24 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
                        if (o instanceof SimplePropertyDescriptor) {
-                               SimplePropertyDescriptor element = (SimplePropertyDescriptor)o;
+                               SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
                                String id = element.getId();
                                if (id.equals("aspect")) {
                                        foundAspect = true;
-                               }                                                                               
-                       } 
+                               }
+                       }
                }
-               assertFalse("TypeDeclaration should not have an aspect PropertyDescriptor",foundAspect);
+               assertFalse("TypeDeclaration should not have an aspect PropertyDescriptor", foundAspect);
        }
-       
+
        // -------------- DeclareAtFieldDeclaration tests ---------------
 
        public void testNewDeclareAtFieldDeclaration() {
                AjAST ajast = createAjAST();
                DeclareAtFieldDeclaration d = ajast.newDeclareAtFieldDeclaration();
-               assertNotNull("should have created a DeclareAtFieldDeclaration",d);
+               assertNotNull("should have created a DeclareAtFieldDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclareAtField() {
                AjAST ajast = createAjAST();
                DeclareAtFieldDeclaration d = ajast.newDeclareAtFieldDeclaration();
@@ -876,7 +810,7 @@ public class AjASTTest extends AjASTTestCase {
                boolean foundPattern = false;
                boolean foundAnnotationName = false;
                for (Iterator iter = props.iterator(); iter.hasNext();) {
-                       ChildPropertyDescriptor element = (ChildPropertyDescriptor)iter.next();
+                       ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        String id = element.getId();
                        if (id.equals("javadoc")) {
                                foundJavadoc = true;
@@ -886,46 +820,43 @@ public class AjASTTest extends AjASTTestCase {
                                foundAnnotationName = true;
                        } else {
                                fail("unknown PropertyDescriptor associated with DeclareAtFieldDeclaration: " + element.getId());
-                       }                                               
+                       }
                }
-               assertTrue("DeclareAtFieldDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareAtFieldDeclaration should have a attern PropertyDescriptor",foundPattern);
-               assertTrue("DeclareAtFieldDeclaration should have a annotationName PropertyDescriptor",foundAnnotationName);
+               assertTrue("DeclareAtFieldDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareAtFieldDeclaration should have a attern PropertyDescriptor", foundPattern);
+               assertTrue("DeclareAtFieldDeclaration should have a annotationName PropertyDescriptor", foundAnnotationName);
        }
-       
+
        public void testGetAndSetPatternNodeInDeclareAtField() {
                AjAST ajast = createAjAST();
                DeclareAtFieldDeclaration d = ajast.newDeclareAtFieldDeclaration();
-               assertNull("by default there should be no typePattern associated with" +
-                               " the declare @field annotation",d.getPatternNode());
+               assertNull("by default there should be no typePattern associated with" + " the declare @field annotation", d
+                               .getPatternNode());
                SignaturePattern p = ajast.newSignaturePattern();
                d.setPatternNode(p);
-               assertEquals("there should now be a DefaultTypePattern associated with" +
-                               " the declare @field annotation",p,d.getPatternNode());
+               assertEquals("there should now be a DefaultTypePattern associated with" + " the declare @field annotation", p, d
+                               .getPatternNode());
        }
-       
+
        public void testGetAndSetAnnNameInDeclareAtField() {
                AjAST ajast = createAjAST();
                DeclareAtFieldDeclaration d = ajast.newDeclareAtFieldDeclaration();
-               assertEquals("the default annotation name should be MISSING",
-                               "MISSING",d.getAnnotationName().getFullyQualifiedName());
+               assertEquals("the default annotation name should be MISSING", "MISSING", d.getAnnotationName().getFullyQualifiedName());
                d.setAnnotationName(ajast.newSimpleName("MyAnnotation"));
-               assertEquals("the annotation name should now be set to 'MyAnnotation'",
-                               "MyAnnotation",d.getAnnotationName().getFullyQualifiedName());
+               assertEquals("the annotation name should now be set to 'MyAnnotation'", "MyAnnotation", d.getAnnotationName()
+                               .getFullyQualifiedName());
        }
-       
+
        public void testCloneDeclareAtField() {
                AjAST ajast = createAjAST();
                DeclareAtFieldDeclaration d = ajast.newDeclareAtFieldDeclaration();
                d.setPatternNode(ajast.newSignaturePattern());
                d.setAnnotationName(ajast.newSimpleName("MyAnnotation"));
-               DeclareAtFieldDeclaration copy = (DeclareAtFieldDeclaration)ASTNode.copySubtree(ajast,d);
-               assertNotNull("the DeclareAtFieldDeclaration clone should have a TypePattern set",
-                               copy.getPatternNode());
-               assertNotNull("the DeclareAtFieldDeclaration clone should have a Annotation name set",
-                               copy.getAnnotationName());
+               DeclareAtFieldDeclaration copy = (DeclareAtFieldDeclaration) ASTNode.copySubtree(ajast, d);
+               assertNotNull("the DeclareAtFieldDeclaration clone should have a TypePattern set", copy.getPatternNode());
+               assertNotNull("the DeclareAtFieldDeclaration clone should have a Annotation name set", copy.getAnnotationName());
        }
-       
+
        public void testInternalDeclareAtField() {
                AjAST ajast = createAjAST();
                DeclareAtFieldDeclaration d = ajast.newDeclareAtFieldDeclaration();
@@ -933,27 +864,25 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("annotationName")) {
-                               assertNotNull("DeclareAtFieldDeclaration's " + element.getId() + " property" +
-                                               " should not be null since it is lazily created",
-                                               d.getStructuralProperty(element));                              
+                               assertNotNull("DeclareAtFieldDeclaration's " + element.getId() + " property"
+                                               + " should not be null since it is lazily created", d.getStructuralProperty(element));
                        } else {
-                               assertNull("DeclareAtFieldDeclaration's " + element.getId() + " property" +
-                                               " should be null since we haven't set it yet",
-                                               d.getStructuralProperty(element));                              
+                               assertNull("DeclareAtFieldDeclaration's " + element.getId() + " property"
+                                               + " should be null since we haven't set it yet", d.getStructuralProperty(element));
                        }
                }
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("pattern")) {
                                SignaturePattern p = ajast.newSignaturePattern();
-                               d.setStructuralProperty(element,p);
-                               assertEquals("DeclareAtFieldDeclaration's pattern property should" +
-                                               " now be a SignaturePattern",p,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, p);
+                               assertEquals("DeclareAtFieldDeclaration's pattern property should" + " now be a SignaturePattern", p, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("annotationName")) {
                                SimpleName s = ajast.newSimpleName("MyAnnotation");
-                               d.setStructuralProperty(element,s);
-                               assertEquals("DeclareAtFieldDeclaration's annotationName property should" +
-                                               " now be a SimpleName",s,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, s);
+                               assertEquals("DeclareAtFieldDeclaration's annotationName property should" + " now be a SimpleName", s, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("javadoc")) {
                                // do nothing since makes no sense to have javadoc
                        } else {
@@ -967,18 +896,19 @@ public class AjASTTest extends AjASTTestCase {
        public void testNewDeclareAtMethodDeclaration() {
                AjAST ajast = createAjAST();
                DeclareAtMethodDeclaration d = ajast.newDeclareAtMethodDeclaration();
-               assertNotNull("should have created a DeclareAtMethodDeclaration",d);
+               assertNotNull("should have created a DeclareAtMethodDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclareAtMethod() {
                AjAST ajast = createAjAST();
-               DeclareAtMethodDeclaration d = ajast.newDeclareAtMethodDeclaration();
+               // DeclareAtMethodDeclaration d =
+               ajast.newDeclareAtMethodDeclaration();
                List props = DeclareAtMethodDeclaration.propertyDescriptors(AST.JLS3);
                boolean foundJavadoc = false;
                boolean foundPattern = false;
                boolean foundAnnotationName = false;
                for (Iterator iter = props.iterator(); iter.hasNext();) {
-                       ChildPropertyDescriptor element = (ChildPropertyDescriptor)iter.next();
+                       ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        String id = element.getId();
                        if (id.equals("javadoc")) {
                                foundJavadoc = true;
@@ -988,46 +918,43 @@ public class AjASTTest extends AjASTTestCase {
                                foundAnnotationName = true;
                        } else {
                                fail("unknown PropertyDescriptor associated with DeclareAtMethodDeclaration: " + element.getId());
-                       }                                               
+                       }
                }
-               assertTrue("DeclareAtMethodDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareAtMethodDeclaration should have a attern PropertyDescriptor",foundPattern);
-               assertTrue("DeclareAtMethodDeclaration should have a annotationName PropertyDescriptor",foundAnnotationName);
+               assertTrue("DeclareAtMethodDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareAtMethodDeclaration should have a attern PropertyDescriptor", foundPattern);
+               assertTrue("DeclareAtMethodDeclaration should have a annotationName PropertyDescriptor", foundAnnotationName);
        }
-       
+
        public void testGetAndSetPatternNodeInDeclareAtMethod() {
                AjAST ajast = createAjAST();
                DeclareAtMethodDeclaration d = ajast.newDeclareAtMethodDeclaration();
-               assertNull("by default there should be no typePattern associated with" +
-                               " the declare @method annotation",d.getPatternNode());
+               assertNull("by default there should be no typePattern associated with" + " the declare @method annotation", d
+                               .getPatternNode());
                SignaturePattern p = ajast.newSignaturePattern();
                d.setPatternNode(p);
-               assertEquals("there should now be a DefaultTypePattern associated with" +
-                               " the declare @method annotation",p,d.getPatternNode());
+               assertEquals("there should now be a DefaultTypePattern associated with" + " the declare @method annotation", p, d
+                               .getPatternNode());
        }
-       
+
        public void testGetAndSetAnnNameInDeclareAtMethod() {
                AjAST ajast = createAjAST();
                DeclareAtMethodDeclaration d = ajast.newDeclareAtMethodDeclaration();
-               assertEquals("the default annotation name should be MISSING",
-                               "MISSING",d.getAnnotationName().getFullyQualifiedName());
+               assertEquals("the default annotation name should be MISSING", "MISSING", d.getAnnotationName().getFullyQualifiedName());
                d.setAnnotationName(ajast.newSimpleName("MyAnnotation"));
-               assertEquals("the annotation name should now be set to 'MyAnnotation'",
-                               "MyAnnotation",d.getAnnotationName().getFullyQualifiedName());
+               assertEquals("the annotation name should now be set to 'MyAnnotation'", "MyAnnotation", d.getAnnotationName()
+                               .getFullyQualifiedName());
        }
-       
+
        public void testCloneDeclareAtMethod() {
                AjAST ajast = createAjAST();
                DeclareAtMethodDeclaration d = ajast.newDeclareAtMethodDeclaration();
                d.setPatternNode(ajast.newSignaturePattern());
                d.setAnnotationName(ajast.newSimpleName("MyAnnotation"));
-               DeclareAtMethodDeclaration copy = (DeclareAtMethodDeclaration)ASTNode.copySubtree(ajast,d);
-               assertNotNull("the DeclareAtMethodDeclaration clone should have a TypePattern set",
-                               copy.getPatternNode());
-               assertNotNull("the DeclareAtMethodDeclaration clone should have a Annotation name set",
-                               copy.getAnnotationName());
+               DeclareAtMethodDeclaration copy = (DeclareAtMethodDeclaration) ASTNode.copySubtree(ajast, d);
+               assertNotNull("the DeclareAtMethodDeclaration clone should have a TypePattern set", copy.getPatternNode());
+               assertNotNull("the DeclareAtMethodDeclaration clone should have a Annotation name set", copy.getAnnotationName());
        }
-       
+
        public void testInternalDeclareAtMethod() {
                AjAST ajast = createAjAST();
                DeclareAtMethodDeclaration d = ajast.newDeclareAtMethodDeclaration();
@@ -1035,27 +962,25 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("annotationName")) {
-                               assertNotNull("DeclareAtMethodDeclaration's " + element.getId() + " property" +
-                                               " should not be null since it is lazily created",
-                                               d.getStructuralProperty(element));                              
+                               assertNotNull("DeclareAtMethodDeclaration's " + element.getId() + " property"
+                                               + " should not be null since it is lazily created", d.getStructuralProperty(element));
                        } else {
-                               assertNull("DeclareAtMethodDeclaration's " + element.getId() + " property" +
-                                               " should be null since we haven't set it yet",
-                                               d.getStructuralProperty(element));                              
+                               assertNull("DeclareAtMethodDeclaration's " + element.getId() + " property"
+                                               + " should be null since we haven't set it yet", d.getStructuralProperty(element));
                        }
                }
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("pattern")) {
                                SignaturePattern p = ajast.newSignaturePattern();
-                               d.setStructuralProperty(element,p);
-                               assertEquals("DeclareAtMethodDeclaration's pattern property should" +
-                                               " now be a SignaturePattern",p,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, p);
+                               assertEquals("DeclareAtMethodDeclaration's pattern property should" + " now be a SignaturePattern", p, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("annotationName")) {
                                SimpleName s = ajast.newSimpleName("MyAnnotation");
-                               d.setStructuralProperty(element,s);
-                               assertEquals("DeclareAtMethodDeclaration's annotationName property should" +
-                                               " now be a SimpleName",s,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, s);
+                               assertEquals("DeclareAtMethodDeclaration's annotationName property should" + " now be a SimpleName", s, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("javadoc")) {
                                // do nothing since makes no sense to have javadoc
                        } else {
@@ -1063,24 +988,25 @@ public class AjASTTest extends AjASTTestCase {
                        }
                }
        }
-       
+
        // -------------- DeclareAtConstructorDeclaration tests ---------------
 
        public void testNewDeclareAtConstructorDeclaration() {
                AjAST ajast = createAjAST();
                DeclareAtConstructorDeclaration d = ajast.newDeclareAtConstructorDeclaration();
-               assertNotNull("should have created a DeclareAtConstructorDeclaration",d);
+               assertNotNull("should have created a DeclareAtConstructorDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclareAtConstructor() {
                AjAST ajast = createAjAST();
-               DeclareAtConstructorDeclaration d = ajast.newDeclareAtConstructorDeclaration();
+               // DeclareAtConstructorDeclaration d =
+               ajast.newDeclareAtConstructorDeclaration();
                List props = DeclareAtConstructorDeclaration.propertyDescriptors(AST.JLS3);
                boolean foundJavadoc = false;
                boolean foundPattern = false;
                boolean foundAnnotationName = false;
                for (Iterator iter = props.iterator(); iter.hasNext();) {
-                       ChildPropertyDescriptor element = (ChildPropertyDescriptor)iter.next();
+                       ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        String id = element.getId();
                        if (id.equals("javadoc")) {
                                foundJavadoc = true;
@@ -1090,46 +1016,43 @@ public class AjASTTest extends AjASTTestCase {
                                foundAnnotationName = true;
                        } else {
                                fail("unknown PropertyDescriptor associated with DeclareAtConstructorDeclaration: " + element.getId());
-                       }                                               
+                       }
                }
-               assertTrue("DeclareAtConstructorDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareAtConstructorDeclaration should have a attern PropertyDescriptor",foundPattern);
-               assertTrue("DeclareAtConstructorDeclaration should have a annotationName PropertyDescriptor",foundAnnotationName);
+               assertTrue("DeclareAtConstructorDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareAtConstructorDeclaration should have a attern PropertyDescriptor", foundPattern);
+               assertTrue("DeclareAtConstructorDeclaration should have a annotationName PropertyDescriptor", foundAnnotationName);
        }
-       
+
        public void testGetAndSetPatternNodeInDeclareAtConstructor() {
                AjAST ajast = createAjAST();
                DeclareAtConstructorDeclaration d = ajast.newDeclareAtConstructorDeclaration();
-               assertNull("by default there should be no typePattern associated with" +
-                               " the declare @constructor annotation",d.getPatternNode());
+               assertNull("by default there should be no typePattern associated with" + " the declare @constructor annotation", d
+                               .getPatternNode());
                SignaturePattern p = ajast.newSignaturePattern();
                d.setPatternNode(p);
-               assertEquals("there should now be a DefaultTypePattern associated with" +
-                               " the declare @constructor annotation",p,d.getPatternNode());
+               assertEquals("there should now be a DefaultTypePattern associated with" + " the declare @constructor annotation", p, d
+                               .getPatternNode());
        }
-       
+
        public void testGetAndSetAnnNameInDeclareAtConstructor() {
                AjAST ajast = createAjAST();
                DeclareAtConstructorDeclaration d = ajast.newDeclareAtConstructorDeclaration();
-               assertEquals("the default annotation name should be MISSING",
-                               "MISSING",d.getAnnotationName().getFullyQualifiedName());
+               assertEquals("the default annotation name should be MISSING", "MISSING", d.getAnnotationName().getFullyQualifiedName());
                d.setAnnotationName(ajast.newSimpleName("MyAnnotation"));
-               assertEquals("the annotation name should now be set to 'MyAnnotation'",
-                               "MyAnnotation",d.getAnnotationName().getFullyQualifiedName());
+               assertEquals("the annotation name should now be set to 'MyAnnotation'", "MyAnnotation", d.getAnnotationName()
+                               .getFullyQualifiedName());
        }
-       
+
        public void testCloneDeclareAtConstructor() {
                AjAST ajast = createAjAST();
                DeclareAtConstructorDeclaration d = ajast.newDeclareAtConstructorDeclaration();
                d.setPatternNode(ajast.newSignaturePattern());
                d.setAnnotationName(ajast.newSimpleName("MyAnnotation"));
-               DeclareAtConstructorDeclaration copy = (DeclareAtConstructorDeclaration)ASTNode.copySubtree(ajast,d);
-               assertNotNull("the DeclareAtConstructorDeclaration clone should have a SignaturePattern set",
-                               copy.getPatternNode());
-               assertNotNull("the DeclareAtConstructorDeclaration clone should have a Annotation name set",
-                               copy.getAnnotationName());
+               DeclareAtConstructorDeclaration copy = (DeclareAtConstructorDeclaration) ASTNode.copySubtree(ajast, d);
+               assertNotNull("the DeclareAtConstructorDeclaration clone should have a SignaturePattern set", copy.getPatternNode());
+               assertNotNull("the DeclareAtConstructorDeclaration clone should have a Annotation name set", copy.getAnnotationName());
        }
-       
+
        public void testInternalDeclareAtConstructor() {
                AjAST ajast = createAjAST();
                DeclareAtConstructorDeclaration d = ajast.newDeclareAtConstructorDeclaration();
@@ -1137,27 +1060,25 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("annotationName")) {
-                               assertNotNull("DeclareAtConstructorDeclaration's " + element.getId() + " property" +
-                                               " should not be null since it is lazily created",
-                                               d.getStructuralProperty(element));                              
+                               assertNotNull("DeclareAtConstructorDeclaration's " + element.getId() + " property"
+                                               + " should not be null since it is lazily created", d.getStructuralProperty(element));
                        } else {
-                               assertNull("DeclareAtConstructorDeclaration's " + element.getId() + " property" +
-                                               " should be null since we haven't set it yet",
-                                               d.getStructuralProperty(element));                              
+                               assertNull("DeclareAtConstructorDeclaration's " + element.getId() + " property"
+                                               + " should be null since we haven't set it yet", d.getStructuralProperty(element));
                        }
                }
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("pattern")) {
                                SignaturePattern p = ajast.newSignaturePattern();
-                               d.setStructuralProperty(element,p);
-                               assertEquals("DeclareAtConstructorDeclaration's pattern property should" +
-                                               " now be a SignaturePattern",p,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, p);
+                               assertEquals("DeclareAtConstructorDeclaration's pattern property should" + " now be a SignaturePattern", p, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("annotationName")) {
                                SimpleName s = ajast.newSimpleName("MyAnnotation");
-                               d.setStructuralProperty(element,s);
-                               assertEquals("DeclareAtConstructorDeclaration's annotationName property should" +
-                                               " now be a SimpleName",s,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, s);
+                               assertEquals("DeclareAtConstructorDeclaration's annotationName property should" + " now be a SimpleName", s, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("javadoc")) {
                                // do nothing since makes no sense to have javadoc
                        } else {
@@ -1165,15 +1086,15 @@ public class AjASTTest extends AjASTTestCase {
                        }
                }
        }
-       
+
        // -------------- DeclareAtTypeDeclaration tests ---------------
 
        public void testNewDeclareAtTypeDeclaration() {
                AjAST ajast = createAjAST();
                DeclareAtTypeDeclaration d = ajast.newDeclareAtTypeDeclaration();
-               assertNotNull("should have created a DeclareAtTypeDeclaration",d);
+               assertNotNull("should have created a DeclareAtTypeDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclareAtType() {
                AjAST ajast = createAjAST();
                DeclareAtTypeDeclaration d = ajast.newDeclareAtTypeDeclaration();
@@ -1182,7 +1103,7 @@ public class AjASTTest extends AjASTTestCase {
                boolean foundPattern = false;
                boolean foundAnnotationName = false;
                for (Iterator iter = props.iterator(); iter.hasNext();) {
-                       ChildPropertyDescriptor element = (ChildPropertyDescriptor)iter.next();
+                       ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        String id = element.getId();
                        if (id.equals("javadoc")) {
                                foundJavadoc = true;
@@ -1192,46 +1113,43 @@ public class AjASTTest extends AjASTTestCase {
                                foundAnnotationName = true;
                        } else {
                                fail("unknown PropertyDescriptor associated with DeclareAtTypeDeclaration: " + element.getId());
-                       }                                               
+                       }
                }
-               assertTrue("DeclareAtTypeDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareAtTypeDeclaration should have a attern PropertyDescriptor",foundPattern);
-               assertTrue("DeclareAtTypeDeclaration should have a annotationName PropertyDescriptor",foundAnnotationName);
+               assertTrue("DeclareAtTypeDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareAtTypeDeclaration should have a attern PropertyDescriptor", foundPattern);
+               assertTrue("DeclareAtTypeDeclaration should have a annotationName PropertyDescriptor", foundAnnotationName);
        }
-       
+
        public void testGetAndSetPatternNodeInDeclareAtType() {
                AjAST ajast = createAjAST();
                DeclareAtTypeDeclaration d = ajast.newDeclareAtTypeDeclaration();
-               assertNull("by default there should be no typePattern associated with" +
-                               " the declare @type annotation",d.getPatternNode());
+               assertNull("by default there should be no typePattern associated with" + " the declare @type annotation", d
+                               .getPatternNode());
                DefaultTypePattern dtp = ajast.newDefaultTypePattern();
                d.setPatternNode(dtp);
-               assertEquals("there should now be a DefaultTypePattern associated with" +
-                               " the declare @type annotation",dtp,d.getPatternNode());
+               assertEquals("there should now be a DefaultTypePattern associated with" + " the declare @type annotation", dtp, d
+                               .getPatternNode());
        }
-       
+
        public void testGetAndSetAnnNameInDeclareAtType() {
                AjAST ajast = createAjAST();
                DeclareAtTypeDeclaration d = ajast.newDeclareAtTypeDeclaration();
-               assertEquals("the default annotation name should be MISSING",
-                               "MISSING",d.getAnnotationName().getFullyQualifiedName());
+               assertEquals("the default annotation name should be MISSING", "MISSING", d.getAnnotationName().getFullyQualifiedName());
                d.setAnnotationName(ajast.newSimpleName("MyAnnotation"));
-               assertEquals("the annotation name should now be set to 'MyAnnotation'",
-                               "MyAnnotation",d.getAnnotationName().getFullyQualifiedName());
+               assertEquals("the annotation name should now be set to 'MyAnnotation'", "MyAnnotation", d.getAnnotationName()
+                               .getFullyQualifiedName());
        }
-       
+
        public void testCloneDeclareAtType() {
                AjAST ajast = createAjAST();
                DeclareAtTypeDeclaration d = ajast.newDeclareAtTypeDeclaration();
                d.setPatternNode(ajast.newDefaultTypePattern());
                d.setAnnotationName(ajast.newSimpleName("MyAnnotation"));
-               DeclareAtTypeDeclaration copy = (DeclareAtTypeDeclaration)ASTNode.copySubtree(ajast,d);
-               assertNotNull("the DeclareAtTypeDeclaration clone should have a TypePattern set",
-                               copy.getPatternNode());
-               assertNotNull("the DeclareAtTypeDeclaration clone should have a Annotation name set",
-                               copy.getAnnotationName());
+               DeclareAtTypeDeclaration copy = (DeclareAtTypeDeclaration) ASTNode.copySubtree(ajast, d);
+               assertNotNull("the DeclareAtTypeDeclaration clone should have a TypePattern set", copy.getPatternNode());
+               assertNotNull("the DeclareAtTypeDeclaration clone should have a Annotation name set", copy.getAnnotationName());
        }
-       
+
        public void testInternalDeclareAtType() {
                AjAST ajast = createAjAST();
                DeclareAtTypeDeclaration d = ajast.newDeclareAtTypeDeclaration();
@@ -1239,27 +1157,25 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("annotationName")) {
-                               assertNotNull("DeclareAtTypeDeclaration's " + element.getId() + " property" +
-                                               " should not be null since it is lazily created",
-                                               d.getStructuralProperty(element));                              
+                               assertNotNull("DeclareAtTypeDeclaration's " + element.getId() + " property"
+                                               + " should not be null since it is lazily created", d.getStructuralProperty(element));
                        } else {
-                               assertNull("DeclareAtTypeDeclaration's " + element.getId() + " property" +
-                                               " should be null since we haven't set it yet",
-                                               d.getStructuralProperty(element));                              
+                               assertNull("DeclareAtTypeDeclaration's " + element.getId() + " property"
+                                               + " should be null since we haven't set it yet", d.getStructuralProperty(element));
                        }
                }
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("pattern")) {
                                DefaultTypePattern p = ajast.newDefaultTypePattern();
-                               d.setStructuralProperty(element,p);
-                               assertEquals("DeclareAtTypeDeclaration's pattern property should" +
-                                               " now be a DefaultTypePattern",p,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, p);
+                               assertEquals("DeclareAtTypeDeclaration's pattern property should" + " now be a DefaultTypePattern", p, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("annotationName")) {
                                SimpleName s = ajast.newSimpleName("MyAnnotation");
-                               d.setStructuralProperty(element,s);
-                               assertEquals("DeclareAtTypeDeclaration's annotationName property should" +
-                                               " now be a SimpleName",s,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, s);
+                               assertEquals("DeclareAtTypeDeclaration's annotationName property should" + " now be a SimpleName", s, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("javadoc")) {
                                // do nothing since makes no sense to have javadoc
                        } else {
@@ -1267,15 +1183,15 @@ public class AjASTTest extends AjASTTestCase {
                        }
                }
        }
-       
+
        // -------------- DeclareErrorDeclaration tests ---------------
-       
+
        public void testNewDeclareErrorDeclaration() {
                AjAST ajast = createAjAST();
                DeclareErrorDeclaration d = ajast.newDeclareErrorDeclaration();
-               assertNotNull("should have created a DeclareErrorDeclaration",d);
+               assertNotNull("should have created a DeclareErrorDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclareErrorDeclaration() {
                AjAST ajast = createAjAST();
                DeclareErrorDeclaration d = ajast.newDeclareErrorDeclaration();
@@ -1296,67 +1212,60 @@ public class AjASTTest extends AjASTTestCase {
                                fail("unknown PropertyDescriptor associated with DeclareErrorDeclaration");
                        }
                }
-               assertTrue("DeclareErrorDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareErrorDeclaration should have a pointcut PropertyDescriptor",foundPointcut);
-               assertTrue("DeclareErrorDeclaration should have a message PropertyDescriptor",foundMessage);
+               assertTrue("DeclareErrorDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareErrorDeclaration should have a pointcut PropertyDescriptor", foundPointcut);
+               assertTrue("DeclareErrorDeclaration should have a message PropertyDescriptor", foundMessage);
        }
-       
+
        public void testGetAndSetPointcutInErrorDeclaration() {
                AjAST ajast = createAjAST();
                DeclareErrorDeclaration d = ajast.newDeclareErrorDeclaration();
-               assertNull("by default there should be no pointcut associated with" +
-                               " the declare error",d.getPointcut());
+               assertNull("by default there should be no pointcut associated with" + " the declare error", d.getPointcut());
                AndPointcut p = ajast.newAndPointcut();
                d.setPointcut(p);
-               assertEquals("there should now be an AndPointcut associated with" +
-                               " the declare error",p,d.getPointcut());
+               assertEquals("there should now be an AndPointcut associated with" + " the declare error", p, d.getPointcut());
        }
-       
+
        public void testGetAndSetMessageInErrorDeclaration() {
                AjAST ajast = createAjAST();
                DeclareErrorDeclaration d = ajast.newDeclareErrorDeclaration();
-               assertNull("by default there should be no message associated with" +
-                               " the declare error",d.getMessage());
+               assertNull("by default there should be no message associated with" + " the declare error", d.getMessage());
                StringLiteral s = ajast.newStringLiteral();
                d.setMessage(s);
-               assertEquals("there should now be a StringLiteral message associated with" +
-                               " the declare error",s,d.getMessage());
+               assertEquals("there should now be a StringLiteral message associated with" + " the declare error", s, d.getMessage());
        }
-       
+
        public void testCloneDeclareErrorDeclaration() {
                AjAST ajast = createAjAST();
                DeclareErrorDeclaration d = ajast.newDeclareErrorDeclaration();
                d.setPointcut(ajast.newAndPointcut());
                d.setMessage(ajast.newStringLiteral());
-               DeclareErrorDeclaration copy = (DeclareErrorDeclaration)ASTNode.copySubtree(ajast,d);
-               assertNotNull("the DeclareErrorDeclaration clone should have a pointcut set",
-                               copy.getPointcut());
-               assertNotNull("the DeclareErrorDeclaration clone should have a message set",
-                               copy.getMessage());
+               DeclareErrorDeclaration copy = (DeclareErrorDeclaration) ASTNode.copySubtree(ajast, d);
+               assertNotNull("the DeclareErrorDeclaration clone should have a pointcut set", copy.getPointcut());
+               assertNotNull("the DeclareErrorDeclaration clone should have a message set", copy.getMessage());
        }
-       
+
        public void testInternalDeclareErrorDeclaration() {
                AjAST ajast = createAjAST();
                DeclareErrorDeclaration d = ajast.newDeclareErrorDeclaration();
                List props = DeclareErrorDeclaration.propertyDescriptors(AST.JLS3);
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
-                       assertNull("DeclareErrorDeclaration's " + element.getId() + " property" +
-                                       "should be null since we haven't set it yet",
+                       assertNull("DeclareErrorDeclaration's " + element.getId() + " property" + "should be null since we haven't set it yet",
                                        d.getStructuralProperty(element));
                }
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("pointcut")) {
                                AndPointcut p = ajast.newAndPointcut();
-                               d.setStructuralProperty(element,p);
-                               assertEquals("DeclareErrorDeclaration's pointcut property should" +
-                                               " now be an AndPointcut",p,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, p);
+                               assertEquals("DeclareErrorDeclaration's pointcut property should" + " now be an AndPointcut", p, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("message")) {
                                StringLiteral s = ajast.newStringLiteral();
-                               d.setStructuralProperty(element,s);
-                               assertEquals("DeclareErrorDeclaration's message property should" +
-                                               " now be an AndPointcut",s,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, s);
+                               assertEquals("DeclareErrorDeclaration's message property should" + " now be an AndPointcut", s, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("javadoc")) {
                                // do nothing since makes no sense to have javadoc
                        } else {
@@ -1364,15 +1273,15 @@ public class AjASTTest extends AjASTTestCase {
                        }
                }
        }
-       
+
        // -------------- DeclareParentsDeclaration tests ---------------
 
        public void testNewDeclareParentsDeclaration() {
                AjAST ajast = createAjAST();
                DeclareParentsDeclaration d = ajast.newDeclareParentsDeclaration();
-               assertNotNull("should have created a DeclareParentsDeclaration",d);
+               assertNotNull("should have created a DeclareParentsDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclareParentsDeclaration() {
                AjAST ajast = createAjAST();
                DeclareParentsDeclaration d = ajast.newDeclareParentsDeclaration();
@@ -1384,7 +1293,7 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
                        if ((o instanceof ChildPropertyDescriptor)) {
-                               ChildPropertyDescriptor element = (ChildPropertyDescriptor)o;
+                               ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
                                String id = element.getId();
                                if (id.equals("javadoc")) {
                                        foundJavadoc = true;
@@ -1394,78 +1303,71 @@ public class AjASTTest extends AjASTTestCase {
                                        fail("unknown PropertyDescriptor associated with DeclareParentsDeclaration: " + element.getId());
                                }
                        } else if ((o instanceof ChildListPropertyDescriptor)
-                                       && ((ChildListPropertyDescriptor)o).getId().equals("typePatternsList")) {
-                               foundTypePatternList= true;
-                       } else if ((o instanceof SimplePropertyDescriptor)
-                                       && ((SimplePropertyDescriptor)o).getId().equals("isExtends")) {
+                                       && ((ChildListPropertyDescriptor) o).getId().equals("typePatternsList")) {
+                               foundTypePatternList = true;
+                       } else if ((o instanceof SimplePropertyDescriptor) && ((SimplePropertyDescriptor) o).getId().equals("isExtends")) {
                                foundIsExtends = true;
                        } else {
                                fail("unknown PropertyDescriptor associated with DeclareErrorDeclaration: " + o);
                        }
                }
-               assertTrue("DeclareParentsDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareParentsDeclaration should have a typePattern PropertyDescriptor",foundTypePattern);
-               assertTrue("DeclareParentsDeclaration should have an isExtends PropertyDescriptor",foundIsExtends);
-               assertTrue("DeclareParentsDeclaration should have a typePatternList PropertyDescriptor",foundTypePatternList);
+               assertTrue("DeclareParentsDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareParentsDeclaration should have a typePattern PropertyDescriptor", foundTypePattern);
+               assertTrue("DeclareParentsDeclaration should have an isExtends PropertyDescriptor", foundIsExtends);
+               assertTrue("DeclareParentsDeclaration should have a typePatternList PropertyDescriptor", foundTypePatternList);
        }
-       
+
        public void testGetAndSetTypePatternInDeclareParentsDeclaration() {
                AjAST ajast = createAjAST();
                DeclareParentsDeclaration d = ajast.newDeclareParentsDeclaration();
-               assertNull("by default there should be no TypePattern associated with" +
-                               " the declare parents",d.getChildTypePattern());
+               assertNull("by default there should be no TypePattern associated with" + " the declare parents", d.getChildTypePattern());
                DefaultTypePattern dtp = ajast.newDefaultTypePattern();
                d.setChildTypePattern(dtp);
-               assertEquals("there should now be a DefaultTypePattern associated with" +
-                               " the declare parents",dtp,d.getChildTypePattern());
+               assertEquals("there should now be a DefaultTypePattern associated with" + " the declare parents", dtp, d
+                               .getChildTypePattern());
        }
-       
+
        public void testGetAndSetIsExtendsInDeclareParentsDeclaration() {
                AjAST ajast = createAjAST();
                DeclareParentsDeclaration d = ajast.newDeclareParentsDeclaration();
-               assertFalse("by default the declare parents should not be 'extends'",d.isExtends());
+               assertFalse("by default the declare parents should not be 'extends'", d.isExtends());
                d.setExtends(true);
-               assertTrue("the declare parents should now be 'extends'",d.isExtends());
+               assertTrue("the declare parents should now be 'extends'", d.isExtends());
        }
-       
+
        public void testTypePatternsInDeclareParents() {
                AjAST ajast = createAjAST();
                DeclareParentsDeclaration d = ajast.newDeclareParentsDeclaration();
                List l = d.parentTypePatterns();
-               assertEquals("there shouldn't be any type patterns associated with" +
-                               "the declare parents yet",0,l.size());
+               assertEquals("there shouldn't be any type patterns associated with" + "the declare parents yet", 0, l.size());
                DefaultTypePattern dtp = ajast.newDefaultTypePattern();
                l.add(dtp);
-               assertEquals("there should be one type patterns associated with" +
-                               "the declare parents",1,l.size());
-               assertEquals("there should be a DefaultTypePattern associated with" +
-                               "the declare parents",dtp,l.get(0));
-       
+               assertEquals("there should be one type patterns associated with" + "the declare parents", 1, l.size());
+               assertEquals("there should be a DefaultTypePattern associated with" + "the declare parents", dtp, l.get(0));
+
        }
-       
+
        public void testCloneDeclareParentsDeclaration() {
                AjAST ajast = createAjAST();
                DeclareParentsDeclaration d = ajast.newDeclareParentsDeclaration();
                d.setChildTypePattern(ajast.newDefaultTypePattern());
                d.setExtends(true);
                d.parentTypePatterns().add(ajast.newDefaultTypePattern());
-               DeclareParentsDeclaration copy = (DeclareParentsDeclaration)ASTNode.copySubtree(ajast,d);
-               assertEquals("there should be one type patterns associated with" +
-                               "the declare parents copy",1,copy.parentTypePatterns().size());
-               assertNotNull("the DeclareParentsDeclaration clone should have a typePattern set",
-                               copy.getChildTypePattern());
-               assertTrue("the DeclareParentsDeclaration clone should be an 'extends'",
-                               copy.isExtends());
-       }
-       
+               DeclareParentsDeclaration copy = (DeclareParentsDeclaration) ASTNode.copySubtree(ajast, d);
+               assertEquals("there should be one type patterns associated with" + "the declare parents copy", 1, copy.parentTypePatterns()
+                               .size());
+               assertNotNull("the DeclareParentsDeclaration clone should have a typePattern set", copy.getChildTypePattern());
+               assertTrue("the DeclareParentsDeclaration clone should be an 'extends'", copy.isExtends());
+       }
+
        // -------------- DeclarePrecedenceDeclaration tests ---------------
 
        public void testNewDeclarePrecedenceDeclaration() {
                AjAST ajast = createAjAST();
                DeclarePrecedenceDeclaration d = ajast.newDeclarePrecedenceDeclaration();
-               assertNotNull("should have created a DeclarePrecedenceDeclaration",d);
+               assertNotNull("should have created a DeclarePrecedenceDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclarePrecedence() {
                AjAST ajast = createAjAST();
                DeclarePrecedenceDeclaration d = ajast.newDeclarePrecedenceDeclaration();
@@ -1474,44 +1376,40 @@ public class AjASTTest extends AjASTTestCase {
                boolean foundTypePatterns = false;
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
-                       if ((o instanceof ChildPropertyDescriptor)
-                                       && ((ChildPropertyDescriptor)o).getId().equals("javadoc")) {
+                       if ((o instanceof ChildPropertyDescriptor) && ((ChildPropertyDescriptor) o).getId().equals("javadoc")) {
                                foundJavadoc = true;
                        } else if ((o instanceof ChildListPropertyDescriptor)
-                                       && ((ChildListPropertyDescriptor)o).getId().equals("parentTypePatterns")) {
+                                       && ((ChildListPropertyDescriptor) o).getId().equals("parentTypePatterns")) {
                                foundTypePatterns = true;
                        } else {
                                fail("unknown PropertyDescriptor associated with DeclareErrorDeclaration: " + o);
                        }
                }
-               assertTrue("DeclareErrorDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareErrorDeclaration should have a pointcut PropertyDescriptor",foundTypePatterns);
+               assertTrue("DeclareErrorDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareErrorDeclaration should have a pointcut PropertyDescriptor", foundTypePatterns);
        }
-       
+
        public void testTypePatternsInDeclarePrecedence() {
                AjAST ajast = createAjAST();
                DeclarePrecedenceDeclaration d = ajast.newDeclarePrecedenceDeclaration();
                List l = d.typePatterns();
-               assertEquals("there shouldn't be any type patterns associated with" +
-                               "the declare precedence yet",0,l.size());
+               assertEquals("there shouldn't be any type patterns associated with" + "the declare precedence yet", 0, l.size());
                DefaultTypePattern dtp = ajast.newDefaultTypePattern();
                l.add(dtp);
-               assertEquals("there should be one type patterns associated with" +
-                               "the declare precedence",1,l.size());
-               assertEquals("there should be a DefaultTypePattern associated with" +
-                               "the declare precedence",dtp,l.get(0));
-       
+               assertEquals("there should be one type patterns associated with" + "the declare precedence", 1, l.size());
+               assertEquals("there should be a DefaultTypePattern associated with" + "the declare precedence", dtp, l.get(0));
+
        }
-       
+
        public void testCloneDeclarePrecedenceDeclaration() {
                AjAST ajast = createAjAST();
                DeclarePrecedenceDeclaration d = ajast.newDeclarePrecedenceDeclaration();
                d.typePatterns().add(ajast.newDefaultTypePattern());
-               DeclarePrecedenceDeclaration copy = (DeclarePrecedenceDeclaration)ASTNode.copySubtree(ajast,d);
-               assertEquals("there should be one type patterns associated with" +
-                               "the declare precedence copy",1,copy.typePatterns().size());
+               DeclarePrecedenceDeclaration copy = (DeclarePrecedenceDeclaration) ASTNode.copySubtree(ajast, d);
+               assertEquals("there should be one type patterns associated with" + "the declare precedence copy", 1, copy.typePatterns()
+                               .size());
        }
-       
+
        public void testInternalDeclarePrecedenceDeclaration() {
                AjAST ajast = createAjAST();
                DeclarePrecedenceDeclaration d = ajast.newDeclarePrecedenceDeclaration();
@@ -1519,32 +1417,28 @@ public class AjASTTest extends AjASTTestCase {
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        Object o = iter.next();
                        if (o instanceof ChildPropertyDescriptor) {
-                               ChildPropertyDescriptor element = (ChildPropertyDescriptor)o;
-                               assertNull("DeclareErrorDeclaration's " + element.getId() + " property" +
-                                               "should be null since we haven't set it yet",
-                                               d.getStructuralProperty(element));
+                               ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
+                               assertNull("DeclareErrorDeclaration's " + element.getId() + " property"
+                                               + "should be null since we haven't set it yet", d.getStructuralProperty(element));
                        } else if (o instanceof ChildListPropertyDescriptor) {
-                               ChildListPropertyDescriptor element = (ChildListPropertyDescriptor)o;
-                               assertNotNull("DeclareErrorDeclaration's " + element.getId() + " property" +
-                                               "should not be null since it is a list",
-                                               d.getStructuralProperty(element));
-                               assertEquals("should only be able to put TypePattern's into the list",
-                                               TypePattern.class,element.getElementType());
+                               ChildListPropertyDescriptor element = (ChildListPropertyDescriptor) o;
+                               assertNotNull("DeclareErrorDeclaration's " + element.getId() + " property"
+                                               + "should not be null since it is a list", d.getStructuralProperty(element));
+                               assertEquals("should only be able to put TypePattern's into the list", TypePattern.class, element.getElementType());
                        } else {
                                fail("unknown PropertyDescriptor associated with DeclareErrorDeclaration: " + o);
                        }
                }
        }
 
-       
        // -------------- DeclareSoftDeclaration tests ---------------
-       
+
        public void testNewDeclareSoftDeclaration() {
                AjAST ajast = createAjAST();
                DeclareSoftDeclaration d = ajast.newDeclareSoftDeclaration();
-               assertNotNull("should have created a DeclareSoftDeclaration",d);
+               assertNotNull("should have created a DeclareSoftDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclareSoftDeclaration() {
                AjAST ajast = createAjAST();
                DeclareSoftDeclaration d = ajast.newDeclareSoftDeclaration();
@@ -1562,71 +1456,63 @@ public class AjASTTest extends AjASTTestCase {
                        } else if (id.equals("typePattern")) {
                                foundTypePattern = true;
                        } else {
-                               fail("unknown PropertyDescriptor associated with " +
-                                               "DeclareSoftDeclaration: " + element.getId());
+                               fail("unknown PropertyDescriptor associated with " + "DeclareSoftDeclaration: " + element.getId());
                        }
                }
-               assertTrue("DeclareSoftDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareSoftDeclaration should have a pointcut PropertyDescriptor",foundPointcut);
-               assertTrue("DeclareSoftDeclaration should have a type PropertyDescriptor",foundTypePattern);
+               assertTrue("DeclareSoftDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareSoftDeclaration should have a pointcut PropertyDescriptor", foundPointcut);
+               assertTrue("DeclareSoftDeclaration should have a type PropertyDescriptor", foundTypePattern);
        }
-       
+
        public void testGetAndSetPointcutInSoftDeclaration() {
                AjAST ajast = createAjAST();
                DeclareSoftDeclaration d = ajast.newDeclareSoftDeclaration();
-               assertNull("by default there should be no pointcut associated with" +
-                               " the declare soft",d.getPointcut());
+               assertNull("by default there should be no pointcut associated with" + " the declare soft", d.getPointcut());
                AndPointcut p = ajast.newAndPointcut();
                d.setPointcut(p);
-               assertEquals("there should now be an AndPointcut associated with" +
-                               " the declare soft",p,d.getPointcut());
+               assertEquals("there should now be an AndPointcut associated with" + " the declare soft", p, d.getPointcut());
        }
-       
+
        public void testGetAndSetTypePatternInSoftDeclaration() {
                AjAST ajast = createAjAST();
                DeclareSoftDeclaration d = ajast.newDeclareSoftDeclaration();
-               assertNull("by default there should be no TypePattern associated with" +
-                               " the declare soft",d.getTypePattern());
+               assertNull("by default there should be no TypePattern associated with" + " the declare soft", d.getTypePattern());
                DefaultTypePattern dtp = ajast.newDefaultTypePattern();
                d.setTypePattern(dtp);
-               assertEquals("there should now be a DefaultTypePattern associated with" +
-                               " the declare soft",dtp,d.getTypePattern());
+               assertEquals("there should now be a DefaultTypePattern associated with" + " the declare soft", dtp, d.getTypePattern());
        }
-       
+
        public void testCloneDeclareSoftDeclaration() {
                AjAST ajast = createAjAST();
                DeclareSoftDeclaration d = ajast.newDeclareSoftDeclaration();
                d.setPointcut(ajast.newAndPointcut());
                d.setTypePattern(ajast.newDefaultTypePattern());
-               DeclareSoftDeclaration copy = (DeclareSoftDeclaration)ASTNode.copySubtree(ajast,d);
-               assertNotNull("the DeclareSoftDeclaration clone should have a pointcut set",
-                               copy.getPointcut());
-               assertNotNull("the DeclareSoftDeclaration clone should have a typePattern set",
-                               copy.getTypePattern());
+               DeclareSoftDeclaration copy = (DeclareSoftDeclaration) ASTNode.copySubtree(ajast, d);
+               assertNotNull("the DeclareSoftDeclaration clone should have a pointcut set", copy.getPointcut());
+               assertNotNull("the DeclareSoftDeclaration clone should have a typePattern set", copy.getTypePattern());
        }
-       
+
        public void testInternalDeclareSoftDeclaration() {
                AjAST ajast = createAjAST();
                DeclareSoftDeclaration d = ajast.newDeclareSoftDeclaration();
                List props = DeclareSoftDeclaration.propertyDescriptors(AST.JLS3);
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
-                       assertNull("DeclareSoftDeclaration's " + element.getId() + " property" +
-                                       "should be null since we haven't set it yet",
+                       assertNull("DeclareSoftDeclaration's " + element.getId() + " property" + "should be null since we haven't set it yet",
                                        d.getStructuralProperty(element));
                }
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("pointcut")) {
                                AndPointcut p = ajast.newAndPointcut();
-                               d.setStructuralProperty(element,p);
-                               assertEquals("DeclareSoftDeclaration's pointcut property should" +
-                                               " now be an AndPointcut",p,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, p);
+                               assertEquals("DeclareSoftDeclaration's pointcut property should" + " now be an AndPointcut", p, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("typePattern")) {
                                DefaultTypePattern dtp = ajast.newDefaultTypePattern();
-                               d.setStructuralProperty(element,dtp);
-                               assertEquals("DeclareSoftDeclaration's typePattern property should" +
-                                               " now be an DefaultTypePattern",dtp,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, dtp);
+                               assertEquals("DeclareSoftDeclaration's typePattern property should" + " now be an DefaultTypePattern", dtp, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("javadoc")) {
                                // do nothing since makes no sense to have javadoc
                        } else {
@@ -1634,15 +1520,15 @@ public class AjASTTest extends AjASTTestCase {
                        }
                }
        }
-       
+
        // -------------- DeclareWarningDeclaration tests ---------------
 
        public void testNewDeclareWarningDeclaration() {
                AjAST ajast = createAjAST();
                DeclareWarningDeclaration d = ajast.newDeclareWarningDeclaration();
-               assertNotNull("should have created a DeclareWarningDeclaration",d);
+               assertNotNull("should have created a DeclareWarningDeclaration", d);
        }
-       
+
        public void testPropertyDescriptorsForDeclareWarningDeclaration() {
                AjAST ajast = createAjAST();
                DeclareWarningDeclaration d = ajast.newDeclareWarningDeclaration();
@@ -1663,67 +1549,60 @@ public class AjASTTest extends AjASTTestCase {
                                fail("unknown PropertyDescriptor associated with DeclareWarningDeclaration");
                        }
                }
-               assertTrue("DeclareWarningDeclaration should have a javadoc PropertyDescriptor",foundJavadoc);
-               assertTrue("DeclareWarningDeclaration should have a pointcut PropertyDescriptor",foundPointcut);
-               assertTrue("DeclareWarningDeclaration should have a message PropertyDescriptor",foundMessage);
+               assertTrue("DeclareWarningDeclaration should have a javadoc PropertyDescriptor", foundJavadoc);
+               assertTrue("DeclareWarningDeclaration should have a pointcut PropertyDescriptor", foundPointcut);
+               assertTrue("DeclareWarningDeclaration should have a message PropertyDescriptor", foundMessage);
        }
-       
+
        public void testGetAndSetPointcutInWarningDeclaration() {
                AjAST ajast = createAjAST();
                DeclareWarningDeclaration d = ajast.newDeclareWarningDeclaration();
-               assertNull("by default there should be no pointcut associated with" +
-                               " the declare warning",d.getPointcut());
+               assertNull("by default there should be no pointcut associated with" + " the declare warning", d.getPointcut());
                AndPointcut p = ajast.newAndPointcut();
                d.setPointcut(p);
-               assertEquals("there should now be an AndPointcut associated with" +
-                               " the declare warning",p,d.getPointcut());
+               assertEquals("there should now be an AndPointcut associated with" + " the declare warning", p, d.getPointcut());
        }
-       
+
        public void testGetAndSetMessageInWarningDeclaration() {
                AjAST ajast = createAjAST();
                DeclareWarningDeclaration d = ajast.newDeclareWarningDeclaration();
-               assertNull("by default there should be no message associated with" +
-                               " the declare warning",d.getMessage());
+               assertNull("by default there should be no message associated with" + " the declare warning", d.getMessage());
                StringLiteral s = ajast.newStringLiteral();
                d.setMessage(s);
-               assertEquals("there should now be a StringLiteral message associated with" +
-                               " the declare warning",s,d.getMessage());
+               assertEquals("there should now be a StringLiteral message associated with" + " the declare warning", s, d.getMessage());
        }
-       
+
        public void testCloneDeclareWarningDeclaration() {
                AjAST ajast = createAjAST();
                DeclareWarningDeclaration d = ajast.newDeclareWarningDeclaration();
                d.setPointcut(ajast.newAndPointcut());
                d.setMessage(ajast.newStringLiteral());
-               DeclareWarningDeclaration copy = (DeclareWarningDeclaration)ASTNode.copySubtree(ajast,d);
-               assertNotNull("the DeclareWarningDeclaration clone should have a pointcut set",
-                               copy.getPointcut());
-               assertNotNull("the DeclareWarningDeclaration clone should have a message set",
-                               copy.getMessage());
+               DeclareWarningDeclaration copy = (DeclareWarningDeclaration) ASTNode.copySubtree(ajast, d);
+               assertNotNull("the DeclareWarningDeclaration clone should have a pointcut set", copy.getPointcut());
+               assertNotNull("the DeclareWarningDeclaration clone should have a message set", copy.getMessage());
        }
-       
+
        public void testInternalDeclareWarningDeclaration() {
                AjAST ajast = createAjAST();
                DeclareWarningDeclaration d = ajast.newDeclareWarningDeclaration();
                List props = DeclareWarningDeclaration.propertyDescriptors(AST.JLS3);
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
-                       assertNull("DeclareWarningDeclaration's " + element.getId() + " property" +
-                                       "should be null since we haven't set it yet",
-                                       d.getStructuralProperty(element));
+                       assertNull("DeclareWarningDeclaration's " + element.getId() + " property"
+                                       + "should be null since we haven't set it yet", d.getStructuralProperty(element));
                }
                for (Iterator iter = props.iterator(); iter.hasNext();) {
                        ChildPropertyDescriptor element = (ChildPropertyDescriptor) iter.next();
                        if (element.getId().equals("pointcut")) {
                                AndPointcut p = ajast.newAndPointcut();
-                               d.setStructuralProperty(element,p);
-                               assertEquals("DeclareWarningDeclaration's pointcut property should" +
-                                               " now be an AndPointcut",p,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, p);
+                               assertEquals("DeclareWarningDeclaration's pointcut property should" + " now be an AndPointcut", p, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("message")) {
                                StringLiteral s = ajast.newStringLiteral();
-                               d.setStructuralProperty(element,s);
-                               assertEquals("DeclareWarningDeclaration's message property should" +
-                                               " now be an AndPointcut",s,d.getStructuralProperty(element));
+                               d.setStructuralProperty(element, s);
+                               assertEquals("DeclareWarningDeclaration's message property should" + " now be an AndPointcut", s, d
+                                               .getStructuralProperty(element));
                        } else if (element.getId().equals("javadoc")) {
                                // do nothing since makes no sense to have javadoc
                        } else {
@@ -1731,78 +1610,76 @@ public class AjASTTest extends AjASTTestCase {
                        }
                }
        }
-       
+
        // --------- testing that the source ranges have been set correctly ---------
-       
-       public void testDeclareAnnotationType(){
-               checkJLS3("@interface MyAnnotation{}class C{}aspect A{declare @type: C : @MyAnnotation;}",
-                               43,33);
+
+       public void testDeclareAnnotationType() {
+               checkJLS3("@interface MyAnnotation{}class C{}aspect A{declare @type: C : @MyAnnotation;}", 43, 33);
        }
-       public void testDeclareAnnotationMethod(){
-               checkJLS3("@interface MyAnnotation{}class C{}aspect A{declare @method:public * C.*(..) : @MyAnnotation;}",
-                               43,49);
+
+       public void testDeclareAnnotationMethod() {
+               checkJLS3("@interface MyAnnotation{}class C{}aspect A{declare @method:public * C.*(..) : @MyAnnotation;}", 43, 49);
        }
-       public void testDeclareAnnotationField(){
-               checkJLS3("@interface MyAnnotation{}class C{}aspect A{declare @field: * C+.* : @MyAnnotation;}",
-                               43,39);
+
+       public void testDeclareAnnotationField() {
+               checkJLS3("@interface MyAnnotation{}class C{}aspect A{declare @field: * C+.* : @MyAnnotation;}", 43, 39);
        }
-       public void testDeclareAnnotationConstructor(){
-               checkJLS3("@interface MyAnnotation{}class C{}aspect A{declare @constructor: C+.new(..) : @MyAnnotation;}",
-                               43,49);
+
+       public void testDeclareAnnotationConstructor() {
+               checkJLS3("@interface MyAnnotation{}class C{}aspect A{declare @constructor: C+.new(..) : @MyAnnotation;}", 43, 49);
        }
-       public void testDeclareParents(){
-               checkJLS3("class A{}class B{}aspect C {declare parents : A extends B;}",
-                               28,29);
+
+       public void testDeclareParents() {
+               checkJLS3("class A{}class B{}aspect C {declare parents : A extends B;}", 28, 29);
        }
-       public void testDeclareWarning(){
-               checkJLS3("aspect A {pointcut a();declare warning: a(): \"error\";}",
-                               23,30);
+
+       public void testDeclareWarning() {
+               checkJLS3("aspect A {pointcut a();declare warning: a(): \"error\";}", 23, 30);
        }
-       public void testDeclareError(){
-               checkJLS3("aspect A {pointcut a();declare error: a(): \"error\";}",
-                               23,28);
+
+       public void testDeclareError() {
+               checkJLS3("aspect A {pointcut a();declare error: a(): \"error\";}", 23, 28);
        }
-       public void testDeclareSoft(){
-               checkJLS3("aspect A {pointcut a();declare soft: Exception+: a();}",
-                               23,29);
+
+       public void testDeclareSoft() {
+               checkJLS3("aspect A {pointcut a();declare soft: Exception+: a();}", 23, 29);
        }
-       public void testDeclarePrecedence(){
-               checkJLS3("aspect A{}aspect B{declare precedence: B,A;}",
-                               19,23);
+
+       public void testDeclarePrecedence() {
+               checkJLS3("aspect A{}aspect B{declare precedence: B,A;}", 19, 23);
        }
 
        // --------- tests for bugs ----------
-       
+
        public void testJavadocCommentForDeclareExists_pr150467() {
                ASTParser parser = ASTParser.newParser(AST.JLS3);
-           parser.setSource("aspect X {/** I have a doc comment */declare parents : Y implements Z;}".toCharArray());
-           parser.setCompilerOptions(Collections.EMPTY_MAP);
-           parser.setKind(ASTParser.K_COMPILATION_UNIT);
-           CompilationUnit cu = (CompilationUnit) parser.createAST(null);
-           Javadoc javadoc = ((DeclareParentsDeclaration) ((TypeDeclaration)
-                       cu.types().get(0)).bodyDeclarations().get(0)).getJavadoc();
-           assertNull("expected the doc comment node to be null but it wasn't",javadoc);
-           assertEquals("expected there to be one comment but found " +
-                       cu.getCommentList().size(),1,cu.getCommentList().size());
-       }
-               
+               parser.setSource("aspect X {/** I have a doc comment */declare parents : Y implements Z;}".toCharArray());
+               parser.setCompilerOptions(Collections.EMPTY_MAP);
+               parser.setKind(ASTParser.K_COMPILATION_UNIT);
+               CompilationUnit cu = (CompilationUnit) parser.createAST(null);
+               Javadoc javadoc = ((DeclareParentsDeclaration) ((TypeDeclaration) cu.types().get(0)).bodyDeclarations().get(0))
+                               .getJavadoc();
+               assertNull("expected the doc comment node to be null but it wasn't", javadoc);
+               assertEquals("expected there to be one comment but found " + cu.getCommentList().size(), 1, cu.getCommentList().size());
+       }
+
 }
 
 class SourceRangeVisitor extends AjASTVisitor {
-       
+
        boolean visitTheKids = true;
        boolean visitDocTags;
        int start, length;
-       
+
        SourceRangeVisitor() {
                this(false);
        }
-       
+
        SourceRangeVisitor(boolean visitDocTags) {
                super(visitDocTags);
                this.visitDocTags = visitDocTags;
        }
-       
+
        public boolean isVisitingChildren() {
                return visitTheKids;
        }
@@ -1810,55 +1687,63 @@ class SourceRangeVisitor extends AjASTVisitor {
        public void setVisitingChildren(boolean visitChildren) {
                visitTheKids = visitChildren;
        }
-       
+
        public int getStart() {
                return start;
        }
-       
+
        public int getLength() {
                return length;
        }
-       
+
        public boolean visit(DeclareAtTypeDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();
                return isVisitingChildren();
        }
+
        public boolean visit(DeclareAtMethodDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();
                return isVisitingChildren();
        }
+
        public boolean visit(DeclareAtConstructorDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();
                return isVisitingChildren();
        }
+
        public boolean visit(DeclareAtFieldDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();
                return isVisitingChildren();
        }
+
        public boolean visit(DeclareWarningDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();
                return isVisitingChildren();
        }
+
        public boolean visit(DeclareErrorDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();
                return isVisitingChildren();
        }
+
        public boolean visit(DeclareParentsDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();
                return isVisitingChildren();
        }
+
        public boolean visit(DeclarePrecedenceDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();
                return isVisitingChildren();
        }
+
        public boolean visit(DeclareSoftDeclaration node) {
                start = node.getStartPosition();
                length = node.getLength();