8165102: incorrect message from javac
Reviewed-by: vromero
This commit is contained in:
parent
f54232896c
commit
16d379dad4
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -374,6 +374,9 @@ public class Modules extends JCTree.Visitor {
|
||||
log.error(decl.qualId, Errors.ModuleNameMismatch(msym.name, name));
|
||||
}
|
||||
} else {
|
||||
if (tree.getPackage() == null) {
|
||||
log.error(tree.pos(), Errors.UnnamedPkgNotAllowedNamedModules);
|
||||
}
|
||||
msym = syms.enterModule(name);
|
||||
}
|
||||
if (msym.sourceLocation == null) {
|
||||
@ -388,7 +391,11 @@ public class Modules extends JCTree.Visitor {
|
||||
} else if (c != null && c.packge().modle == syms.unnamedModule) {
|
||||
tree.modle = syms.unnamedModule;
|
||||
} else {
|
||||
log.error(tree.pos(), Errors.UnnamedPkgNotAllowedNamedModules);
|
||||
if (tree.getModuleDecl() != null) {
|
||||
log.error(tree.pos(), Errors.ModuleNotFoundOnModuleSourcePath);
|
||||
} else {
|
||||
log.error(tree.pos(), Errors.NotInModuleOnModuleSourcePath);
|
||||
}
|
||||
tree.modle = syms.errModule;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@ -457,19 +464,27 @@ public class Modules extends JCTree.Visitor {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the location for the module on the module source path
|
||||
* or source output directory which contains a given CompilationUnit.
|
||||
* If the source output directory is unset, the class output directory
|
||||
* will be checked instead.
|
||||
* {@code null} is returned if no such module can be found.
|
||||
* @param tree the compilation unit tree
|
||||
* @return the location for the enclosing module
|
||||
* @throws IOException if there is a problem while searching for the module.
|
||||
*/
|
||||
private Location getModuleLocation(JCCompilationUnit tree) throws IOException {
|
||||
Name pkgName;
|
||||
if (tree.getModuleDecl() != null) {
|
||||
return getModuleLocation(tree.sourcefile, null);
|
||||
} else if (tree.getPackage() != null) {
|
||||
JCPackageDecl pkg = tree.getPackage();
|
||||
return getModuleLocation(tree.sourcefile, TreeInfo.fullName(pkg.pid));
|
||||
pkgName = null;
|
||||
} else {
|
||||
// code in unnamed module
|
||||
return null;
|
||||
JCPackageDecl pkg = tree.getPackage();
|
||||
pkgName = (pkg == null) ? names.empty : TreeInfo.fullName(pkg.pid);
|
||||
}
|
||||
}
|
||||
|
||||
private Location getModuleLocation(JavaFileObject fo, Name pkgName) throws IOException {
|
||||
JavaFileObject fo = tree.sourcefile;
|
||||
|
||||
// For now, just check module source path.
|
||||
// We may want to check source path as well.
|
||||
Location loc =
|
||||
@ -482,7 +497,6 @@ public class Modules extends JCTree.Visitor {
|
||||
fileManager.getLocationForModule(sourceOutput,
|
||||
fo, (pkgName == null) ? null : pkgName.toString());
|
||||
}
|
||||
|
||||
return loc;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -553,7 +553,7 @@ public class Locations {
|
||||
|
||||
@Override
|
||||
Location getLocationForModule(Path dir) {
|
||||
return pathLocations.get(dir);
|
||||
return (pathLocations == null) ? null : pathLocations.get(dir);
|
||||
}
|
||||
|
||||
private boolean listed;
|
||||
|
@ -2845,6 +2845,12 @@ compiler.warn.module.not.found=\
|
||||
compiler.err.too.many.modules=\
|
||||
too many module declarations found
|
||||
|
||||
compiler.err.module.not.found.on.module.source.path=\
|
||||
module not found on module source path
|
||||
|
||||
compiler.err.not.in.module.on.module.source.path=\
|
||||
not in a module on the module source path
|
||||
|
||||
# 0: symbol
|
||||
compiler.err.duplicate.module=\
|
||||
duplicate module: {0}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -66,6 +66,7 @@ class Example implements Comparable<Example> {
|
||||
modulePathFiles = new ArrayList<File>();
|
||||
classPathFiles = new ArrayList<File>();
|
||||
additionalFiles = new ArrayList<File>();
|
||||
nonEmptySrcFiles = new ArrayList<File>();
|
||||
|
||||
findFiles(file, srcFiles);
|
||||
for (File f: srcFiles) {
|
||||
@ -99,11 +100,11 @@ class Example implements Comparable<Example> {
|
||||
}
|
||||
}
|
||||
} else if (f.isFile()) {
|
||||
if (f.getName().endsWith(".java")) {
|
||||
files.add(f);
|
||||
} else if (f.getName().equals("modulesourcepath")) {
|
||||
moduleSourcePathDir = f;
|
||||
}
|
||||
if (f.getName().endsWith(".java")) {
|
||||
files.add(f);
|
||||
} else if (f.getName().equals("modulesourcepath")) {
|
||||
moduleSourcePathDir = f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,8 +133,10 @@ class Example implements Comparable<Example> {
|
||||
foundInfo(f);
|
||||
runOpts = Arrays.asList(runMatch.group(1).trim().split(" +"));
|
||||
}
|
||||
if (javaPat.matcher(line).matches())
|
||||
if (javaPat.matcher(line).matches()) {
|
||||
nonEmptySrcFiles.add(f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new Error(e);
|
||||
@ -264,7 +267,9 @@ class Example implements Comparable<Example> {
|
||||
if (moduleSourcePathDir != null) {
|
||||
opts.add("--module-source-path");
|
||||
opts.add(moduleSourcePathDir.getPath());
|
||||
files = moduleSourcePathFiles;
|
||||
files = new ArrayList<>();
|
||||
files.addAll(moduleSourcePathFiles);
|
||||
files.addAll(nonEmptySrcFiles); // srcFiles containing declarations
|
||||
}
|
||||
|
||||
if (additionalFiles.size() > 0) {
|
||||
@ -344,6 +349,7 @@ class Example implements Comparable<Example> {
|
||||
List<File> modulePathFiles;
|
||||
List<File> classPathFiles;
|
||||
List<File> additionalFiles;
|
||||
List<File> nonEmptySrcFiles;
|
||||
File infoFile;
|
||||
private List<String> runOpts;
|
||||
private List<String> options;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,5 +24,3 @@
|
||||
// key: compiler.warn.dir.path.element.not.directory
|
||||
// options: -Xlint:path
|
||||
// run: simple
|
||||
|
||||
class DirPathElementNotDirectory { }
|
||||
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
// key: compiler.err.module.not.found.on.module.source.path
|
||||
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
module m { }
|
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
// key: compiler.err.not.in.module.on.module.source.path
|
||||
|
||||
package p; class C { }
|
||||
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
module m { }
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -22,5 +22,3 @@
|
||||
*/
|
||||
|
||||
// key: compiler.err.unnamed.pkg.not.allowed.named.modules
|
||||
|
||||
class UnnamedPackageInNamedModule {}
|
||||
|
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @test 8165102
|
||||
* @summary incorrect message from javac
|
||||
* @library /tools/lib
|
||||
* @modules
|
||||
* jdk.compiler/com.sun.tools.javac.api
|
||||
* jdk.compiler/com.sun.tools.javac.main
|
||||
* @build toolbox.ToolBox toolbox.JavacTask ModuleTestBase
|
||||
* @run main ModulesAndModuleSourcePathTest
|
||||
*/
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import toolbox.JavacTask;
|
||||
import toolbox.Task;
|
||||
import toolbox.ToolBox;
|
||||
|
||||
public class ModulesAndModuleSourcePathTest extends ModuleTestBase {
|
||||
public static void main(String... args) throws Exception {
|
||||
ModulesAndModuleSourcePathTest t = new ModulesAndModuleSourcePathTest();
|
||||
t.runTests();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testModuleNotInModuleSrcPath(Path base) throws Exception {
|
||||
Path src = base.resolve("src");
|
||||
Path m = src.resolve("m");
|
||||
Path extra = m.resolve("extra");
|
||||
tb.writeJavaFiles(extra, "module m {}");
|
||||
Path classes = base.resolve("classes");
|
||||
Files.createDirectories(classes);
|
||||
|
||||
String log = new JavacTask(tb)
|
||||
.options("-XDrawDiagnostics", "--module-source-path", src.toString())
|
||||
.outdir(classes)
|
||||
.files(findJavaFiles(src))
|
||||
.run(Task.Expect.FAIL)
|
||||
.writeAll()
|
||||
.getOutput(Task.OutputKind.DIRECT);
|
||||
if (!log.contains("module-info.java:1:1: compiler.err.module.not.found.on.module.source.path"))
|
||||
throw new Exception("expected output not found");
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -90,7 +90,7 @@ public class MultiModuleModeTest extends ModuleTestBase {
|
||||
.writeAll()
|
||||
.getOutput(Task.OutputKind.DIRECT);
|
||||
|
||||
if (!log.contains("C.java:1:1: compiler.err.unnamed.pkg.not.allowed.named.modules"))
|
||||
if (!log.contains("C.java:1:1: compiler.err.not.in.module.on.module.source.path"))
|
||||
throw new Exception("expected output not found");
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user