mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
moving PsiReferenceContributor to application level
This commit is contained in:
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.psi.impl;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.CommonReferenceProviderTypes;
|
||||
import com.intellij.psi.PsiReferenceProvider;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
|
||||
@@ -27,8 +26,8 @@ public class CommonReferenceProviderTypesImpl extends CommonReferenceProviderTyp
|
||||
|
||||
private final JavaClassReferenceProvider myProvider;
|
||||
|
||||
public CommonReferenceProviderTypesImpl(Project project) {
|
||||
myProvider = new JavaClassReferenceProvider(project);
|
||||
public CommonReferenceProviderTypesImpl() {
|
||||
myProvider = new JavaClassReferenceProvider();
|
||||
}
|
||||
|
||||
public PsiReferenceProvider getClassReferenceProvider() {
|
||||
|
||||
+7
-12
@@ -16,12 +16,10 @@
|
||||
package com.intellij.psi.impl.source.resolve.reference.impl.providers;
|
||||
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.NotNullLazyValue;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.templateLanguages.OuterLanguageElement;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
@@ -41,13 +39,12 @@ import java.util.Set;
|
||||
*/
|
||||
public class JavaClassListReferenceProvider extends JavaClassReferenceProvider {
|
||||
|
||||
public JavaClassListReferenceProvider(final Project project) {
|
||||
super(GlobalSearchScope.allScope(project), project);
|
||||
public JavaClassListReferenceProvider() {
|
||||
setOption(ADVANCED_RESOLVE, Boolean.TRUE);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiReference[] getReferencesByString(String str, PsiElement position, int offsetInPosition){
|
||||
public PsiReference[] getReferencesByString(String str, @NotNull final PsiElement position, int offsetInPosition){
|
||||
if (position instanceof XmlTag && ((XmlTag)position).getValue().getTextElements().length == 0) {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
@@ -56,12 +53,10 @@ public class JavaClassListReferenceProvider extends JavaClassReferenceProvider {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
if (position != null) {
|
||||
int offset = position.getTextRange().getStartOffset() + offsetInPosition;
|
||||
for(PsiElement child = position.getFirstChild(); child != null; child = child.getNextSibling()){
|
||||
if (child instanceof OuterLanguageElement && child.getTextRange().contains(offset)) {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
int offset = position.getTextRange().getStartOffset() + offsetInPosition;
|
||||
for(PsiElement child = position.getFirstChild(); child != null; child = child.getNextSibling()){
|
||||
if (child instanceof OuterLanguageElement && child.getTextRange().contains(offset)) {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +65,7 @@ public class JavaClassListReferenceProvider extends JavaClassReferenceProvider {
|
||||
@Override
|
||||
protected Set<String> compute() {
|
||||
final Set<String> knownTopLevelPackages = new HashSet<String>();
|
||||
final List<PsiElement> defaultPackages = getDefaultPackages();
|
||||
final List<PsiElement> defaultPackages = getDefaultPackages(position.getProject());
|
||||
for (final PsiElement pack : defaultPackages) {
|
||||
if (pack instanceof PsiPackage) {
|
||||
knownTopLevelPackages.add(((PsiPackage)pack).getName());
|
||||
|
||||
+12
-19
@@ -16,6 +16,7 @@
|
||||
package com.intellij.psi.impl.source.resolve.reference.impl.providers;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.scope.ElementClassHint;
|
||||
@@ -56,17 +57,12 @@ public class JavaClassReferenceProvider extends GenericReferenceProvider impleme
|
||||
public static final CustomizationKey<Boolean> JVM_FORMAT = new CustomizationKey<Boolean>("JVM_FORMAT");
|
||||
public static final CustomizationKey<Boolean> ALLOW_DOLLAR_NAMES = new CustomizationKey<Boolean>("ALLOW_DOLLAR_NAMES");
|
||||
public static final CustomizationKey<String> DEFAULT_PACKAGE = new CustomizationKey<String>("DEFAULT_PACKAGE");
|
||||
|
||||
@Nullable private Map<CustomizationKey, Object> myOptions;
|
||||
|
||||
private boolean myAllowEmpty;
|
||||
@Nullable private final GlobalSearchScope myScope;
|
||||
private final CachedValue<List<PsiElement>> myDefaltPackages;
|
||||
|
||||
|
||||
public JavaClassReferenceProvider(GlobalSearchScope scope, final Project project) {
|
||||
myScope = scope;
|
||||
myDefaltPackages = CachedValuesManager.getManager(project).createCachedValue(new CachedValueProvider<List<PsiElement>>() {
|
||||
public Result<List<PsiElement>> compute() {
|
||||
private ParameterizedCachedValueProvider<List<PsiElement>, Project> myProvider = new ParameterizedCachedValueProvider<List<PsiElement>, Project>() {
|
||||
public CachedValueProvider.Result<List<PsiElement>> compute(Project project) {
|
||||
final List<PsiElement> psiPackages = new ArrayList<PsiElement>();
|
||||
final String defPackageName = DEFAULT_PACKAGE.getValue(myOptions);
|
||||
if (StringUtil.isNotEmpty(defPackageName)) {
|
||||
@@ -79,14 +75,11 @@ public class JavaClassReferenceProvider extends GenericReferenceProvider impleme
|
||||
if (rootPackage != null) {
|
||||
psiPackages.addAll(getSubPackages(rootPackage));
|
||||
}
|
||||
return Result.createSingleDependency(psiPackages, PsiModificationTracker.MODIFICATION_COUNT);
|
||||
return CachedValueProvider.Result.createSingleDependency(psiPackages, PsiModificationTracker.MODIFICATION_COUNT);
|
||||
}
|
||||
}, false);
|
||||
}
|
||||
};
|
||||
|
||||
public JavaClassReferenceProvider(final Project project) {
|
||||
this(null, project);
|
||||
}
|
||||
private static final Key<ParameterizedCachedValue<List<PsiElement>, Project>> KEY = Key.create("default packages");
|
||||
|
||||
public <T> void setOption(CustomizationKey<T> option, T value) {
|
||||
if (myOptions == null) {
|
||||
@@ -102,7 +95,7 @@ public class JavaClassReferenceProvider extends GenericReferenceProvider impleme
|
||||
|
||||
@Nullable
|
||||
public GlobalSearchScope getScope() {
|
||||
return myScope;
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -117,7 +110,7 @@ public class JavaClassReferenceProvider extends GenericReferenceProvider impleme
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiReference[] getReferencesByString(String str, PsiElement position, int offsetInPosition) {
|
||||
public PsiReference[] getReferencesByString(String str, @NotNull PsiElement position, int offsetInPosition) {
|
||||
if (myAllowEmpty && StringUtil.isEmpty(str)) {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
@@ -129,15 +122,15 @@ public class JavaClassReferenceProvider extends GenericReferenceProvider impleme
|
||||
final ElementClassHint hint = processor.getHint(ElementClassHint.KEY);
|
||||
if (position == null) return;
|
||||
if (hint == null || hint.shouldProcess(ElementClassHint.DeclarationKind.PACKAGE) || hint.shouldProcess(ElementClassHint.DeclarationKind.CLASS)) {
|
||||
final List<PsiElement> cachedPackages = getDefaultPackages();
|
||||
final List<PsiElement> cachedPackages = getDefaultPackages(position.getProject());
|
||||
for (final PsiElement psiPackage : cachedPackages) {
|
||||
if (!processor.execute(psiPackage, ResolveState.initial())) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected List<PsiElement> getDefaultPackages() {
|
||||
return myDefaltPackages.getValue();
|
||||
protected List<PsiElement> getDefaultPackages(Project project) {
|
||||
return CachedValuesManager.getManager(project).getParameterizedCachedValue(project, KEY, myProvider, false, project);
|
||||
}
|
||||
|
||||
private static Collection<PsiPackage> getSubPackages(final PsiPackage defaultPackage) {
|
||||
|
||||
@@ -17,8 +17,6 @@ package com.intellij.util.xml;
|
||||
|
||||
import com.intellij.codeInsight.completion.scope.JavaCompletionProcessor;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.UserDataCache;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReference;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
|
||||
@@ -35,16 +33,10 @@ import org.jetbrains.annotations.NotNull;
|
||||
*/
|
||||
public class CanonicalPsiTypeConverterImpl extends CanonicalPsiTypeConverter implements CustomReferenceConverter<PsiType> {
|
||||
|
||||
private static final UserDataCache<JavaClassReferenceProvider, Project, Object> REFERENCE_PROVIDER = new UserDataCache<JavaClassReferenceProvider, Project, Object>("CanonicalPsiTypeConverterImpl") {
|
||||
@Override
|
||||
protected JavaClassReferenceProvider compute(Project project, Object p) {
|
||||
return new JavaClassReferenceProvider(project);
|
||||
}
|
||||
};
|
||||
|
||||
@NonNls private static final String[] PRIMITIVES = new String[]{"boolean", "byte",
|
||||
"char", "double", "float", "int", "long", "short"};
|
||||
@NonNls private static final String ARRAY_PREFIX = "[L";
|
||||
private static final JavaClassReferenceProvider CLASS_REFERENCE_PROVIDER = new JavaClassReferenceProvider();
|
||||
|
||||
public PsiType fromString(final String s, final ConvertContext context) {
|
||||
if (s == null) return null;
|
||||
@@ -76,7 +68,7 @@ public class CanonicalPsiTypeConverterImpl extends CanonicalPsiTypeConverter imp
|
||||
trimmed = trimmed.substring(ARRAY_PREFIX.length());
|
||||
}
|
||||
}
|
||||
return new JavaClassReferenceSet(trimmed, element, offset, false, REFERENCE_PROVIDER.get(genericDomValue.getManager().getProject(), null)) {
|
||||
return new JavaClassReferenceSet(trimmed, element, offset, false, CLASS_REFERENCE_PROVIDER) {
|
||||
protected JavaClassReference createReference(final int referenceIndex, final String subreferenceText, final TextRange textRange,
|
||||
final boolean staticImport) {
|
||||
return new JavaClassReference(this, textRange, referenceIndex, subreferenceText, staticImport) {
|
||||
|
||||
@@ -18,8 +18,6 @@ package com.intellij.util.xml;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
|
||||
import com.intellij.util.containers.BidirectionalMap;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.UserDataCache;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -32,23 +30,15 @@ import java.util.List;
|
||||
public class JvmPsiTypeConverterImpl extends JvmPsiTypeConverter implements CustomReferenceConverter<PsiType> {
|
||||
|
||||
private static final BidirectionalMap<PsiType, Character> ourPrimitiveTypes = new BidirectionalMap<PsiType, Character>();
|
||||
private static final UserDataCache<JavaClassReferenceProvider, Project, Object> JVM_REFERENCE_PROVIDER = new UserDataCache<JavaClassReferenceProvider, Project, Object>("JvmPsiTypeConverterImplJVM") {
|
||||
@Override
|
||||
protected JavaClassReferenceProvider compute(Project project, Object p) {
|
||||
JavaClassReferenceProvider provider = new JavaClassReferenceProvider(project);
|
||||
provider.setOption(JavaClassReferenceProvider.JVM_FORMAT, Boolean.TRUE);
|
||||
provider.setSoft(true);
|
||||
return provider;
|
||||
}
|
||||
};
|
||||
private static final UserDataCache<JavaClassReferenceProvider, Project, Object> REFERENCE_PROVIDER = new UserDataCache<JavaClassReferenceProvider, Project, Object>("JvmPsiTypeConverterImplPlain") {
|
||||
@Override
|
||||
protected JavaClassReferenceProvider compute(Project project, Object p) {
|
||||
JavaClassReferenceProvider provider = new JavaClassReferenceProvider(project);
|
||||
provider.setSoft(true);
|
||||
return provider;
|
||||
}
|
||||
};
|
||||
|
||||
private static final JavaClassReferenceProvider JVM_REFERENCE_PROVIDER = new JavaClassReferenceProvider();
|
||||
private static final JavaClassReferenceProvider REFERENCE_PROVIDER = new JavaClassReferenceProvider();
|
||||
|
||||
static {
|
||||
JVM_REFERENCE_PROVIDER.setOption(JavaClassReferenceProvider.JVM_FORMAT, Boolean.TRUE);
|
||||
JVM_REFERENCE_PROVIDER.setSoft(true);
|
||||
REFERENCE_PROVIDER.setSoft(true);
|
||||
}
|
||||
|
||||
static {
|
||||
ourPrimitiveTypes.put(PsiType.BYTE, 'B');
|
||||
@@ -150,11 +140,11 @@ public class JvmPsiTypeConverterImpl extends JvmPsiTypeConverter implements Cust
|
||||
final int dimensions = getArrayDimensions(s);
|
||||
if (dimensions > 0) {
|
||||
if (s.charAt(dimensions) == 'L' && s.endsWith(";")) {
|
||||
return JVM_REFERENCE_PROVIDER.get(value.getManager().getProject(), null).getReferencesByString(s.substring(dimensions + 1), element,
|
||||
element.getText().indexOf(s) + dimensions + 1);
|
||||
return JVM_REFERENCE_PROVIDER.getReferencesByString(s.substring(dimensions + 1), element,
|
||||
element.getText().indexOf(s) + dimensions + 1);
|
||||
}
|
||||
if (psiType != null) return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
return REFERENCE_PROVIDER.get(value.getManager().getProject(), null).getReferencesByElement(element);
|
||||
return REFERENCE_PROVIDER.getReferencesByElement(element);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,10 +60,17 @@ public class PsiClassConverter extends Converter<PsiClass> implements CustomRefe
|
||||
return provider.getReferencesByElement(element);
|
||||
}
|
||||
|
||||
protected JavaClassReferenceProvider createClassReferenceProvider(GenericDomValue<PsiClass> genericDomValue, ConvertContext context,
|
||||
protected JavaClassReferenceProvider createClassReferenceProvider(final GenericDomValue<PsiClass> genericDomValue, ConvertContext context,
|
||||
ExtendClass extendClass) {
|
||||
final JavaClassReferenceProvider provider =
|
||||
new JavaClassReferenceProvider(getScope(genericDomValue), context.getPsiManager().getProject());
|
||||
new JavaClassReferenceProvider() {
|
||||
|
||||
@Override
|
||||
public GlobalSearchScope getScope() {
|
||||
return PsiClassConverter.this.getScope(genericDomValue);
|
||||
}
|
||||
};
|
||||
|
||||
if (extendClass != null) {
|
||||
if (StringUtil.isNotEmpty(extendClass.value())) {
|
||||
provider.setOption(JavaClassReferenceProvider.EXTEND_CLASS_NAMES, new String[]{extendClass.value()});
|
||||
|
||||
@@ -15,15 +15,13 @@
|
||||
*/
|
||||
package com.intellij.util.xml.converters;
|
||||
|
||||
import com.intellij.util.xml.converters.values.ClassArrayConverter;
|
||||
import com.intellij.util.xml.GenericDomValue;
|
||||
import com.intellij.util.xml.ConvertContext;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.ElementManipulators;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.UserDataCache;
|
||||
import com.intellij.util.xml.ConvertContext;
|
||||
import com.intellij.util.xml.GenericDomValue;
|
||||
import com.intellij.util.xml.converters.values.ClassArrayConverter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -33,15 +31,12 @@ import java.util.List;
|
||||
* User: Sergey.Vasiliev
|
||||
*/
|
||||
public class ClassArrayConverterImpl extends ClassArrayConverter {
|
||||
private static final UserDataCache<JavaClassReferenceProvider, Project, Object> REFERENCE_PROVIDER = new UserDataCache<JavaClassReferenceProvider, Project, Object>("ClassArrayConverterImpl") {
|
||||
@Override
|
||||
protected JavaClassReferenceProvider compute(Project project, Object p) {
|
||||
JavaClassReferenceProvider provider = new JavaClassReferenceProvider(project);
|
||||
provider.setSoft(true);
|
||||
provider.setAllowEmpty(true);
|
||||
return provider;
|
||||
}
|
||||
};
|
||||
private static final JavaClassReferenceProvider REFERENCE_PROVIDER = new JavaClassReferenceProvider();
|
||||
|
||||
static {
|
||||
REFERENCE_PROVIDER.setSoft(true);
|
||||
REFERENCE_PROVIDER.setAllowEmpty(true);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiReference[] createReferences(final GenericDomValue genericDomValue, final PsiElement element, final ConvertContext context) {
|
||||
@@ -73,7 +68,7 @@ public class ClassArrayConverterImpl extends ClassArrayConverter {
|
||||
}
|
||||
|
||||
private static void createReference(final PsiElement element, final String s, final int offset, List<PsiReference> list) {
|
||||
final PsiReference[] references = REFERENCE_PROVIDER.get(element.getProject(), null).getReferencesByString(s, element, offset);
|
||||
final PsiReference[] references = REFERENCE_PROVIDER.getReferencesByString(s, element, offset);
|
||||
//noinspection ManualArrayToCollectionCopy
|
||||
for (PsiReference ref: references) {
|
||||
list.add(ref);
|
||||
|
||||
@@ -15,32 +15,27 @@
|
||||
*/
|
||||
package com.intellij.util.xml.converters;
|
||||
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.xml.converters.values.ClassValueConverter;
|
||||
import com.intellij.util.xml.GenericDomValue;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
|
||||
import com.intellij.util.xml.ConvertContext;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.UserDataCache;
|
||||
import com.intellij.util.xml.GenericDomValue;
|
||||
import com.intellij.util.xml.converters.values.ClassValueConverter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* User: Sergey.Vasiliev
|
||||
*/
|
||||
public class ClassValueConverterImpl extends ClassValueConverter {
|
||||
private static final UserDataCache<JavaClassReferenceProvider, Project, Object> REFERENCE_PROVIDER = new UserDataCache<JavaClassReferenceProvider, Project, Object>("ClassValueConverterImpl") {
|
||||
@Override
|
||||
protected JavaClassReferenceProvider compute(Project project, Object p) {
|
||||
JavaClassReferenceProvider provider = new JavaClassReferenceProvider(project);
|
||||
provider.setSoft(true);
|
||||
provider.setAllowEmpty(true);
|
||||
return provider;
|
||||
}
|
||||
};
|
||||
private static final JavaClassReferenceProvider REFERENCE_PROVIDER = new JavaClassReferenceProvider();
|
||||
|
||||
static {
|
||||
REFERENCE_PROVIDER.setSoft(true);
|
||||
REFERENCE_PROVIDER.setAllowEmpty(true);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiReference[] createReferences(final GenericDomValue genericDomValue, final PsiElement element, final ConvertContext context) {
|
||||
return REFERENCE_PROVIDER.get(element.getManager().getProject(), null).getReferencesByElement(element);
|
||||
return REFERENCE_PROVIDER.getReferencesByElement(element);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,8 +72,8 @@ public class WordCompletionTest extends CompletionTestCase {
|
||||
}};
|
||||
}
|
||||
};
|
||||
ReferenceProvidersRegistry.getInstance(getProject()).registerReferenceProvider(PsiLiteralExpression.class, softProvider);
|
||||
ReferenceProvidersRegistry.getInstance(getProject()).registerReferenceProvider(PsiLiteralExpression.class, hardProvider);
|
||||
ReferenceProvidersRegistry.getInstance().registerReferenceProvider(PsiLiteralExpression.class, softProvider);
|
||||
ReferenceProvidersRegistry.getInstance().registerReferenceProvider(PsiLiteralExpression.class, hardProvider);
|
||||
|
||||
configureByFile(BASE_PATH + "3.java");
|
||||
checkResultByFile(BASE_PATH + "3_after.java");
|
||||
|
||||
@@ -23,10 +23,17 @@ import com.intellij.openapi.project.Project;
|
||||
*/
|
||||
public abstract class CommonReferenceProviderTypes {
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @see #getInstance()
|
||||
*/
|
||||
public static CommonReferenceProviderTypes getInstance(final Project project) {
|
||||
return ServiceManager.getService(project, CommonReferenceProviderTypes.class);
|
||||
return getInstance();
|
||||
}
|
||||
|
||||
public static CommonReferenceProviderTypes getInstance() {
|
||||
return ServiceManager.getService(CommonReferenceProviderTypes.class);
|
||||
}
|
||||
|
||||
public static final ReferenceProviderType PROPERTIES_FILE_KEY_PROVIDER = new ReferenceProviderType("Properties File Key Provider");
|
||||
public static final ReferenceProviderType URI_PROVIDER = new ReferenceProviderType("Uri references provider");
|
||||
|
||||
@@ -178,7 +178,7 @@ public abstract class DaemonAnalyzerTestCase extends CodeInsightTestCase {
|
||||
if (isPerformanceTest()) {
|
||||
IntentionManager.getInstance().getAvailableIntentionActions(); // hack to avoid slowdowns in PyExtensionFactory
|
||||
PathManagerEx.getTestDataPath(); // to cache stuff
|
||||
ReferenceProvidersRegistry.getInstance(getProject()); // preload tons of classes
|
||||
ReferenceProvidersRegistry.getInstance(); // preload tons of classes
|
||||
InjectedLanguageManager.getInstance(getProject()); // zillion of Dom Sem classes
|
||||
LanguageAnnotators.INSTANCE.allForLanguage(StdLanguages.JAVA); // pile of annotator classes loads
|
||||
LanguageAnnotators.INSTANCE.allForLanguage(StdLanguages.XML);
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.psi;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.patterns.PlatformPatterns;
|
||||
import com.intellij.patterns.StandardPatterns;
|
||||
@@ -60,10 +59,4 @@ public abstract class PsiReferenceRegistrar {
|
||||
|
||||
public abstract <T extends PsiElement> void registerReferenceProvider(@NotNull ElementPattern<T> pattern, @NotNull PomReferenceProvider<T> provider, double priority);
|
||||
|
||||
/**
|
||||
* Return the project to register providers for.
|
||||
* @return project or null, if POM references are registered
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract Project getProject();
|
||||
}
|
||||
|
||||
@@ -254,10 +254,6 @@ public class PomReferenceServiceImpl extends PomReferenceService {
|
||||
double priority) {
|
||||
}
|
||||
|
||||
public Project getProject() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends PsiElement> void registerReferenceProvider(@NotNull ElementPattern<T> pattern,
|
||||
@NotNull PomReferenceProvider<T> provider,
|
||||
|
||||
+4
-15
@@ -21,8 +21,6 @@ import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.NotNullLazyKey;
|
||||
import com.intellij.openapi.util.Trinity;
|
||||
import com.intellij.patterns.*;
|
||||
import com.intellij.pom.references.PomReferenceProvider;
|
||||
@@ -82,17 +80,12 @@ public class ReferenceProvidersRegistry extends PsiReferenceRegistrar {
|
||||
return o2.getThird().compareTo(o1.getThird());
|
||||
}
|
||||
};
|
||||
private final Project myProject;
|
||||
|
||||
private static final NotNullLazyKey<ReferenceProvidersRegistry, Project> INSTANCE_CACHE =
|
||||
ServiceManager.createLazyKey(ReferenceProvidersRegistry.class);
|
||||
|
||||
public static ReferenceProvidersRegistry getInstance(Project project) {
|
||||
return INSTANCE_CACHE.getValue(project);
|
||||
public static ReferenceProvidersRegistry getInstance() {
|
||||
return ServiceManager.getService(ReferenceProvidersRegistry.class);
|
||||
}
|
||||
|
||||
public ReferenceProvidersRegistry(Project project) {
|
||||
myProject = project;
|
||||
public ReferenceProvidersRegistry() {
|
||||
for (final PsiReferenceContributor contributor : ourExtensions) {
|
||||
contributor.registerReferenceProviders(this);
|
||||
}
|
||||
@@ -154,10 +147,6 @@ public class ReferenceProvidersRegistry extends PsiReferenceRegistrar {
|
||||
}
|
||||
}
|
||||
|
||||
public Project getProject() {
|
||||
return myProject;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated {@link com.intellij.psi.PsiReferenceContributor}
|
||||
*/
|
||||
@@ -229,7 +218,7 @@ public class ReferenceProvidersRegistry extends PsiReferenceRegistrar {
|
||||
assert context.isValid() : "Invalid context: " + context;
|
||||
|
||||
final List<Trinity<PsiReferenceProvider, ProcessingContext, Double>> providers =
|
||||
getInstance(context.getProject()).getPairsByElement(context, hints);
|
||||
getInstance().getPairsByElement(context, hints);
|
||||
if (providers.isEmpty()) {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
<projectService serviceInterface="com.intellij.diagnostic.logging.LogConsolePreferences"
|
||||
serviceImplementation="com.intellij.diagnostic.logging.LogConsolePreferences"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry"
|
||||
<applicationService serviceInterface="com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry"
|
||||
serviceImplementation="com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.find.FindManager"
|
||||
|
||||
+11
-7
@@ -18,17 +18,25 @@ package com.intellij.lang.properties;
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.lang.properties.psi.impl.PropertyValueImpl;
|
||||
import com.intellij.patterns.PsiJavaPatterns;
|
||||
import static com.intellij.patterns.PsiJavaPatterns.literalExpression;
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiNameValuePair;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static com.intellij.patterns.PsiJavaPatterns.literalExpression;
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiNameValuePair;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class PropertiesReferenceContributor extends PsiReferenceContributor{
|
||||
|
||||
private static final JavaClassReferenceProvider CLASS_REFERENCE_PROVIDER = new JavaClassReferenceProvider() {
|
||||
public boolean isSoft() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
public void registerReferenceProviders(final PsiReferenceRegistrar registrar) {
|
||||
registrar.registerReferenceProvider(literalExpression(), new PropertiesReferenceProvider(true));
|
||||
registrar.registerReferenceProvider(literalExpression().withParent(
|
||||
@@ -42,11 +50,7 @@ public class PropertiesReferenceContributor extends PsiReferenceContributor{
|
||||
String text = element.getText();
|
||||
String[] words = text.split("\\s");
|
||||
if (words.length != 1) return PsiReference.EMPTY_ARRAY;
|
||||
return new JavaClassReferenceProvider(element.getProject()){
|
||||
public boolean isSoft() {
|
||||
return true;
|
||||
}
|
||||
}.getReferencesByString(words[0], element, 0);
|
||||
return CLASS_REFERENCE_PROVIDER.getReferencesByString(words[0], element, 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+4
-6
@@ -3,25 +3,23 @@ package com.intellij.psi.impl.source.resolve.reference.impl.providers;
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.codeInspection.i18n.JavaI18nUtil;
|
||||
import com.intellij.patterns.PlatformPatterns;
|
||||
import static com.intellij.patterns.XmlPatterns.xmlAttributeValue;
|
||||
import static com.intellij.patterns.XmlPatterns.xmlTag;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.filters.position.FilterPattern;
|
||||
import com.intellij.openapi.project.Project;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.intellij.patterns.XmlPatterns.xmlAttributeValue;
|
||||
import static com.intellij.patterns.XmlPatterns.xmlTag;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class JavaReferenceContributor extends PsiReferenceContributor{
|
||||
public void registerReferenceProviders(final PsiReferenceRegistrar registrar) {
|
||||
final Project project = registrar.getProject();
|
||||
if (project == null) return;
|
||||
|
||||
final JavaClassListReferenceProvider classListProvider = new JavaClassListReferenceProvider(project);
|
||||
final JavaClassListReferenceProvider classListProvider = new JavaClassListReferenceProvider();
|
||||
registrar.registerReferenceProvider(xmlAttributeValue(), classListProvider, PsiReferenceRegistrar.LOWER_PRIORITY);
|
||||
registrar.registerReferenceProvider(xmlTag(), classListProvider, PsiReferenceRegistrar.LOWER_PRIORITY);
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ public class FormReferenceProvider extends PsiReferenceProvider {
|
||||
return;
|
||||
}
|
||||
final String className = valueElement.getValue().replace('$','.');
|
||||
final PsiReference[] referencesByString = new JavaClassReferenceProvider(project).getReferencesByString(className, file, valueElement.getTextRange().getStartOffset() + 1);
|
||||
final PsiReference[] referencesByString = new JavaClassReferenceProvider().getReferencesByString(className, file, valueElement.getTextRange().getStartOffset() + 1);
|
||||
if(referencesByString.length < 1){
|
||||
// There are no references there
|
||||
return;
|
||||
@@ -205,7 +205,7 @@ public class FormReferenceProvider extends PsiReferenceProvider {
|
||||
// component class
|
||||
{
|
||||
if (clsAttribute != null) {
|
||||
final JavaClassReferenceProvider provider = new JavaClassReferenceProvider(tag.getProject());
|
||||
final JavaClassReferenceProvider provider = new JavaClassReferenceProvider();
|
||||
final PsiReference[] referencesByString = provider.getReferencesByString(classNameStr, file, clsAttribute.getValueElement().getTextRange().getStartOffset() + 1);
|
||||
if(referencesByString.length < 1){
|
||||
// There are no references there
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ public class XsltReferenceContributor extends PsiReferenceContributor {
|
||||
PlatformPatterns.psiElement(XmlAttributeValue.class).withParent(xmlAttribute().withLocalName(string().oneOf(
|
||||
"name", "href", "mode", "elements", "exclude-result-prefixes", "extension-element-prefixes", "stylesheet-prefix"
|
||||
)).withParent(xmlTag().withNamespace(XsltSupport.XSLT_NS))),
|
||||
new XsltReferenceProvider(registrar.getProject()));
|
||||
new XsltReferenceProvider());
|
||||
|
||||
// TODO: 1. SchemaReferencesProvider doesn't know about "as" attribute / 2. what to do with non-schema types (xs:yearMonthDuretion, xs:dayTimeDuration)?
|
||||
// registrar.registerReferenceProvider(
|
||||
|
||||
+2
-5
@@ -1,7 +1,6 @@
|
||||
package org.intellij.lang.xpath.xslt.impl.references;
|
||||
|
||||
import com.intellij.javaee.ExternalResourceManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
@@ -35,14 +34,12 @@ import java.util.regex.Pattern;
|
||||
public class XsltReferenceProvider extends PsiReferenceProvider {
|
||||
private static final Key<CachedValue<PsiReference[]>> CACHED_XSLT_REFS = Key.create("CACHED_XSLT_REFS");
|
||||
|
||||
private final CachedValuesManager myCacheManager;
|
||||
private final XsltElementFactory myXsltElementFactory = XsltElementFactory.getInstance();
|
||||
|
||||
private static final Pattern ELEMENT_PATTERN = Pattern.compile("(?:(\\w+):)?(?:\\w+|\\*)");
|
||||
private static final Pattern PREFIX_PATTERN = Pattern.compile("(?:^|\\s)(\\w+)");
|
||||
|
||||
public XsltReferenceProvider(Project project) {
|
||||
myCacheManager = CachedValuesManager.getManager(project);
|
||||
public XsltReferenceProvider() {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -53,7 +50,7 @@ public class XsltReferenceProvider extends PsiReferenceProvider {
|
||||
|
||||
CachedValue<PsiReference[]> cachedValue = attribute.getUserData(CACHED_XSLT_REFS);
|
||||
if (cachedValue == null) {
|
||||
cachedValue = myCacheManager.createCachedValue(new ReferenceProvider(attribute), false);
|
||||
cachedValue = CachedValuesManager.getManager(element.getProject()).createCachedValue(new ReferenceProvider(attribute), false);
|
||||
attribute.putUserData(CACHED_XSLT_REFS, cachedValue);
|
||||
}
|
||||
|
||||
|
||||
@@ -429,7 +429,7 @@
|
||||
<projectService serviceInterface="com.intellij.openapi.vcs.impl.VcsPathPresenter"
|
||||
serviceImplementation="com.intellij.openapi.vcs.impl.ModuleVcsPathPresenter"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.psi.CommonReferenceProviderTypes"
|
||||
<applicationService serviceInterface="com.intellij.psi.CommonReferenceProviderTypes"
|
||||
serviceImplementation="com.intellij.psi.impl.CommonReferenceProviderTypesImpl"/>
|
||||
<projectService serviceInterface="com.intellij.psi.impl.file.PsiDirectoryFactory"
|
||||
serviceImplementation="com.intellij.psi.impl.file.PsiJavaDirectoryFactory"/>
|
||||
|
||||
Reference in New Issue
Block a user