langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java
changeset 40604 92e423b99e98
parent 40602 50045337b3a1
child 40768 8b6a878d8773
equal deleted inserted replaced
40603:a890cefaa41b 40604:92e423b99e98
   117 
   117 
   118     /** Force a completion failure on this name
   118     /** Force a completion failure on this name
   119      */
   119      */
   120     final Name completionFailureName;
   120     final Name completionFailureName;
   121 
   121 
       
   122     /** Module specified with -Xmodule:
       
   123      */
       
   124     final Name moduleOverride;
       
   125 
   122     /** Access to files
   126     /** Access to files
   123      */
   127      */
   124     private final JavaFileManager fileManager;
   128     private final JavaFileManager fileManager;
   125 
   129 
   126     /** Dependency tracker
   130     /** Dependency tracker
   203 
   207 
   204         completionFailureName =
   208         completionFailureName =
   205             options.isSet("failcomplete")
   209             options.isSet("failcomplete")
   206             ? names.fromString(options.get("failcomplete"))
   210             ? names.fromString(options.get("failcomplete"))
   207             : null;
   211             : null;
       
   212 
       
   213         moduleOverride = options.isSet(Option.XMODULE) ? names.fromString(options.get(Option.XMODULE))
       
   214                                                 : null;
   208 
   215 
   209         // Temporary, until more info is available from the module system.
   216         // Temporary, until more info is available from the module system.
   210         boolean useCtProps;
   217         boolean useCtProps;
   211         JavaFileManager fm = context.get(JavaFileManager.class);
   218         JavaFileManager fm = context.get(JavaFileManager.class);
   212         if (fm instanceof JavacFileManager) {
   219         if (fm instanceof JavacFileManager) {
   518         msym.complete();
   525         msym.complete();
   519 
   526 
   520         if (msym == syms.noModule) {
   527         if (msym == syms.noModule) {
   521             preferCurrent = false;
   528             preferCurrent = false;
   522             if (userPathsFirst) {
   529             if (userPathsFirst) {
   523                 scanUserPaths(p, true);
   530                 scanUserPaths(p);
   524                 preferCurrent = true;
   531                 preferCurrent = true;
   525                 scanPlatformPath(p);
   532                 scanPlatformPath(p);
   526             } else {
   533             } else {
   527                 scanPlatformPath(p);
   534                 scanPlatformPath(p);
   528                 scanUserPaths(p, true);
   535                 scanUserPaths(p);
   529             }
   536             }
   530         } else if (msym.classLocation == StandardLocation.CLASS_PATH) {
   537         } else if (msym.classLocation == StandardLocation.CLASS_PATH) {
   531             scanUserPaths(p, msym.sourceLocation == StandardLocation.SOURCE_PATH);
   538             // assert p.modle.sourceLocation == StandardLocation.SOURCE_PATH);
       
   539             scanUserPaths(p);
   532         } else {
   540         } else {
   533             scanModulePaths(p, msym);
   541             scanModulePaths(p, msym);
   534         }
   542         }
   535     }
   543     }
   536 
   544 
   551         sourceKinds.remove(JavaFileObject.Kind.CLASS);
   559         sourceKinds.remove(JavaFileObject.Kind.CLASS);
   552         boolean wantSourceFiles = !sourceKinds.isEmpty();
   560         boolean wantSourceFiles = !sourceKinds.isEmpty();
   553 
   561 
   554         String packageName = p.fullname.toString();
   562         String packageName = p.fullname.toString();
   555 
   563 
       
   564         if (msym.name == moduleOverride) {
       
   565             if (wantClassFiles) {
       
   566                 fillIn(p, CLASS_PATH,
       
   567                        fileManager.list(CLASS_PATH,
       
   568                                         packageName,
       
   569                                         classKinds,
       
   570                                         false));
       
   571             }
       
   572             if (wantSourceFiles && fileManager.hasLocation(SOURCE_PATH)) {
       
   573                 fillIn(p, SOURCE_PATH,
       
   574                         fileManager.list(SOURCE_PATH,
       
   575                                         packageName,
       
   576                                         sourceKinds,
       
   577                                         false));
       
   578             }
       
   579         }
       
   580 
   556         Location classLocn = msym.classLocation;
   581         Location classLocn = msym.classLocation;
   557         Location sourceLocn = msym.sourceLocation;
   582         Location sourceLocn = msym.sourceLocation;
   558 
   583 
   559         if (wantClassFiles && (classLocn != null)) {
   584         if (wantClassFiles && (classLocn != null)) {
   560             fillIn(p, classLocn,
   585             fillIn(p, classLocn,
   573     }
   598     }
   574 
   599 
   575     /**
   600     /**
   576      * Scans class path and source path for files in given package.
   601      * Scans class path and source path for files in given package.
   577      */
   602      */
   578     private void scanUserPaths(PackageSymbol p, boolean includeSourcePath) throws IOException {
   603     private void scanUserPaths(PackageSymbol p) throws IOException {
   579         Set<JavaFileObject.Kind> kinds = getPackageFileKinds();
   604         Set<JavaFileObject.Kind> kinds = getPackageFileKinds();
   580 
   605 
   581         Set<JavaFileObject.Kind> classKinds = EnumSet.copyOf(kinds);
   606         Set<JavaFileObject.Kind> classKinds = EnumSet.copyOf(kinds);
   582         classKinds.remove(JavaFileObject.Kind.SOURCE);
   607         classKinds.remove(JavaFileObject.Kind.SOURCE);
   583         boolean wantClassFiles = !classKinds.isEmpty();
   608         boolean wantClassFiles = !classKinds.isEmpty();
   584 
   609 
   585         Set<JavaFileObject.Kind> sourceKinds = EnumSet.copyOf(kinds);
   610         Set<JavaFileObject.Kind> sourceKinds = EnumSet.copyOf(kinds);
   586         sourceKinds.remove(JavaFileObject.Kind.CLASS);
   611         sourceKinds.remove(JavaFileObject.Kind.CLASS);
   587         boolean wantSourceFiles = !sourceKinds.isEmpty();
   612         boolean wantSourceFiles = !sourceKinds.isEmpty();
   588 
   613 
   589         boolean haveSourcePath = includeSourcePath && fileManager.hasLocation(SOURCE_PATH);
   614         boolean haveSourcePath = fileManager.hasLocation(SOURCE_PATH);
   590 
   615 
   591         if (verbose && verbosePath) {
   616         if (verbose && verbosePath) {
   592             if (fileManager instanceof StandardJavaFileManager) {
   617             if (fileManager instanceof StandardJavaFileManager) {
   593                 StandardJavaFileManager fm = (StandardJavaFileManager)fileManager;
   618                 StandardJavaFileManager fm = (StandardJavaFileManager)fileManager;
   594                 if (haveSourcePath && wantSourceFiles) {
   619                 if (haveSourcePath && wantSourceFiles) {