mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
8047183: JDK build fails with sjavac enabled
Reviewed-by: mcimadamore
This commit is contained in:
parent
5b1596bc25
commit
bd97e7d5ec
3 changed files with 127 additions and 7 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2014, 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
|
||||||
|
@ -25,17 +25,21 @@
|
||||||
|
|
||||||
package com.sun.tools.sjavac.comp;
|
package com.sun.tools.sjavac.comp;
|
||||||
|
|
||||||
import com.sun.tools.javac.util.ListBuffer;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Set;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.HashMap;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.tools.*;
|
import javax.tools.*;
|
||||||
import javax.tools.JavaFileObject.Kind;
|
import javax.tools.JavaFileObject.Kind;
|
||||||
|
|
||||||
|
import com.sun.tools.javac.file.JavacFileManager;
|
||||||
|
import com.sun.tools.javac.util.BaseFileManager;
|
||||||
|
import com.sun.tools.javac.util.ListBuffer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Intercepts reads and writes to the file system to gather
|
* Intercepts reads and writes to the file system to gather
|
||||||
* information about what artifacts are generated.
|
* information about what artifacts are generated.
|
||||||
|
@ -76,6 +80,15 @@ public class SmartFileManager extends ForwardingJavaFileManager<JavaFileManager>
|
||||||
stdout = pw;
|
stdout = pw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether or not to use ct.sym as an alternate to rt.jar.
|
||||||
|
*/
|
||||||
|
public void setSymbolFileEnabled(boolean b) {
|
||||||
|
if (!(fileManager instanceof JavacFileManager))
|
||||||
|
throw new IllegalStateException();
|
||||||
|
((JavacFileManager) fileManager).setSymbolFileEnabled(b);
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String,Set<URI>> getPackageArtifacts() {
|
public Map<String,Set<URI>> getPackageArtifacts() {
|
||||||
return packageArtifacts;
|
return packageArtifacts;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,15 +44,13 @@ import java.util.Set;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
import javax.tools.JavaCompiler.CompilationTask;
|
import javax.tools.JavaCompiler.CompilationTask;
|
||||||
import javax.tools.JavaFileManager;
|
|
||||||
import javax.tools.JavaFileObject;
|
import javax.tools.JavaFileObject;
|
||||||
import javax.tools.StandardJavaFileManager;
|
import javax.tools.StandardJavaFileManager;
|
||||||
|
|
||||||
import com.sun.tools.javac.api.JavacTaskImpl;
|
import com.sun.tools.javac.api.JavacTaskImpl;
|
||||||
import com.sun.tools.javac.util.BaseFileManager;
|
|
||||||
import com.sun.tools.javac.util.Context;
|
import com.sun.tools.javac.util.Context;
|
||||||
import com.sun.tools.javac.util.ListBuffer;
|
import com.sun.tools.javac.util.ListBuffer;
|
||||||
import com.sun.tools.javac.util.Log;
|
import com.sun.tools.javac.util.Options;
|
||||||
import com.sun.tools.javac.util.StringUtils;
|
import com.sun.tools.javac.util.StringUtils;
|
||||||
import com.sun.tools.sjavac.comp.AttrWithDeps;
|
import com.sun.tools.sjavac.comp.AttrWithDeps;
|
||||||
import com.sun.tools.sjavac.comp.Dependencies;
|
import com.sun.tools.sjavac.comp.Dependencies;
|
||||||
|
@ -320,6 +318,7 @@ public class CompilerThread implements Runnable {
|
||||||
|
|
||||||
// Do the compilation!
|
// Do the compilation!
|
||||||
CompilationTask task = compiler.getTask(stderr, smartFileManager, null, the_options, null, compilationUnits, context);
|
CompilationTask task = compiler.getTask(stderr, smartFileManager, null, the_options, null, compilationUnits, context);
|
||||||
|
smartFileManager.setSymbolFileEnabled(!Options.instance(context).isSet("ignore.symbol.file"));
|
||||||
rc = ((JavacTaskImpl) task).doCall();
|
rc = ((JavacTaskImpl) task).doCall();
|
||||||
|
|
||||||
while (numActiveSubTasks()>0) {
|
while (numActiveSubTasks()>0) {
|
||||||
|
|
108
langtools/test/tools/sjavac/IgnoreSymbolFile.java
Normal file
108
langtools/test/tools/sjavac/IgnoreSymbolFile.java
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2014, 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. Oracle designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Oracle in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* @bug 8047183
|
||||||
|
* @summary JDK build fails with sjavac enabled
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class IgnoreSymbolFile {
|
||||||
|
public static void main(String... args) throws Exception {
|
||||||
|
if (sjavacAvailable()) {
|
||||||
|
IgnoreSymbolFile test = new IgnoreSymbolFile();
|
||||||
|
test.run();
|
||||||
|
} else {
|
||||||
|
System.err.println("sjavac not available; test skipped");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void run() throws Exception {
|
||||||
|
String body =
|
||||||
|
"package p;\n"
|
||||||
|
+ "import sun.reflect.annotation.*;\n"
|
||||||
|
+ "class X {\n"
|
||||||
|
+ " ExceptionProxy proxy;"
|
||||||
|
+ "}";
|
||||||
|
writeFile("src/p/X.java", body);
|
||||||
|
|
||||||
|
new File("classes").mkdirs();
|
||||||
|
|
||||||
|
String server = "--server:portfile=testserver,background=false";
|
||||||
|
int rc1 = compile(server, "-d", "classes", "-Werror", "src");
|
||||||
|
if (rc1 == 0)
|
||||||
|
error("compilation succeeded unexpectedly");
|
||||||
|
|
||||||
|
int rc2 = compile(server, "-d", "classes", "-Werror", "-XDignore.symbol.file=true", "src");
|
||||||
|
if (rc2 != 0)
|
||||||
|
error("compilation failed unexpectedly: rc=" + rc2);
|
||||||
|
|
||||||
|
if (errors > 0)
|
||||||
|
throw new Exception(errors + " errors occurred");
|
||||||
|
}
|
||||||
|
|
||||||
|
int compile(String... args) throws ReflectiveOperationException {
|
||||||
|
// Use reflection to avoid a compile-time dependency on sjavac Main
|
||||||
|
System.err.println("compile: " + Arrays.toString(args));
|
||||||
|
Class<?> c = Class.forName("com.sun.tools.sjavac.Main");
|
||||||
|
Method m = c.getDeclaredMethod("go", String[].class, PrintStream.class, PrintStream.class);
|
||||||
|
Object sjavac = c.newInstance();
|
||||||
|
int rc = (Integer) m.invoke(sjavac, args, System.err, System.err);
|
||||||
|
System.err.println("rc=" + rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeFile(String path, String body) throws IOException {
|
||||||
|
File f = new File(path);
|
||||||
|
if (f.getParentFile() != null)
|
||||||
|
f.getParentFile().mkdirs();
|
||||||
|
try (FileWriter w = new FileWriter(f)) {
|
||||||
|
w.write(body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void error(String msg) {
|
||||||
|
System.err.println("Error: " + msg);
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int errors;
|
||||||
|
|
||||||
|
static boolean sjavacAvailable() {
|
||||||
|
try {
|
||||||
|
Class.forName("com.sun.tools.sjavac.Main");
|
||||||
|
return true;
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue