mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
compile grails without traversing psi to get qualified class names
This commit is contained in:
+9
-7
@@ -18,16 +18,18 @@ package org.jetbrains.groovy.compiler.rt;
|
||||
|
||||
import groovy.lang.GroovyResourceLoader;
|
||||
|
||||
import java.util.Map;
|
||||
import java.net.URL;
|
||||
import java.net.MalformedURLException;
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class PsiAwareResourceLoader implements GroovyResourceLoader {
|
||||
private final Map myClass2File;
|
||||
public class AstAwareResourceLoader implements GroovyResourceLoader {
|
||||
final Map myClass2File;
|
||||
|
||||
PsiAwareResourceLoader(Map class2File) {
|
||||
myClass2File = class2File;
|
||||
AstAwareResourceLoader() {
|
||||
myClass2File = Collections.synchronizedMap(new HashMap());
|
||||
}
|
||||
|
||||
public URL loadGroovySource(String className) throws MalformedURLException {
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.jetbrains.groovy.compiler.rt;
|
||||
|
||||
import groovy.lang.GroovyClassLoader;
|
||||
import org.codehaus.groovy.ast.ClassNode;
|
||||
import org.codehaus.groovy.control.*;
|
||||
import org.codehaus.groovy.control.messages.WarningMessage;
|
||||
import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit;
|
||||
@@ -111,10 +112,9 @@ public class GroovycRunner {
|
||||
final List compilerMessages = new ArrayList();
|
||||
final List patchers = new ArrayList();
|
||||
final List srcFiles = new ArrayList();
|
||||
final Map class2File = new HashMap();
|
||||
|
||||
final String[] finalOutput = new String[1];
|
||||
fillFromArgsFile(argsFile, compilerConfiguration, patchers, compilerMessages, srcFiles, class2File, finalOutput);
|
||||
fillFromArgsFile(argsFile, compilerConfiguration, patchers, compilerMessages, srcFiles, finalOutput);
|
||||
if (srcFiles.isEmpty()) return;
|
||||
|
||||
if (forStubs) {
|
||||
@@ -126,7 +126,7 @@ public class GroovycRunner {
|
||||
System.out.println(PRESENTABLE_MESSAGE + "Groovyc: loading sources...");
|
||||
final CompilationUnit unit = createCompilationUnit(forStubs, compilerConfiguration, finalOutput[0]);
|
||||
addSources(forStubs, srcFiles, unit);
|
||||
runPatchers(patchers, compilerMessages, class2File, unit);
|
||||
runPatchers(patchers, compilerMessages, unit);
|
||||
|
||||
System.out.println(PRESENTABLE_MESSAGE + "Groovyc: compiling...");
|
||||
final List compiledFiles = GroovyCompilerWrapper.compile(compilerMessages, forStubs, unit);
|
||||
@@ -173,7 +173,7 @@ public class GroovycRunner {
|
||||
}
|
||||
|
||||
private static String fillFromArgsFile(File argsFile, CompilerConfiguration compilerConfiguration, List patchers, List compilerMessages,
|
||||
List srcFiles, Map class2File, String[] finalOutput) {
|
||||
List srcFiles, String[] finalOutput) {
|
||||
String moduleClasspath = null;
|
||||
|
||||
BufferedReader reader = null;
|
||||
@@ -192,10 +192,6 @@ public class GroovycRunner {
|
||||
|
||||
final File file = new File(reader.readLine());
|
||||
srcFiles.add(file);
|
||||
while (!END.equals(line = reader.readLine())) {
|
||||
class2File.put(line, file);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
while (line != null) {
|
||||
@@ -269,9 +265,18 @@ public class GroovycRunner {
|
||||
}
|
||||
}
|
||||
|
||||
private static void runPatchers(List patchers, List compilerMessages, Map class2File, CompilationUnit unit) {
|
||||
private static void runPatchers(List patchers, List compilerMessages, CompilationUnit unit) {
|
||||
if (!patchers.isEmpty()) {
|
||||
final PsiAwareResourceLoader loader = new PsiAwareResourceLoader(class2File);
|
||||
final AstAwareResourceLoader loader = new AstAwareResourceLoader();
|
||||
unit.addPhaseOperation(new CompilationUnit.SourceUnitOperation() {
|
||||
public void call(SourceUnit source) throws CompilationFailedException {
|
||||
File file = new File(source.getName());
|
||||
List classes = source.getAST().getClasses();
|
||||
for (int i = 0; i < classes.size(); i++) {
|
||||
loader.myClass2File.put(((ClassNode)classes.get(i)).getName(), file);
|
||||
}
|
||||
}
|
||||
}, Phases.CONVERSION);
|
||||
for (int i = 0; i < patchers.size(); i++) {
|
||||
final CompilationUnitPatcher patcher = (CompilationUnitPatcher)patchers.get(i);
|
||||
try {
|
||||
|
||||
@@ -57,7 +57,6 @@ import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingProjectManager;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.util.Chunk;
|
||||
@@ -77,7 +76,6 @@ import org.jetbrains.plugins.groovy.config.GroovyConfigUtils;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyScriptType;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyScriptTypeDetector;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase;
|
||||
import org.jetbrains.plugins.groovy.util.GroovyUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -333,21 +331,6 @@ public abstract class GroovyCompilerBase implements TranslatingCompiler {
|
||||
for (final VirtualFile item : virtualFiles) {
|
||||
printer.println(GroovycRunner.SRC_FILE);
|
||||
printer.println(FileUtil.toSystemDependentName(item.getPath()));
|
||||
|
||||
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
|
||||
try {
|
||||
final PsiFile file = PsiManager.getInstance(myProject).findFile(item);
|
||||
if (file instanceof GroovyFileBase) {
|
||||
for (PsiClass psiClass : ((GroovyFileBase)file).getClasses()) {
|
||||
printer.println(psiClass.getQualifiedName());
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
accessToken.finish();
|
||||
}
|
||||
|
||||
printer.println(GroovycRunner.END);
|
||||
}
|
||||
|
||||
if (!patchers.isEmpty()) {
|
||||
|
||||
Reference in New Issue
Block a user