Merge branch 'upsource-master' of git.labs.intellij.net:idea/community into upsource-master

This commit is contained in:
Dmitry Lomov
2012-05-25 09:37:01 +02:00
3 changed files with 27 additions and 52 deletions
@@ -18,6 +18,7 @@ package com.intellij.core;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.roots.PackageIndex;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem;
import com.intellij.openapi.vfs.local.CoreLocalFileSystem;
@@ -30,8 +31,10 @@ import com.intellij.util.Query;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* @author yole
@@ -41,8 +44,7 @@ public class CoreJavaFileManager extends PackageIndex implements JavaFileManager
private final CoreLocalFileSystem myLocalFileSystem;
private final CoreJarFileSystem myJarFileSystem;
private final List<File> myClasspath = new ArrayList<File>();
private VirtualFile[] myClasspathRoots = null;
private final List<VirtualFile> myClasspath = new ArrayList<VirtualFile>();
private final PsiManager myPsiManager;
@@ -52,33 +54,8 @@ public class CoreJavaFileManager extends PackageIndex implements JavaFileManager
myJarFileSystem = jarFileSystem;
}
private VirtualFile[] roots() {
VirtualFile[] answer = myClasspathRoots;
if (answer == null) {
ArrayList<VirtualFile> answerList = new ArrayList<VirtualFile>(myClasspath.size());
for (File root : myClasspath) {
VirtualFile rootVfs = calcRoot(root);
if (rootVfs != null) {
answerList.add(rootVfs);
}
}
answer = answerList.toArray(new VirtualFile[answerList.size()]);
myClasspathRoots = answer;
}
return answer;
}
@Nullable
private VirtualFile calcRoot(File root) {
if (root.isFile()) {
return myJarFileSystem.findFileByPath(root.getPath() + "!/");
}
else {
return myLocalFileSystem.findFileByPath(root.getPath());
}
private List<VirtualFile> roots() {
return myClasspath;
}
@Override
@@ -104,10 +81,10 @@ public class CoreJavaFileManager extends PackageIndex implements JavaFileManager
@Nullable
public PsiPackage getPackage(PsiDirectory dir) {
final File ioFile = new File(dir.getVirtualFile().getPath());
for (File root : myClasspath) {
if (FileUtil.isAncestor(root, ioFile, false)) {
final String relativePath = FileUtil.getRelativePath(root.getPath(), ioFile.getPath(), '.');
final VirtualFile file = dir.getVirtualFile();
for (VirtualFile root : myClasspath) {
if (VfsUtilCore.isAncestor(root, file, false)) {
final String relativePath = FileUtil.getRelativePath(root.getPath(), file.getPath(), '.');
return new PsiPackageImpl(myPsiManager, relativePath);
}
}
@@ -223,8 +200,7 @@ public class CoreJavaFileManager extends PackageIndex implements JavaFileManager
public void initialize() {
}
public void addToClasspath(File path) {
myClasspath.add(path);
myClasspathRoots = null;
public void addToClasspath(VirtualFile root) {
myClasspath.add(root);
}
}
@@ -30,6 +30,7 @@ import com.intellij.psi.impl.JavaPsiImplementationHelper;
import com.intellij.psi.impl.PsiElementFactoryImpl;
import com.intellij.psi.impl.source.resolve.JavaResolveCache;
import com.intellij.psi.impl.source.resolve.PsiResolveHelperImpl;
import org.jetbrains.annotations.NotNull;
import java.io.File;
@@ -61,18 +62,21 @@ public class JavaCoreProjectEnvironment extends CoreProjectEnvironment {
return new CoreJavaFileManager(myPsiManager, getEnvironment().getLocalFileSystem(), getEnvironment().getJarFileSystem());
}
public void addToClasspath(File path) {
final VirtualFile root = path.isFile()
? getEnvironment().getJarFileSystem().findFileByPath(path + "!/")
: getEnvironment().getLocalFileSystem().findFileByPath(path.getPath());
public void addJarToClassPath (File path) {
assert path.isFile();
if (root != null) {
myFileManager.addToClasspath(path);
myFileIndexFacade.addLibraryRoot(root);
}
else {
final VirtualFile root = getEnvironment().getJarFileSystem().findFileByPath(path + "!/");
if (root == null) {
throw new IllegalArgumentException("trying to add non-existing file to classpath: " + path);
}
addSourcesToClasspath(root);
}
public void addSourcesToClasspath(@NotNull VirtualFile root) {
assert root.isDirectory();
myFileManager.addToClasspath(root);
myFileIndexFacade.addLibraryRoot(root);
}
}
@@ -24,7 +24,6 @@ import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.roots.FileIndexFacade;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.*;
@@ -78,10 +77,6 @@ public class CoreProjectEnvironment {
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getArea(myProject), extensionPointName, aClass);
}
public void addLibraryRoot(VirtualFile file) {
myFileIndexFacade.addLibraryRoot(file);
}
public <T> void registerProjectComponent(final Class<T> interfaceClass, final T implementation) {
CoreApplicationEnvironment.registerComponentInstance(myProject.getPicoContainer(), interfaceClass, implementation);
}