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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* 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));
|
log.error(decl.qualId, Errors.ModuleNameMismatch(msym.name, name));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (tree.getPackage() == null) {
|
||||||
|
log.error(tree.pos(), Errors.UnnamedPkgNotAllowedNamedModules);
|
||||||
|
}
|
||||||
msym = syms.enterModule(name);
|
msym = syms.enterModule(name);
|
||||||
}
|
}
|
||||||
if (msym.sourceLocation == null) {
|
if (msym.sourceLocation == null) {
|
||||||
@ -388,7 +391,11 @@ public class Modules extends JCTree.Visitor {
|
|||||||
} else if (c != null && c.packge().modle == syms.unnamedModule) {
|
} else if (c != null && c.packge().modle == syms.unnamedModule) {
|
||||||
tree.modle = syms.unnamedModule;
|
tree.modle = syms.unnamedModule;
|
||||||
} else {
|
} 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;
|
tree.modle = syms.errModule;
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} 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 {
|
private Location getModuleLocation(JCCompilationUnit tree) throws IOException {
|
||||||
|
Name pkgName;
|
||||||
if (tree.getModuleDecl() != null) {
|
if (tree.getModuleDecl() != null) {
|
||||||
return getModuleLocation(tree.sourcefile, null);
|
pkgName = null;
|
||||||
} else if (tree.getPackage() != null) {
|
|
||||||
JCPackageDecl pkg = tree.getPackage();
|
|
||||||
return getModuleLocation(tree.sourcefile, TreeInfo.fullName(pkg.pid));
|
|
||||||
} else {
|
} else {
|
||||||
// code in unnamed module
|
JCPackageDecl pkg = tree.getPackage();
|
||||||
return null;
|
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.
|
// For now, just check module source path.
|
||||||
// We may want to check source path as well.
|
// We may want to check source path as well.
|
||||||
Location loc =
|
Location loc =
|
||||||
@ -482,7 +497,6 @@ public class Modules extends JCTree.Visitor {
|
|||||||
fileManager.getLocationForModule(sourceOutput,
|
fileManager.getLocationForModule(sourceOutput,
|
||||||
fo, (pkgName == null) ? null : pkgName.toString());
|
fo, (pkgName == null) ? null : pkgName.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return loc;
|
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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -553,7 +553,7 @@ public class Locations {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
Location getLocationForModule(Path dir) {
|
Location getLocationForModule(Path dir) {
|
||||||
return pathLocations.get(dir);
|
return (pathLocations == null) ? null : pathLocations.get(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean listed;
|
private boolean listed;
|
||||||
|
@ -2845,6 +2845,12 @@ compiler.warn.module.not.found=\
|
|||||||
compiler.err.too.many.modules=\
|
compiler.err.too.many.modules=\
|
||||||
too many module declarations found
|
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
|
# 0: symbol
|
||||||
compiler.err.duplicate.module=\
|
compiler.err.duplicate.module=\
|
||||||
duplicate module: {0}
|
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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* 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>();
|
modulePathFiles = new ArrayList<File>();
|
||||||
classPathFiles = new ArrayList<File>();
|
classPathFiles = new ArrayList<File>();
|
||||||
additionalFiles = new ArrayList<File>();
|
additionalFiles = new ArrayList<File>();
|
||||||
|
nonEmptySrcFiles = new ArrayList<File>();
|
||||||
|
|
||||||
findFiles(file, srcFiles);
|
findFiles(file, srcFiles);
|
||||||
for (File f: srcFiles) {
|
for (File f: srcFiles) {
|
||||||
@ -99,11 +100,11 @@ class Example implements Comparable<Example> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (f.isFile()) {
|
} else if (f.isFile()) {
|
||||||
if (f.getName().endsWith(".java")) {
|
if (f.getName().endsWith(".java")) {
|
||||||
files.add(f);
|
files.add(f);
|
||||||
} else if (f.getName().equals("modulesourcepath")) {
|
} else if (f.getName().equals("modulesourcepath")) {
|
||||||
moduleSourcePathDir = f;
|
moduleSourcePathDir = f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,8 +133,10 @@ class Example implements Comparable<Example> {
|
|||||||
foundInfo(f);
|
foundInfo(f);
|
||||||
runOpts = Arrays.asList(runMatch.group(1).trim().split(" +"));
|
runOpts = Arrays.asList(runMatch.group(1).trim().split(" +"));
|
||||||
}
|
}
|
||||||
if (javaPat.matcher(line).matches())
|
if (javaPat.matcher(line).matches()) {
|
||||||
|
nonEmptySrcFiles.add(f);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new Error(e);
|
throw new Error(e);
|
||||||
@ -264,7 +267,9 @@ class Example implements Comparable<Example> {
|
|||||||
if (moduleSourcePathDir != null) {
|
if (moduleSourcePathDir != null) {
|
||||||
opts.add("--module-source-path");
|
opts.add("--module-source-path");
|
||||||
opts.add(moduleSourcePathDir.getPath());
|
opts.add(moduleSourcePathDir.getPath());
|
||||||
files = moduleSourcePathFiles;
|
files = new ArrayList<>();
|
||||||
|
files.addAll(moduleSourcePathFiles);
|
||||||
|
files.addAll(nonEmptySrcFiles); // srcFiles containing declarations
|
||||||
}
|
}
|
||||||
|
|
||||||
if (additionalFiles.size() > 0) {
|
if (additionalFiles.size() > 0) {
|
||||||
@ -344,6 +349,7 @@ class Example implements Comparable<Example> {
|
|||||||
List<File> modulePathFiles;
|
List<File> modulePathFiles;
|
||||||
List<File> classPathFiles;
|
List<File> classPathFiles;
|
||||||
List<File> additionalFiles;
|
List<File> additionalFiles;
|
||||||
|
List<File> nonEmptySrcFiles;
|
||||||
File infoFile;
|
File infoFile;
|
||||||
private List<String> runOpts;
|
private List<String> runOpts;
|
||||||
private List<String> options;
|
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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* 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
|
// key: compiler.warn.dir.path.element.not.directory
|
||||||
// options: -Xlint:path
|
// options: -Xlint:path
|
||||||
// run: simple
|
// 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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* 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
|
// 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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -90,7 +90,7 @@ public class MultiModuleModeTest extends ModuleTestBase {
|
|||||||
.writeAll()
|
.writeAll()
|
||||||
.getOutput(Task.OutputKind.DIRECT);
|
.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");
|
throw new Exception("expected output not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user