Make sure alt-headers actually work in "core" environment

This commit is contained in:
Maxim Shafirov
2012-01-31 13:37:40 +04:00
parent ef530de14b
commit dbbd4c6902
3 changed files with 26 additions and 13 deletions
@@ -4,8 +4,10 @@ import com.intellij.core.JavaCoreEnvironment;
import com.intellij.lang.java.JavaParserDefinition; import com.intellij.lang.java.JavaParserDefinition;
import com.intellij.mock.MockApplication; import com.intellij.mock.MockApplication;
import com.intellij.openapi.Disposable; import com.intellij.openapi.Disposable;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.jet.lang.parsing.JetParserDefinition; import org.jetbrains.jet.lang.parsing.JetParserDefinition;
import org.jetbrains.jet.plugin.JetFileType; import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.compiler.PathUtil;
/** /**
* @author yole * @author yole
@@ -26,6 +28,9 @@ public class JetCoreEnvironment extends JavaCoreEnvironment {
.registerExtension(new JavaElementFinder(myProject)); .registerExtension(new JavaElementFinder(myProject));
*/ */
for (VirtualFile root : PathUtil.getAltHeadersRoots()) {
addLibraryRoot(root);
}
} }
public MockApplication getApplication() { public MockApplication getApplication() {
@@ -6,7 +6,6 @@ package org.jetbrains.jet.lang.resolve.java.alt;
import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiClassOwner; import com.intellij.psi.PsiClassOwner;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
@@ -14,27 +13,18 @@ import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.plugin.compiler.PathUtil; import org.jetbrains.jet.plugin.compiler.PathUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class AltClassFinder { public class AltClassFinder {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.jet.lang.resolve.java.alt.AltClassFinder"); private static final Logger LOG = Logger.getInstance("#org.jetbrains.jet.lang.resolve.java.alt.AltClassFinder");
private final PsiManager psiManager; private final PsiManager psiManager;
private final List<VirtualFile> roots = new ArrayList<VirtualFile>(); private final List<VirtualFile> roots;
public AltClassFinder(Project project) { public AltClassFinder(Project project) {
psiManager = PsiManager.getInstance(project); psiManager = PsiManager.getInstance(project);
this.roots = PathUtil.getAltHeadersRoots();
File alts = PathUtil.getAltHeadersPath();
if (alts != null) {
for (File root : alts.listFiles()) {
VirtualFile jarRoot = VirtualFileManager.getInstance().findFileByUrl("jar://" + root.getPath() + "!/");
roots.add(jarRoot);
}
}
} }
public PsiClass findClass(@NotNull String qualifiedName) { public PsiClass findClass(@NotNull String qualifiedName) {
@@ -4,9 +4,13 @@
package org.jetbrains.jet.plugin.compiler; package org.jetbrains.jet.plugin.compiler;
import com.intellij.openapi.application.PathManager; import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class PathUtil { public class PathUtil {
private PathUtil() {} private PathUtil() {}
@@ -64,4 +68,18 @@ public class PathUtil {
String resourceRoot = PathManager.getResourceRoot(aClass, "/" + aClass.getName().replace('.', '/') + ".class"); String resourceRoot = PathManager.getResourceRoot(aClass, "/" + aClass.getName().replace('.', '/') + ".class");
return new File(resourceRoot).getAbsoluteFile().getAbsolutePath(); return new File(resourceRoot).getAbsoluteFile().getAbsolutePath();
} }
public static List<VirtualFile> getAltHeadersRoots() {
List<VirtualFile> roots = new ArrayList<VirtualFile>();
File alts = getAltHeadersPath();
if (alts != null) {
for (File root : alts.listFiles()) {
VirtualFile jarRoot = VirtualFileManager.getInstance().findFileByUrl("jar://" + root.getPath() + "!/");
roots.add(jarRoot);
}
}
return roots;
}
} }