remove java-psi->projectModel dependency to minimize kotlinc (IDEA-CR-7075)

This commit is contained in:
peter
2015-12-22 16:33:36 +01:00
parent 2fba2eeb6b
commit b6f4496d0e
5 changed files with 66 additions and 48 deletions
-1
View File
@@ -8,6 +8,5 @@
<orderEntry type="jdk" jdkName="IDEA jdk" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="core-api" exported="" />
<orderEntry type="module" module-name="projectModel-api" />
</component>
</module>
@@ -16,24 +16,9 @@
package com.intellij.psi.util;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.OrderEntry;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiAnonymousClass;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
/**
* @author mike
@@ -57,31 +42,4 @@ public class PsiClassUtil {
if (mustNotBeAbstract && aClass.hasModifierProperty(PsiModifier.ABSTRACT)) return false;
return aClass.getContainingClass() == null || aClass.hasModifierProperty(PsiModifier.STATIC);
}
/**
* Searches the project for modules that contain the class with the specified full-qualified name within
* the module dependencies or libraries.
*
* @param qualifiedName the full-qualified name of the class to find.
* @return the modules that contain the given class in dependencies or libraries.
*/
@NotNull
public static Collection<Module> findModulesWithClass(@NotNull Project project, @NonNls @NotNull String qualifiedName) {
GlobalSearchScope allScope = GlobalSearchScope.allScope(project);
JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
PsiClass[] possibleClasses = facade.findClasses(qualifiedName, allScope);
if (possibleClasses.length == 0) {
return Collections.emptyList();
}
Set<Module> relevantModules = ContainerUtil.newLinkedHashSet();
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
for (PsiClass aClass : possibleClasses) {
VirtualFile classFile = aClass.getContainingFile().getVirtualFile();
for (OrderEntry orderEntry : fileIndex.getOrderEntriesForFile(classFile)) {
relevantModules.add(orderEntry.getOwnerModule());
}
}
return relevantModules;
}
}
@@ -34,7 +34,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiClassUtil;
import com.intellij.psi.util.FindClassUtil;
import com.intellij.testFramework.PsiTestCase;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -182,12 +182,12 @@ public class FindClassTest extends PsiTestCase {
assertNotNull(psiClass);
PsiClass psiClass2 = myJavaFacade.findClass("p.A", otherModules.get(0).getModuleWithDependenciesAndLibrariesScope(true));
assertNotNull(psiClass2);
Collection<Module> modules = PsiClassUtil.findModulesWithClass(myProject, "p.A");
Collection<Module> modules = FindClassUtil.findModulesWithClass(myProject, "p.A");
assertSameElements(modules, getModule(), otherModules.get(0));
PsiClass packClass = myJavaFacade.findClass("pack.MyClass", otherModules.get(0).getModuleWithDependenciesAndLibrariesScope(true));
assertNotNull(packClass);
Collection<Module> packModules = PsiClassUtil.findModulesWithClass(myProject, "pack.MyClass");
Collection<Module> packModules = FindClassUtil.findModulesWithClass(myProject, "pack.MyClass");
assertSameElements(packModules, otherModules.get(0));
}
@@ -0,0 +1,61 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.psi.util;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.OrderEntry;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
public class FindClassUtil {
/**
* Searches the project for modules that contain the class with the specified full-qualified name within
* the module dependencies or libraries.
*
* @param qualifiedName the full-qualified name of the class to find.
* @return the modules that contain the given class in dependencies or libraries.
*/
@NotNull
public static Collection<Module> findModulesWithClass(@NotNull Project project, @NonNls @NotNull String qualifiedName) {
GlobalSearchScope allScope = GlobalSearchScope.allScope(project);
JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
PsiClass[] possibleClasses = facade.findClasses(qualifiedName, allScope);
if (possibleClasses.length == 0) {
return Collections.emptyList();
}
Set<Module> relevantModules = ContainerUtil.newLinkedHashSet();
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
for (PsiClass aClass : possibleClasses) {
VirtualFile classFile = aClass.getContainingFile().getVirtualFile();
for (OrderEntry orderEntry : fileIndex.getOrderEntriesForFile(classFile)) {
relevantModules.add(orderEntry.getOwnerModule());
}
}
return relevantModules;
}
}
@@ -23,7 +23,7 @@ import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiClassUtil;
import com.intellij.psi.util.FindClassUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.config.AbstractConfigUtils;
@@ -97,7 +97,7 @@ public class DefaultGroovyShellRunner extends GroovyShellConfig {
public Collection<Module> getPossiblySuitableModules(Project project) {
Set<Module> results = null;
for (String className : REQUIRED_GROOVY_CLASSES) {
Collection<Module> someModules = PsiClassUtil.findModulesWithClass(project, className);
Collection<Module> someModules = FindClassUtil.findModulesWithClass(project, className);
if (results == null) {
results = ContainerUtil.newLinkedHashSet(someModules);
} else {