mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'upsource-master' of git.labs.intellij.net:idea/community into upsource-master
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user