mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-192450 Can't use Groovy-Eclipse compiler on JDK9
This commit is contained in:
+23
-6
@@ -43,8 +43,8 @@ import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerConfiguration;
|
||||
import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
|
||||
import javax.tools.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.lang.reflect.Constructor;
|
||||
@@ -60,6 +60,7 @@ public class GreclipseBuilder extends ModuleLevelBuilder {
|
||||
private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.groovy.GreclipseBuilder");
|
||||
private static final Key<Boolean> COMPILER_VERSION_INFO = Key.create("_greclipse_compiler_info_");
|
||||
public static final String ID = "Groovy-Eclipse";
|
||||
private static final Object ourGlobalEnvironmentLock = new String("GreclipseBuilder lock");
|
||||
|
||||
private String myGreclipseJar;
|
||||
/**
|
||||
@@ -91,7 +92,7 @@ public class GreclipseBuilder extends ModuleLevelBuilder {
|
||||
new File(jar).toURI().toURL(),
|
||||
new File(ObjectUtils.assertNotNull(PathManager.getJarPathForClass(GreclipseMain.class))).toURI().toURL()
|
||||
};
|
||||
ClassLoader loader = new URLClassLoader(urls, null);
|
||||
ClassLoader loader = new URLClassLoader(urls, StandardJavaFileManager.class.getClassLoader());
|
||||
Class.forName("org.eclipse.jdt.internal.compiler.batch.Main", false, loader);
|
||||
myGreclipseJar = jar;
|
||||
myGreclipseLoader = loader;
|
||||
@@ -113,7 +114,7 @@ public class GreclipseBuilder extends ModuleLevelBuilder {
|
||||
public ExitCode build(final CompileContext context,
|
||||
ModuleChunk chunk,
|
||||
DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget> dirtyFilesHolder,
|
||||
OutputConsumer outputConsumer) throws ProjectBuildException, IOException {
|
||||
OutputConsumer outputConsumer) throws ProjectBuildException {
|
||||
if (!useGreclipse(context)) return ModuleLevelBuilder.ExitCode.NOTHING_DONE;
|
||||
|
||||
try {
|
||||
@@ -221,10 +222,26 @@ public class GreclipseBuilder extends ModuleLevelBuilder {
|
||||
|
||||
private boolean performCompilation(List<String> args, StringWriter out, StringWriter err, Map<String, List<String>> outputs, CompileContext context, ModuleChunk chunk) {
|
||||
String bytecodeTarget = JpsGroovycRunner.getBytecodeTarget(context, chunk);
|
||||
if (bytecodeTarget != null) {
|
||||
System.setProperty(JpsGroovycRunner.GROOVY_TARGET_BYTECODE, bytecodeTarget);
|
||||
if (bytecodeTarget != null && System.getProperty(JpsGroovycRunner.GROOVY_TARGET_BYTECODE) == null) {
|
||||
synchronized (ourGlobalEnvironmentLock) {
|
||||
try {
|
||||
System.setProperty(JpsGroovycRunner.GROOVY_TARGET_BYTECODE, bytecodeTarget);
|
||||
return performCompilationInner(args, out, err, outputs, context, chunk);
|
||||
}
|
||||
finally {
|
||||
System.clearProperty(JpsGroovycRunner.GROOVY_TARGET_BYTECODE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return performCompilationInner(args, out, err, outputs, context, chunk);
|
||||
}
|
||||
|
||||
private boolean performCompilationInner(List<String> args,
|
||||
StringWriter out,
|
||||
StringWriter err,
|
||||
Map<String, List<String>> outputs,
|
||||
CompileContext context, ModuleChunk chunk) {
|
||||
try {
|
||||
Class<?> mainClass = Class.forName(GreclipseMain.class.getName(), true, myGreclipseLoader);
|
||||
Constructor<?> constructor = mainClass.getConstructor(PrintWriter.class, PrintWriter.class, Map.class, Map.class);
|
||||
@@ -242,7 +259,7 @@ public class GreclipseBuilder extends ModuleLevelBuilder {
|
||||
return (Boolean)compileMethod.invoke(main, new Object[]{ArrayUtil.toStringArray(args)});
|
||||
}
|
||||
catch (Exception e) {
|
||||
context.processMessage(new CompilerMessage(getPresentableName(), e));
|
||||
context.processMessage(CompilerMessage.createInternalBuilderError(getPresentableName(), e));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+13
-18
@@ -27,15 +27,11 @@ import com.intellij.execution.process.ProcessOutputTypes
|
||||
import com.intellij.execution.runners.ProgramRunner
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.PathManager
|
||||
import com.intellij.openapi.application.PluginPathManager
|
||||
import com.intellij.openapi.compiler.CompilerMessageCategory
|
||||
import com.intellij.openapi.compiler.options.ExcludeEntryDescription
|
||||
import com.intellij.openapi.compiler.options.ExcludesConfiguration
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.projectRoots.JavaSdkVersion
|
||||
import com.intellij.openapi.projectRoots.JavaSdkVersionUtil
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.openapi.util.Ref
|
||||
@@ -51,10 +47,10 @@ import com.intellij.testFramework.PsiTestUtil
|
||||
import com.intellij.testFramework.TestLoggerFactory
|
||||
import groovy.transform.CompileStatic
|
||||
import org.jetbrains.annotations.NotNull
|
||||
import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile
|
||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||
import org.jetbrains.org.objectweb.asm.ClassVisitor
|
||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||
|
||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
@@ -520,6 +516,16 @@ class Usage {
|
||||
assertEmpty make()
|
||||
}
|
||||
|
||||
void "test with annotation processing enabled"() {
|
||||
def profile = (ProcessorConfigProfile)CompilerConfiguration.getInstance(project).getAnnotationProcessingConfiguration(myModule)
|
||||
profile.enabled = true
|
||||
profile.obtainProcessorsFromClasspath = true
|
||||
|
||||
myFixture.addFileToProject 'Foo.groovy', 'class Foo {}'
|
||||
|
||||
assertEmpty make()
|
||||
}
|
||||
|
||||
void testGenericStubs() {
|
||||
myFixture.addFileToProject 'Foo.groovy', 'class Foo { List<String> list }'
|
||||
myFixture.addFileToProject 'Bar.java', 'class Bar {{ for (String s : new Foo().getList()) { s.hashCode(); } }}'
|
||||
@@ -1061,22 +1067,11 @@ class Bar {}'''
|
||||
|
||||
((CompilerConfigurationImpl)CompilerConfiguration.getInstance(project)).defaultCompiler = new GreclipseIdeaCompiler(project)
|
||||
|
||||
def jarName = "groovy-eclipse-batch-2.3.4-01.jar"
|
||||
def jarPath = FileUtil.toCanonicalPath(PluginPathManager.getPluginHomePath("groovy") + "/lib/" + jarName)
|
||||
def jarPath = IntelliJProjectConfiguration.getProjectLibraryClassesRootPaths("Groovy-Eclipse-Batch")[0]
|
||||
|
||||
GreclipseIdeaCompilerSettings.getSettings(project).greclipsePath = jarPath
|
||||
}
|
||||
|
||||
@Override
|
||||
void runTest() {
|
||||
if (JavaSdkVersionUtil.getJavaSdkVersion(ModuleRootManager.getInstance(myModule).sdk)?.isAtLeast(JavaSdkVersion.JDK_1_9)) {
|
||||
println "Groovy-Eclipse doesn't support JDK9 yet"
|
||||
return
|
||||
}
|
||||
|
||||
super.runTest()
|
||||
}
|
||||
|
||||
protected List<String> chunkRebuildMessage(String builder) {
|
||||
return []
|
||||
}
|
||||
|
||||
+2
-1
@@ -26,6 +26,7 @@ import com.intellij.openapi.util.Key
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.pom.java.LanguageLevel
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.testFramework.*
|
||||
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder
|
||||
@@ -69,7 +70,7 @@ abstract class GroovyCompilerTestCase extends JavaCodeInsightFixtureTestCase imp
|
||||
|
||||
@Override
|
||||
protected void tuneFixture(JavaModuleFixtureBuilder moduleBuilder) throws Exception {
|
||||
moduleBuilder.setLanguageLevel(JavaSdkVersion.fromJavaVersion(JavaVersion.current()).maxLanguageLevel)
|
||||
moduleBuilder.setLanguageLevel(LanguageLevel.JDK_1_8)
|
||||
def javaHome = FileUtil.toSystemIndependentName(SystemProperties.javaHome)
|
||||
moduleBuilder.addJdk(StringUtil.trimEnd(StringUtil.trimEnd(javaHome, '/'), '/jre'))
|
||||
super.tuneFixture(moduleBuilder)
|
||||
|
||||
Reference in New Issue
Block a user