60 import java.util.Map;
61 import java.util.Objects;
62 import java.util.NoSuchElementException;
63 import java.util.Set;
64 import java.util.function.Predicate;
65 import java.util.regex.Matcher;
66 import java.util.regex.Pattern;
67 import java.util.stream.Collectors;
68 import java.util.stream.Stream;
69 import java.util.jar.Attributes;
70 import java.util.jar.Manifest;
71
72 import javax.lang.model.SourceVersion;
73 import javax.tools.JavaFileManager;
74 import javax.tools.JavaFileManager.Location;
75 import javax.tools.JavaFileObject;
76 import javax.tools.StandardJavaFileManager;
77 import javax.tools.StandardJavaFileManager.PathFactory;
78 import javax.tools.StandardLocation;
79
80 import com.sun.tools.javac.code.Lint;
81 import com.sun.tools.javac.code.Lint.LintCategory;
82 import com.sun.tools.javac.main.Option;
83 import com.sun.tools.javac.resources.CompilerProperties.Errors;
84 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
85 import com.sun.tools.javac.util.DefinedBy;
86 import com.sun.tools.javac.util.DefinedBy.Api;
87 import com.sun.tools.javac.util.JDK9Wrappers;
88 import com.sun.tools.javac.util.ListBuffer;
89 import com.sun.tools.javac.util.Log;
90 import com.sun.tools.javac.jvm.ModuleNameReader;
91 import com.sun.tools.javac.util.Iterators;
92 import com.sun.tools.javac.util.Pair;
93 import com.sun.tools.javac.util.StringUtils;
94
95 import static javax.tools.StandardLocation.PLATFORM_CLASS_PATH;
96
97 import static com.sun.tools.javac.main.Option.BOOT_CLASS_PATH;
98 import static com.sun.tools.javac.main.Option.DJAVA_ENDORSED_DIRS;
99 import static com.sun.tools.javac.main.Option.DJAVA_EXT_DIRS;
100 import static com.sun.tools.javac.main.Option.ENDORSEDDIRS;
101 import static com.sun.tools.javac.main.Option.EXTDIRS;
102 import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH;
103 import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH_APPEND;
104 import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH_PREPEND;
105
106 /**
107 * This class converts command line arguments, environment variables and system properties (in
1434 }
1435
1436 // finally clean up the module name
1437 mn = mn.replaceAll("[^A-Za-z0-9]", ".") // replace non-alphanumeric
1438 .replaceAll("(\\.)(\\1)+", ".") // collapse repeating dots
1439 .replaceAll("^\\.", "") // drop leading dots
1440 .replaceAll("\\.$", ""); // drop trailing dots
1441
1442
1443 if (!mn.isEmpty()) {
1444 return new Pair<>(mn, p);
1445 }
1446
1447 log.error(Errors.LocnCantGetModuleNameForJar(p));
1448 return null;
1449 }
1450
1451 if (p.getFileName().toString().endsWith(".jmod")) {
1452 try {
1453 // check if the JMOD file is valid
1454 JDK9Wrappers.JmodFile.checkMagic(p);
1455
1456 // No JMOD file system. Use JarFileSystem to
1457 // workaround for now
1458 FileSystem fs = fileSystems.get(p);
1459 if (fs == null) {
1460 FileSystemProvider jarFSProvider = fsInfo.getJarFSProvider();
1461 if (jarFSProvider == null) {
1462 log.error(Errors.LocnCantReadFile(p));
1463 return null;
1464 }
1465 fs = jarFSProvider.newFileSystem(p, Collections.emptyMap());
1466 try {
1467 Path moduleInfoClass = fs.getPath("classes/module-info.class");
1468 String moduleName = readModuleName(moduleInfoClass);
1469 Path modulePath = fs.getPath("classes");
1470 fileSystems.put(p, fs);
1471 closeables.add(fs);
1472 fs = null; // prevent fs being closed in the finally clause
1473 return new Pair<>(moduleName, modulePath);
1474 } finally {
|
60 import java.util.Map;
61 import java.util.Objects;
62 import java.util.NoSuchElementException;
63 import java.util.Set;
64 import java.util.function.Predicate;
65 import java.util.regex.Matcher;
66 import java.util.regex.Pattern;
67 import java.util.stream.Collectors;
68 import java.util.stream.Stream;
69 import java.util.jar.Attributes;
70 import java.util.jar.Manifest;
71
72 import javax.lang.model.SourceVersion;
73 import javax.tools.JavaFileManager;
74 import javax.tools.JavaFileManager.Location;
75 import javax.tools.JavaFileObject;
76 import javax.tools.StandardJavaFileManager;
77 import javax.tools.StandardJavaFileManager.PathFactory;
78 import javax.tools.StandardLocation;
79
80 import jdk.internal.jmod.JmodFile;
81
82 import com.sun.tools.javac.code.Lint;
83 import com.sun.tools.javac.code.Lint.LintCategory;
84 import com.sun.tools.javac.main.Option;
85 import com.sun.tools.javac.resources.CompilerProperties.Errors;
86 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
87 import com.sun.tools.javac.util.DefinedBy;
88 import com.sun.tools.javac.util.DefinedBy.Api;
89 import com.sun.tools.javac.util.ListBuffer;
90 import com.sun.tools.javac.util.Log;
91 import com.sun.tools.javac.jvm.ModuleNameReader;
92 import com.sun.tools.javac.util.Iterators;
93 import com.sun.tools.javac.util.Pair;
94 import com.sun.tools.javac.util.StringUtils;
95
96 import static javax.tools.StandardLocation.PLATFORM_CLASS_PATH;
97
98 import static com.sun.tools.javac.main.Option.BOOT_CLASS_PATH;
99 import static com.sun.tools.javac.main.Option.DJAVA_ENDORSED_DIRS;
100 import static com.sun.tools.javac.main.Option.DJAVA_EXT_DIRS;
101 import static com.sun.tools.javac.main.Option.ENDORSEDDIRS;
102 import static com.sun.tools.javac.main.Option.EXTDIRS;
103 import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH;
104 import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH_APPEND;
105 import static com.sun.tools.javac.main.Option.XBOOTCLASSPATH_PREPEND;
106
107 /**
108 * This class converts command line arguments, environment variables and system properties (in
1435 }
1436
1437 // finally clean up the module name
1438 mn = mn.replaceAll("[^A-Za-z0-9]", ".") // replace non-alphanumeric
1439 .replaceAll("(\\.)(\\1)+", ".") // collapse repeating dots
1440 .replaceAll("^\\.", "") // drop leading dots
1441 .replaceAll("\\.$", ""); // drop trailing dots
1442
1443
1444 if (!mn.isEmpty()) {
1445 return new Pair<>(mn, p);
1446 }
1447
1448 log.error(Errors.LocnCantGetModuleNameForJar(p));
1449 return null;
1450 }
1451
1452 if (p.getFileName().toString().endsWith(".jmod")) {
1453 try {
1454 // check if the JMOD file is valid
1455 JmodFile.checkMagic(p);
1456
1457 // No JMOD file system. Use JarFileSystem to
1458 // workaround for now
1459 FileSystem fs = fileSystems.get(p);
1460 if (fs == null) {
1461 FileSystemProvider jarFSProvider = fsInfo.getJarFSProvider();
1462 if (jarFSProvider == null) {
1463 log.error(Errors.LocnCantReadFile(p));
1464 return null;
1465 }
1466 fs = jarFSProvider.newFileSystem(p, Collections.emptyMap());
1467 try {
1468 Path moduleInfoClass = fs.getPath("classes/module-info.class");
1469 String moduleName = readModuleName(moduleInfoClass);
1470 Path modulePath = fs.getPath("classes");
1471 fileSystems.put(p, fs);
1472 closeables.add(fs);
1473 fs = null; // prevent fs being closed in the finally clause
1474 return new Pair<>(moduleName, modulePath);
1475 } finally {
|