From d90dec9aceae0f3753e45c95a4093077915e44bc Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 21 Dec 2009 15:09:06 +0000 Subject: [PATCH] use our groovy stub generator by default, give an UI option to switch to groovyc's one for perverts (IDEADEV-42045) --- .../compiler/GroovyCompilerConfigurable.form | 10 ++++++++- .../compiler/GroovyCompilerConfigurable.java | 7 ++++++- .../compiler/GroovyCompilerConfiguration.java | 20 +++++++++++------- .../groovy/compiler/GroovyCompilerLoader.java | 16 +++++++-------- .../compiler/generator/GroovyToJavaGenerator.java | 4 ++++ .../compiler/generator/GroovycStubGenerator.java | 24 ++++++++++++++++++---- 6 files changed, 59 insertions(+), 22 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfigurable.form b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfigurable.form index 1eaf3812df..90a9f505b2 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfigurable.form +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfigurable.form @@ -8,7 +8,7 @@ - + @@ -37,6 +37,14 @@ + + + + + + + + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfigurable.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfigurable.java index 54df775d27..1af3db22ef 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfigurable.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfigurable.java @@ -43,6 +43,7 @@ public class GroovyCompilerConfigurable implements SearchableConfigurable, Compi private JTextField myHeapSize; private JPanel myMainPanel; private JPanel myExcludesPanel; + private JCheckBox myUseGroovycStubs; private ExcludedEntriesConfigurable myExcludes; private final GroovyCompilerConfiguration myConfig; @@ -100,16 +101,20 @@ public class GroovyCompilerConfigurable implements SearchableConfigurable, Compi } public boolean isModified() { - return !Comparing.equal(myConfig.getHeapSize(), myHeapSize.getText()) || myExcludes.isModified(); + return !Comparing.equal(myConfig.getHeapSize(), myHeapSize.getText()) || + myExcludes.isModified() || + myConfig.isUseGroovycStubs() != myUseGroovycStubs.isSelected(); } public void apply() throws ConfigurationException { myExcludes.apply(); myConfig.setHeapSize(myHeapSize.getText()); + myConfig.setUseGroovycStubs(myUseGroovycStubs.isSelected()); } public void reset() { myHeapSize.setText(myConfig.getHeapSize()); + myUseGroovycStubs.setSelected(myConfig.isUseGroovycStubs()); myExcludes.reset(); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfiguration.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfiguration.java index 41b602735a..dfc2534355 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfiguration.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfiguration.java @@ -36,11 +36,13 @@ import org.jdom.Element; ) public class GroovyCompilerConfiguration implements PersistentStateComponent, Disposable { private String myHeapSize = "400"; + private boolean myUseGroovycStubs = false; private final ExcludedEntriesConfiguration myExcludeFromStubGeneration = new ExcludedEntriesConfiguration(); public MyStateBean getState() { final MyStateBean bean = new MyStateBean(); bean.heapSize = myHeapSize; + bean.useGroovycStubs = myUseGroovycStubs; myExcludeFromStubGeneration.writeExternal(bean.excludes); return bean; } @@ -55,11 +57,7 @@ public class GroovyCompilerConfiguration implements PersistentStateComponent(Arrays.asList(GroovyFileType.GROOVY_FILE_TYPE, StdFileTypes.JAVA)), - new HashSet(Arrays.asList(StdFileTypes.JAVA))); - } else { - GroovyToJavaGenerator generator = new GroovyToJavaGenerator(myProject); - compilerManager.addCompiler(generator); - compilerManager.addCompilationStatusListener(generator); - } + compilerManager.addTranslatingCompiler(new GroovycStubGenerator(myProject), + new HashSet(Arrays.asList(GroovyFileType.GROOVY_FILE_TYPE, StdFileTypes.JAVA)), + new HashSet(Arrays.asList(StdFileTypes.JAVA))); + + GroovyToJavaGenerator generator = new GroovyToJavaGenerator(myProject); + compilerManager.addCompiler(generator); + compilerManager.addCompilationStatusListener(generator); compilerManager.addTranslatingCompiler(new GroovyCompiler(myProject), new HashSet(Arrays.asList(GroovyFileType.GROOVY_FILE_TYPE, StdFileTypes.CLASS)), diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java index 8241a74a47..d30851a9e1 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java @@ -114,6 +114,10 @@ public class GroovyToJavaGenerator implements SourceGeneratingCompiler, Compilat } public GenerationItem[] getGenerationItems(CompileContext context) { + if (GroovyCompilerConfiguration.getInstance(myProject).isUseGroovycStubs()) { + return new GenerationItem[0]; + } + myContext = context; List generationItems = new ArrayList(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovycStubGenerator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovycStubGenerator.java index a02a2b9ec3..2359646240 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovycStubGenerator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovycStubGenerator.java @@ -24,9 +24,9 @@ import com.intellij.openapi.compiler.CompileScope; import com.intellij.openapi.compiler.CompilerPaths; import com.intellij.openapi.compiler.ex.CompileContextEx; import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; @@ -47,7 +47,6 @@ import java.util.List; * @author peter */ public class GroovycStubGenerator extends GroovyCompilerBase { - private static final Logger LOG = Logger.getInstance("#org.jetbrains.plugins.groovy.compiler.generator.GroovycStubGenerator"); public GroovycStubGenerator(Project project) { super(project); @@ -55,8 +54,26 @@ public class GroovycStubGenerator extends GroovyCompilerBase { @Override public void compile(CompileContext compileContext, Chunk moduleChunk, VirtualFile[] virtualFiles, OutputSink sink) { + if (!GroovyCompilerConfiguration.getInstance(myProject).isUseGroovycStubs()) { + return; + } + final CompileScope scope = compileContext.getCompileScope(); - if (scope.getFiles(StdFileTypes.JAVA, true).length == 0) { + final VirtualFile[] javaFiles = scope.getFiles(StdFileTypes.JAVA, true); + if (javaFiles.length == 0) { + return; + } + + boolean hasJava = false; + for (VirtualFile javaFile : javaFiles) { + final Module module = ModuleUtil.findModuleForFile(javaFile, myProject); + if (module != null && moduleChunk.containsNode(module)) { + hasJava = true; + break; + } + } + + if (!hasJava) { return; } @@ -103,7 +120,6 @@ public class GroovycStubGenerator extends GroovyCompilerBase { if (!hasJava) { //always pass groovyc stub generator at least 1 java file, or it won't generate stubs - //todo not needed anymore with groovy 1.7? toCompile.add(createMockJavaFile(rootPath)); } -- 2.11.4.GIT