mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cache package's classes in package itself. remove similar cache from groovy
This commit is contained in:
@@ -496,7 +496,8 @@ public class PsiPackageImpl extends PsiElementBase implements PsiPackage, Querya
|
||||
if (classHint == null || classHint.shouldProcess(ElementClassHint.DeclaractionKind.CLASS)) {
|
||||
NameHint nameHint = processor.getHint(NameHint.KEY);
|
||||
if (nameHint != null) {
|
||||
if (processClassesByName(processor, state, place, scope, nameHint.getName(state))) return false;
|
||||
final String shortName = nameHint.getName(state);
|
||||
if (containsClassNamed(shortName) && processClassesByName(processor, state, place, scope, shortName)) return false;
|
||||
}
|
||||
else if (prefixMatcher != null && migration == null) {
|
||||
for (String className : getClassNamesCache()) {
|
||||
|
||||
@@ -18,14 +18,11 @@ package org.jetbrains.plugins.groovy.lang.psi.impl;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.UserDataCache;
|
||||
import com.intellij.openapi.util.UserDataHolder;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
@@ -40,11 +37,7 @@ import com.intellij.psi.stubs.StubElement;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.ConcurrentFactoryMap;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.FactoryMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyFileType;
|
||||
@@ -66,7 +59,9 @@ import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.processors.ClassHint;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Implements all abstractions related to Groovy file
|
||||
@@ -74,7 +69,6 @@ import java.util.*;
|
||||
* @author ilyas
|
||||
*/
|
||||
public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
private static final Key<CachedValue<FactoryMap<String, Set<String>>>> IMPLICITLY_IMPORTABLE_CLASSES = Key.create("IMplicitlyImportable");
|
||||
private static final Logger LOG = Logger.getInstance("org.jetbrains.plugins.groovy.lang.psi.impl.GroovyFileImpl");
|
||||
private static final Object lock = new Object();
|
||||
|
||||
@@ -82,8 +76,6 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
private GroovyScriptClass myScriptClass;
|
||||
private static final String SYNTHETIC_PARAMETER_NAME = "args";
|
||||
private GrParameter mySyntheticArgsParameter = null;
|
||||
|
||||
|
||||
private PsiElement myContext;
|
||||
|
||||
public GroovyFileImpl(FileViewProvider viewProvider) {
|
||||
@@ -162,7 +154,7 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
}
|
||||
}
|
||||
|
||||
if (processClasses && !processImplicitImports(processor, state, lastParent, place, expectedName)) {
|
||||
if (processClasses && !processImplicitImports(processor, state, lastParent, place)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -212,16 +204,10 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
}
|
||||
|
||||
private boolean processImplicitImports(PsiScopeProcessor processor, ResolveState state, PsiElement lastParent,
|
||||
PsiElement place, @Nullable String className) {
|
||||
PsiElement place) {
|
||||
JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject());
|
||||
|
||||
final FactoryMap<String, Set<String>> cache = getImplicitlyImportableClassNames();
|
||||
|
||||
for (final String implicitlyImported : getImplicitlyImportedPackages()) {
|
||||
if (className != null && !cache.get(implicitlyImported).contains(className)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
PsiPackage aPackage = facade.findPackage(implicitlyImported);
|
||||
if (aPackage != null && !aPackage.processDeclarations(processor, state, lastParent, place)) return false;
|
||||
}
|
||||
@@ -233,36 +219,6 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private FactoryMap<String, Set<String>> getImplicitlyImportableClassNames() {
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(this);
|
||||
UserDataHolder holder = module != null ? module : this;
|
||||
|
||||
return CachedValuesManager.getManager(getProject()).getCachedValue(holder, IMPLICITLY_IMPORTABLE_CLASSES, new CachedValueProvider<FactoryMap<String, Set<String>>>() {
|
||||
public Result<FactoryMap<String, Set<String>>> compute() {
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject());
|
||||
|
||||
final FactoryMap<String, Set<String>> result = new ConcurrentFactoryMap<String, Set<String>>() {
|
||||
@Override
|
||||
protected Set<String> create(String pkgName) {
|
||||
final HashSet<String> shortNames = new HashSet<String>();
|
||||
PsiPackage aPackage = facade.findPackage(pkgName);
|
||||
if (aPackage != null) {
|
||||
for (PsiClass aClass : aPackage.getClasses()) {
|
||||
ContainerUtil.addIfNotNull(aClass.getName(), shortNames);
|
||||
}
|
||||
}
|
||||
return shortNames;
|
||||
}
|
||||
};
|
||||
|
||||
return Result.create(result, ProjectRootManager.getInstance(getProject()), PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT);
|
||||
}
|
||||
}, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static boolean processChildrenScopes(PsiElement element,
|
||||
PsiScopeProcessor processor,
|
||||
ResolveState state,
|
||||
|
||||
Reference in New Issue
Block a user