8181897: JDK 9 change to symlink handling affects SourceFile attributes

Using user provided path in toUri().

Reviewed-by: jjg
This commit is contained in:
Jan Lahoda 2017-06-26 17:00:45 +02:00
parent e8c680e65b
commit 7c3c83fb55
2 changed files with 23 additions and 6 deletions

View File

@ -316,6 +316,11 @@ public abstract class PathFileObject implements JavaFileObject {
return isPathNameCompatible(userPath, simpleName, kind); return isPathNameCompatible(userPath, simpleName, kind);
} }
@Override @DefinedBy(Api.COMPILER)
public URI toUri() {
return userPath.toUri().normalize();
}
@Override @Override
PathFileObject getSibling(String baseName) { PathFileObject getSibling(String baseName) {
return new SimpleFileObject(fileManager, return new SimpleFileObject(fileManager,

View File

@ -23,22 +23,26 @@
/* /*
* @test * @test
* @bug 8178017 * @bug 8178017 8181897
* @summary JDK 9 change to symlink handling causes misleading * @summary JDK 9 change to symlink handling causes misleading
* class.public.should.be.in.file diagnostic * class.public.should.be.in.file diagnostic and SourceFile
* attribute content
* @library /tools/lib * @library /tools/lib
* @modules jdk.compiler/com.sun.tools.javac.api * @modules jdk.compiler/com.sun.tools.javac.api
* jdk.compiler/com.sun.tools.javac.main * jdk.compiler/com.sun.tools.javac.main
* jdk.jdeps/com.sun.tools.classfile
* @build toolbox.JavacTask toolbox.TestRunner toolbox.ToolBox * @build toolbox.JavacTask toolbox.TestRunner toolbox.ToolBox
* @run main SymLinkTest * @run main SymLinkTest
*/ */
import java.io.IOException;
import java.nio.file.FileSystemException; import java.nio.file.FileSystemException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import com.sun.tools.classfile.Attribute;
import com.sun.tools.classfile.ClassFile;
import com.sun.tools.classfile.SourceFile_attribute;
import toolbox.JavacTask; import toolbox.JavacTask;
import toolbox.TestRunner; import toolbox.TestRunner;
import toolbox.TestRunner.Test; import toolbox.TestRunner.Test;
@ -56,16 +60,16 @@ public class SymLinkTest extends TestRunner {
} }
@Test @Test
public void testgetKind(Path base) throws IOException { public void testgetKind(Path base) throws Exception {
test(base, "SOURCE"); test(base, "SOURCE");
} }
@Test @Test
public void testSymLink(Path base) throws IOException { public void testSymLink(Path base) throws Exception {
test(base, "SOURCE.java"); test(base, "SOURCE.java");
} }
void test(Path base, String name) throws IOException { void test(Path base, String name) throws Exception{
Path file = base.resolve(name); Path file = base.resolve(name);
Path javaFile = base.resolve("HelloWorld.java"); Path javaFile = base.resolve("HelloWorld.java");
tb.writeFile(file, tb.writeFile(file,
@ -89,6 +93,14 @@ public class SymLinkTest extends TestRunner {
.files(javaFile) .files(javaFile)
.run() .run()
.writeAll(); .writeAll();
ClassFile cf = ClassFile.read(classes.resolve("HelloWorld.class"));
SourceFile_attribute sf = (SourceFile_attribute) cf.attributes.get(Attribute.SourceFile);
String sourceFile = sf.getSourceFile(cf.constant_pool);
if (!"HelloWorld.java".equals(sourceFile)) {
throw new AssertionError("Unexpected SourceFile attribute value: " + sourceFile);
}
} }
} }