]> source.dussan.org Git - aspectj.git/commitdiff
better handling of modules
authorAndy Clement <aclement@pivotal.io>
Wed, 14 Feb 2018 21:03:24 +0000 (13:03 -0800)
committerAndy Clement <aclement@pivotal.io>
Wed, 14 Feb 2018 21:03:24 +0000 (13:03 -0800)
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/src/org/aspectj/ajdt/internal/core/builder/AjState.java

index 0587c4462ba6fbe8344d7476b944083bc15034df..be8f54adb8f0c808376e31a069dec1d02bbfad08 100644 (file)
@@ -1,5 +1,5 @@
 /* *******************************************************************
- * Copyright (c) 2002 - 2014 Contributors
+ * Copyright (c) 2002 - 2018 Contributors
  * All rights reserved. 
  * This program and the accompanying materials are made available 
  * under the terms of the Eclipse Public License v1.0 
@@ -30,19 +30,10 @@ import java.util.StringTokenizer;
 
 import org.aspectj.ajdt.ajc.BuildArgParser;
 import org.aspectj.ajdt.internal.compiler.CompilationResultDestinationManager;
-import org.aspectj.org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy;
-import org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJar;
-import org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathJrt;
 import org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathLocation;
 import org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem;
-import org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main;
-import org.aspectj.org.eclipse.jdt.internal.compiler.batch.ModuleFinder;
 import org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem.Classpath;
-import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.IModule;
-import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
-import org.aspectj.org.eclipse.jdt.internal.compiler.parser.Parser;
-import org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemReporter;
 import org.aspectj.util.FileUtil;
 
 /**
@@ -102,6 +93,7 @@ public class AjBuildConfig implements CompilerConfigurationChangeFlags {
        private boolean incrementalMode;
        private File incrementalFile;
 
+       @Override
        public String toString() {
                StringBuffer sb = new StringBuffer();
                sb.append("BuildConfig[" + (configFile == null ? "null" : configFile.getAbsoluteFile().toString()) + "] #Files="
@@ -118,6 +110,7 @@ public class AjBuildConfig implements CompilerConfigurationChangeFlags {
                public File fromInPathDirectory;
                public File binSrc;
 
+               @Override
                public boolean equals(Object obj) {
                        if (obj != null && (obj instanceof BinarySourceFile)) {
                                BinarySourceFile other = (BinarySourceFile) obj;
@@ -126,6 +119,7 @@ public class AjBuildConfig implements CompilerConfigurationChangeFlags {
                        return false;
                }
 
+               @Override
                public int hashCode() {
                        return binSrc != null ? binSrc.hashCode() : 0;
                }
@@ -325,6 +319,7 @@ public class AjBuildConfig implements CompilerConfigurationChangeFlags {
                // remember all the class files in directories on the inpath
                binaryFiles = new ArrayList<BinarySourceFile>();
                FileFilter filter = new FileFilter() {
+                       @Override
                        public boolean accept(File pathname) {
                                return pathname.getPath().endsWith(".class");
                        }
@@ -927,7 +922,7 @@ public class AjBuildConfig implements CompilerConfigurationChangeFlags {
 
 
        // This is similar to the calculation done in Main.setPaths() but it isn't as sophisticated
-       // as that one (doesn't need to be) and it also considers the additional paths for an 
+       // as that one (doesn't need to be) and it also considers the additional paths for an
        // AspectJ project (aspectpath/inpath/injars)
        private void computeCheckedClasspath() {                
                // Follow what we do in getFullClasspath():
index b81e8ed4baea25f0fa0ba00e2e5c96e2b16a3aed..9752359181b462e56cabf138f8bce9c1c3480b21 100644 (file)
@@ -61,6 +61,7 @@ import org.aspectj.bridge.ILifecycleAware;
 import org.aspectj.bridge.IMessage;
 import org.aspectj.bridge.IMessageHandler;
 import org.aspectj.bridge.IProgressListener;
+import org.aspectj.bridge.ISourceLocation;
 import org.aspectj.bridge.Message;
 import org.aspectj.bridge.MessageUtil;
 import org.aspectj.bridge.SourceLocation;
@@ -78,6 +79,7 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.IProblemFactory;
 import org.aspectj.org.eclipse.jdt.internal.compiler.batch.ClasspathLocation;
 import org.aspectj.org.eclipse.jdt.internal.compiler.batch.CompilationUnit;
 import org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem;
+import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.IModule;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.INameEnvironment;
@@ -107,6 +109,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
        static final boolean FAIL_IF_RUNTIME_NOT_FOUND = false;
 
        private static final FileFilter binarySourceFilter = new FileFilter() {
+               @Override
                public boolean accept(File f) {
                        return f.getName().endsWith(".class");
                }
@@ -509,6 +512,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
                }
                // Get a list of all files (i.e. everything that isnt a directory)
                File[] files = FileUtil.listFiles(dir, new FileFilter() {
+                       @Override
                        public boolean accept(File f) {
                                boolean accept = !(f.isDirectory() || f.getName().endsWith(".class"));
                                return accept;
@@ -1046,7 +1050,9 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
                        for (int i = 0; i < cps.size(); i++) {
                                classpaths[i] = cps.get(i);
                        }
-                       environment = new StatefulNameEnvironment(getLibraryAccess(classpaths, filenames), state.getClassNameToFileMap(), state);
+                       FileSystem fileSystem = getLibraryAccess(classpaths, filenames);
+                       environment = new StatefulNameEnvironment(fileSystem, state.getClassNameToFileMap(), state);
+                       state.setFileSystem(fileSystem);
                        state.setNameEnvironment(environment);
                } else {
                        ((StatefulNameEnvironment) environment).update(state.getClassNameToFileMap(), state.deltaAddedClasses);
@@ -1064,6 +1070,33 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
                bMain.batchCompiler = compiler;
                bMain.initializeAnnotationProcessorManager();
                compiler.options.produceReferenceInfo = true; // TODO turn off when not needed
+               
+
+               if (bMain.compilerOptions.complianceLevel >= ClassFileConstants.JDK1_6
+                               && bMain.compilerOptions.processAnnotations) {
+                       // need this too?
+//                     if (bMain.checkVMVersion(ClassFileConstants.JDK1_6)) {
+//                             initializeAnnotationProcessorManager();
+//                             if (this.classNames != null) {
+//                                     this.batchCompiler.setBinaryTypes(processClassNames(this.batchCompiler.lookupEnvironment));
+//                             }
+//                     } else {
+//                             // report a warning
+//                             this.logger.logIncorrectVMVersionForAnnotationProcessing();
+//                     }
+                       if (bMain.checkVMVersion(ClassFileConstants.JDK9)) {
+                               try {
+                                       bMain.initRootModules(bMain.batchCompiler.lookupEnvironment, state.getFileSystem());
+                               } catch (IllegalArgumentException iae) {
+                                       ISourceLocation location = null;
+                                       if (buildConfig.getConfigFile() != null) {
+                                               location = new SourceLocation(buildConfig.getConfigFile(), 0);
+                                       }
+                                       IMessage m = new Message(iae.getMessage(), IMessage.ERROR, null, location);
+                                       handler.handleMessage(m);
+                               }
+                       }
+               }
 
                try {
                        compiler.compile(getCompilationUnits(filenames));
@@ -1090,6 +1123,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
         */
        public IIntermediateResultsRequestor getInterimResultRequestor() {
                return new IIntermediateResultsRequestor() {
+                       @Override
                        public void acceptResult(InterimCompilationResult result) {
                                if (progressListener != null) {
                                        compiledCount++;
@@ -1107,6 +1141,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
 
        public ICompilerRequestor getBatchRequestor() {
                return new ICompilerRequestor() {
+                       @Override
                        public void acceptResult(CompilationResult unitResult) {
                                // end of compile, must now write the results to the output destination
                                // this is either a jar file or a file in a directory
@@ -1351,6 +1386,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
                return "couldn't find aspectjrt.jar on classpath, checked: " + makeClasspathString(buildConfig);
        }
 
+       @Override
        public String toString() {
                StringBuffer buf = new StringBuffer();
                buf.append("AjBuildManager(");
@@ -1383,6 +1419,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
         *
         * @see org.aspectj.ajdt.internal.compiler.AjCompiler.IOutputClassFileNameProvider#getOutputClassFileName(char[])
         */
+       @Override
        public String getOutputClassFileName(char[] eclipseClassFileName, CompilationResult result) {
                String filename = new String(eclipseClassFileName);
                filename = filename.replace('/', File.separatorChar) + ".class";
@@ -1406,6 +1443,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
         *
         * @see org.eclipse.jdt.internal.compiler.ICompilerAdapterFactory#getAdapter(org.eclipse.jdt.internal.compiler.Compiler)
         */
+       @Override
        public ICompilerAdapter getAdapter(org.aspectj.org.eclipse.jdt.internal.compiler.Compiler forCompiler) {
                // complete compiler config and return a suitable adapter...
                populateCompilerOptionsFromLintSettings(forCompiler);
@@ -1460,6 +1498,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
         *
         * @see org.aspectj.ajdt.internal.compiler.IBinarySourceProvider#getBinarySourcesForThisWeave()
         */
+       @Override
        public Map<String, List<UnwovenClassFile>> getBinarySourcesForThisWeave() {
                return binarySourcesForTheNextCompile;
        }
@@ -1485,6 +1524,7 @@ public class AjBuildManager implements IOutputClassFileNameProvider, IBinarySour
 
        private static class AjBuildContexFormatter implements ContextFormatter {
 
+               @Override
                public String formatEntry(int phaseId, Object data) {
                        StringBuffer sb = new StringBuffer();
                        if (phaseId == CompilationAndWeavingContext.BATCH_BUILD) {
index 965e87732ddb58aaa67bea34254c049577189eda..8014e5ff7326310b80c9bafc27adf42ee8fd76e8 100644 (file)
@@ -35,7 +35,6 @@ import java.util.Set;
 
 import org.aspectj.ajdt.internal.compiler.CompilationResultDestinationManager;
 import org.aspectj.ajdt.internal.compiler.InterimCompilationResult;
-import org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment;
 import org.aspectj.ajdt.internal.core.builder.AjBuildConfig.BinarySourceFile;
 import org.aspectj.apache.bcel.classfile.ClassParser;
 import org.aspectj.asm.AsmManager;
@@ -44,6 +43,7 @@ import org.aspectj.bridge.Message;
 import org.aspectj.bridge.SourceLocation;
 import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
 import org.aspectj.org.eclipse.jdt.internal.compiler.CompilationResult;
+import org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem;
 import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
 import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
 import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
@@ -117,6 +117,7 @@ public class AjState implements CompilerConfigurationChangeFlags, TypeDelegateRe
 
        private final AjBuildManager buildManager;
        private INameEnvironment nameEnvironment;
+       private FileSystem fileSystem;
 
        // now follows normal state that must be written out
 
@@ -663,6 +664,7 @@ public class AjState implements CompilerConfigurationChangeFlags, TypeDelegateRe
                        }
                }
 
+               @Override
                public Object get(Object key) {
                        SoftReferenceKnownKey value = (SoftReferenceKnownKey) map.get(key);
                        if (value == null) {
@@ -677,25 +679,30 @@ public class AjState implements CompilerConfigurationChangeFlags, TypeDelegateRe
                        }
                }
 
+               @Override
                public Object put(Object k, Object v) {
                        processQueue();
                        return map.put(k, new SoftReferenceKnownKey(k, v));
                }
 
+               @Override
                public Set entrySet() {
                        return map.entrySet();
                }
 
+               @Override
                public void clear() {
                        processQueue();
                        map.clear();
                }
 
+               @Override
                public int size() {
                        processQueue();
                        return map.size();
                }
 
+               @Override
                public Object remove(Object k) {
                        processQueue();
                        SoftReferenceKnownKey value = (SoftReferenceKnownKey) map.remove(k);
@@ -797,6 +804,7 @@ public class AjState implements CompilerConfigurationChangeFlags, TypeDelegateRe
        // return null;
        // }
 
+       @Override
        public String toString() {
                StringBuffer sb = new StringBuffer();
                // null config means failed build i think as it is only set on successful full build?
@@ -2445,6 +2453,7 @@ public class AjState implements CompilerConfigurationChangeFlags, TypeDelegateRe
                        this.locationOnDisk = location;
                }
 
+               @Override
                public String toString() {
                        StringBuilder s = new StringBuilder();
                        s.append("ClassFile(type=").append(fullyQualifiedTypeName).append(",location=").append(locationOnDisk).append(")");
@@ -2458,6 +2467,7 @@ public class AjState implements CompilerConfigurationChangeFlags, TypeDelegateRe
                        File dir = locationOnDisk.getParentFile();
                        if (dir != null) {
                                File[] weaverGenerated = dir.listFiles(new FilenameFilter() {
+                                       @Override
                                        public boolean accept(File dir, String name) {
                                                return name.startsWith(targetPrefix);
                                        }
@@ -2518,6 +2528,14 @@ public class AjState implements CompilerConfigurationChangeFlags, TypeDelegateRe
                this.nameEnvironment = nameEnvironment;
        }
 
+       public FileSystem getFileSystem() {
+               return this.fileSystem;
+       }
+
+       public void setFileSystem(FileSystem fileSystem) {
+               this.fileSystem = fileSystem;
+       }
+       
        /**
         * Record an aspect that came in on the aspect path. When a .class file changes on the aspect path we can then recognize it as
         * an aspect and know to do more than just a tiny incremental build. <br>
@@ -2540,6 +2558,7 @@ public class AjState implements CompilerConfigurationChangeFlags, TypeDelegateRe
        /**
         * See if we can create a delegate from a CompactTypeStructure - TODO better comment
         */
+       @Override
        public ReferenceTypeDelegate getDelegate(ReferenceType referenceType) {
                File f = classesFromName.get(referenceType.getName());
                if (f == null) {