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) { |