]> source.dussan.org Git - aspectj.git/commitdiff
Part of fix for AJDT bug 72671
authoraclement <aclement>
Mon, 6 Sep 2004 15:13:46 +0000 (15:13 +0000)
committeraclement <aclement>
Mon, 6 Sep 2004 15:13:46 +0000 (15:13 +0000)
   Bootclasspath specification for compiling is not possible

ajde/src/org/aspectj/ajde/internal/CompilerAdapter.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildConfig.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/ajc/BuildArgParserTestCase.java

index 26cfe8894c775e00d0cbd85b2a14c63fae101f11..b1b761356c2becaf9a4e349c8af0494671d205a3 100644 (file)
@@ -495,7 +495,6 @@ public class CompilerAdapter {
      * <ul>
      * <li>New list entries are added if not duplicates in,
      *     for classpath, aspectpath, injars, inpath and sourceroots</li>
-     * <li>New bootclasspath entries are ignored XXX</li>
      * <li>Set only one new entry for output dir or output jar
      *     only if there is no output dir/jar entry in the config</li>
      * </ul>
@@ -505,7 +504,8 @@ public class CompilerAdapter {
         */
        private void configureProjectOptions( AjBuildConfig config, ProjectPropertiesAdapter properties ) {
         // XXX no error handling in copying project properties
-        String propcp = properties.getClasspath(); // XXX omitting bootclasspath...
+               // Handle regular classpath
+        String propcp = properties.getClasspath();
         if (!LangUtil.isEmpty(propcp)) {
             StringTokenizer st = new StringTokenizer(propcp, File.pathSeparator);
             List configClasspath = config.getClasspath();
@@ -524,7 +524,30 @@ public class CompilerAdapter {
                 Ajde.getDefault().logEvent("building with classpath: " + both);
             }
         }
-
+       
+        // Handle boot classpath
+        propcp = properties.getBootClasspath();
+        if (!LangUtil.isEmpty(propcp)) {
+            StringTokenizer st = new StringTokenizer(propcp, File.pathSeparator);
+            List configClasspath = config.getBootclasspath();
+            ArrayList toAdd = new ArrayList();
+            while (st.hasMoreTokens()) {
+                String entry = st.nextToken();
+                if (!configClasspath.contains(entry)) {
+                    toAdd.add(entry);
+                }
+            }
+            if (0 < toAdd.size()) {
+                ArrayList both = new ArrayList(configClasspath.size() + toAdd.size());
+                both.addAll(configClasspath);
+                both.addAll(toAdd);
+                config.setBootclasspath(both);
+                Ajde.getDefault().logEvent("building with boot classpath: " + both);
+            }
+        }
+       
+        
+        
         // set outputdir and outputjar only if both not set
         if ((null == config.getOutputDir() && (null == config.getOutputJar()))) {
             String outPath = properties.getOutputPath();
index c8888e8a5e83ba6ab4b07606fdefed922af80cef..37ed3dbd4b6a84e4dd77b834949c8c47a474ca2c 100644 (file)
@@ -177,6 +177,7 @@ public class BuildArgParser extends Main {
                        
                        if (setClasspath) {
                                buildConfig.setClasspath(getClasspath(parser));
+                               buildConfig.setBootclasspath(getBootclasspath(parser));
                        }
                        
                        if (incrementalMode 
@@ -284,6 +285,16 @@ public class BuildArgParser extends Main {
        }
 
     
+       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 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
@@ -292,11 +303,11 @@ public class BuildArgParser extends Main {
     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 (parser.bootclasspath == null) {
+//             addClasspath(System.getProperty("sun.boot.class.path", ""), ret);
+//     } else {  
+//             addClasspath(parser.bootclasspath, ret);
+//     }
 
                String extdirs = parser.extdirs;
                if (extdirs == null) {
index 34474602d56a7c58c69eb3fe48dac7954420a964..c798a7dcc2c5d1f294bfa03f16af2d67bf99ea90 100644 (file)
@@ -31,7 +31,7 @@ import org.aspectj.util.FileUtil;
  * All configuration information needed to run the AspectJ compiler.
  * Compiler options (as opposed to path information) are held in an AjCompilerOptions instance
  */
-public class AjBuildConfig { // XXX needs bootclasspath?
+public class AjBuildConfig {
        
        private boolean shouldProceed = true;
        
@@ -50,6 +50,7 @@ public class AjBuildConfig { // XXX needs bootclasspath?
        private Map/*String->File*/ sourcePathResources = new HashMap();
        private List/*File*/ aspectpath = new ArrayList();
        private List/*String*/ classpath = new ArrayList();
+       private List/*String*/ bootclasspath = new ArrayList();
        
        private File configFile;
        private String lintMode = AJLINT_DEFAULT;
@@ -137,7 +138,7 @@ public class AjBuildConfig { // XXX needs bootclasspath?
        }
 
        /**
-        * This includes all entries from -bootclasspath, -extdirs, -classpath, 
+        * This does not include -bootclasspath but includes -extdirs and -classpath
         */
        public List getClasspath() { // XXX setters don't respect javadoc contract...
                return classpath;
@@ -146,6 +147,14 @@ public class AjBuildConfig { // XXX needs bootclasspath?
        public void setClasspath(List classpath) {
                this.classpath = classpath;
        }
+       
+       public List getBootclasspath() {
+               return bootclasspath;
+       }
+       
+       public void setBootclasspath(List bootclasspath) {
+               this.bootclasspath = bootclasspath;
+       }
 
        public File getOutputJar() {
                return outputJar;
@@ -225,12 +234,12 @@ public class AjBuildConfig { // XXX needs bootclasspath?
     }
 
     /**
-     * @return List (String) classpath of injars, inpath, aspectpath 
-     *   entries, specified classpath (bootclasspath, extdirs, and 
-     *   classpath), and output dir or jar
+     * @return List (String) classpath of bootclasspath, injars, inpath, aspectpath 
+     *   entries, specified classpath (extdirs, and classpath), and output dir or jar
      */
     public List getFullClasspath() {
         List full = new ArrayList();
+        full.addAll(getBootclasspath()); // XXX Is it OK that boot classpath overrides inpath/injars/aspectpath?
         for (Iterator i = inJars.iterator(); i.hasNext(); ) {
             full.add(((File)i.next()).getAbsolutePath());
         }
@@ -238,7 +247,7 @@ public class AjBuildConfig { // XXX needs bootclasspath?
                full.add(((File)i.next()).getAbsolutePath());
         }
         for (Iterator i = aspectpath.iterator(); i.hasNext(); ) {
-            full.add(((File)i.next()).getAbsolutePath());
+            full.add(((File)i.next()).getAbsolutePath());        
         }
         full.addAll(getClasspath());
 //        if (null != outputDir) {
index 2161ee47e48662dda4d1adcd600a9d6c2fb654f9..6ff844760342acbd4a38f85b53a03f9c7e32548a 100644 (file)
@@ -485,7 +485,9 @@ public class AjBuildManager implements IOutputClassFileNameProvider,IBinarySourc
     
     /** init only on initial batch compile? no file-specific options */
        private void initBcelWorld(IMessageHandler handler) throws IOException {
-               bcelWorld = new BcelWorld(buildConfig.getClasspath(), handler, null);
+               List cp = buildConfig.getBootclasspath();
+               cp.addAll(buildConfig.getClasspath());
+               bcelWorld = new BcelWorld(cp, handler, null);
                bcelWorld.setXnoInline(buildConfig.isXnoInline());
                bcelWorld.setXlazyTjp(buildConfig.isXlazyTjp());
                bcelWeaver = new BcelWeaver(bcelWorld);
@@ -825,10 +827,10 @@ public class AjBuildManager implements IOutputClassFileNameProvider,IBinarySourc
        }
        
        String makeClasspathString() {
-               if (buildConfig == null || buildConfig.getClasspath() == null) return "";
+               if (buildConfig == null || buildConfig.getFullClasspath() == null) return "";
                StringBuffer buf = new StringBuffer();
                boolean first = true;
-               for (Iterator it = buildConfig.getClasspath().iterator(); it.hasNext(); ) {
+               for (Iterator it = buildConfig.getFullClasspath().iterator(); it.hasNext(); ) {
                        if (first) { first = false; }
                        else { buf.append(File.pathSeparator); }
                        buf.append(it.next().toString());
@@ -849,8 +851,8 @@ public class AjBuildManager implements IOutputClassFileNameProvider,IBinarySourc
                        return null;
                }
                
-               if (buildConfig == null || buildConfig.getClasspath() == null) return "no classpath specified";
-               for (Iterator it = buildConfig.getClasspath().iterator(); it.hasNext(); ) {
+               if (buildConfig == null || buildConfig.getFullClasspath() == null) return "no classpath specified";
+               for (Iterator it = buildConfig.getFullClasspath().iterator(); it.hasNext(); ) {
                        File p = new File( (String)it.next() );
                        if (p.isFile() && p.getName().equals("aspectjrt.jar")) {
 
index ed6eb66f669fa375d19156ef4856c0c7d2b721a9..252a13ab3cd05bf2c2709abc0962b76e0ff3b672 100644 (file)
@@ -112,7 +112,7 @@ public class BuildArgParserTestCase extends TestCase {
        public void testPathResolutionFromConfigArgs() {
                String FILE_PATH =   "@" + TEST_DIR + "configWithClasspathExtdirsBootCPArgs.lst";
                AjBuildConfig config = genBuildConfig(new String[] { FILE_PATH }, messageWriter);
-               List classpath = config.getClasspath();
+               List classpath = config.getFullClasspath();
                // should have three entries, resolved relative to location of .lst file
                assertEquals("Three entries in classpath",3,classpath.size());
                Iterator cpIter = classpath.iterator();
@@ -300,13 +300,13 @@ public class BuildArgParserTestCase extends TestCase {
                AjBuildConfig config = genBuildConfig(new String[] { 
                        "-bootclasspath", PATH }, 
                        messageWriter);         
-               assertTrue("Should find '" + PATH + "' contained in the first entry of '" + config.getClasspath().toString(),
-                               ((String)config.getClasspath().get(0)).indexOf(PATH) != -1); 
+               assertTrue("Should find '" + PATH + "' contained in the first entry of '" + config.getBootclasspath().toString(),
+                               ((String)config.getBootclasspath().get(0)).indexOf(PATH) != -1); 
 
                config = genBuildConfig(new String[] { 
                        }, 
                        messageWriter);         
-               assertTrue(config.getClasspath().toString(), !config.getClasspath().get(0).equals(PATH)); 
+               assertTrue(config.getBootclasspath().toString(), !config.getBootclasspath().get(0).equals(PATH)); 
        }
 
        public void testOutputJar() throws InvalidInputException {