per-language PsiReferenceContributor

This commit is contained in:
Dmitry Avdeev
2011-05-11 11:20:01 +04:00
parent c24ef1bbec
commit 6c77a567e0
10 changed files with 287 additions and 178 deletions
@@ -1,7 +1,9 @@
package com.intellij.codeInsight.completion;
import com.intellij.JavaTestUtil;
import com.intellij.lang.StdLanguages;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.reference.PsiReferenceRegistrarImpl;
import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;
@@ -68,16 +70,18 @@ public class WordCompletionTest extends CompletionTestCase {
}};
}
};
PsiReferenceRegistrarImpl registrar =
(PsiReferenceRegistrarImpl)ReferenceProvidersRegistry.getInstance().getRegistrar(StdLanguages.JAVA);
try {
ReferenceProvidersRegistry.getInstance().registerReferenceProvider(PsiLiteralExpression.class, softProvider);
ReferenceProvidersRegistry.getInstance().registerReferenceProvider(PsiLiteralExpression.class, hardProvider);
registrar.registerReferenceProvider(PsiLiteralExpression.class, softProvider);
registrar.registerReferenceProvider(PsiLiteralExpression.class, hardProvider);
configureByFile(BASE_PATH + "3.java");
checkResultByFile(BASE_PATH + "3_after.java");
}
finally {
ReferenceProvidersRegistry.getInstance().unregisterReferenceProvider(PsiLiteralExpression.class, softProvider);
ReferenceProvidersRegistry.getInstance().unregisterReferenceProvider(PsiLiteralExpression.class, hardProvider);
registrar.unregisterReferenceProvider(PsiLiteralExpression.class, softProvider);
registrar.unregisterReferenceProvider(PsiLiteralExpression.class, hardProvider);
}
}
@@ -0,0 +1,57 @@
/*
* Copyright 2000-2011 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.impl.source.resolve.reference;
import com.intellij.lang.Language;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.extensions.CustomLoadingExtensionPointBean;
import com.intellij.openapi.util.NotNullLazyValue;
import com.intellij.psi.PsiReferenceContributor;
import com.intellij.util.KeyedLazyInstance;
import com.intellij.util.xmlb.annotations.Attribute;
import org.jetbrains.annotations.NotNull;
/**
* @author Dmitry Avdeev
*/
public class PsiReferenceContributorEP extends CustomLoadingExtensionPointBean implements KeyedLazyInstance<PsiReferenceContributor> {
@Attribute("language")
public String language = Language.ANY.getID();
@Attribute("implementation")
public String implementationClass;
private final NotNullLazyValue<PsiReferenceContributor> myHandler = new NotNullLazyValue<PsiReferenceContributor>() {
@NotNull
protected PsiReferenceContributor compute() {
try {
return (PsiReferenceContributor)instantiateExtension(implementationClass, ApplicationManager.getApplication().getPicoContainer());
}
catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
};
public PsiReferenceContributor getInstance() {
return myHandler.getValue();
}
public String getKey() {
return language;
}
}
@@ -0,0 +1,184 @@
/*
* Copyright 2000-2011 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.impl.source.resolve.reference;
import com.intellij.openapi.util.Trinity;
import com.intellij.patterns.*;
import com.intellij.pom.references.PomReferenceProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReferenceProvider;
import com.intellij.psi.PsiReferenceRegistrar;
import com.intellij.psi.PsiReferenceService;
import com.intellij.psi.filters.ElementFilter;
import com.intellij.psi.filters.position.FilterPattern;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ConcurrencyUtil;
import com.intellij.util.ProcessingContext;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ConcurrentFactoryMap;
import com.intellij.util.containers.ConcurrentHashMap;
import com.intellij.util.containers.FactoryMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.concurrent.ConcurrentMap;
/**
* @author Dmitry Avdeev
*/
public class PsiReferenceRegistrarImpl extends PsiReferenceRegistrar {
private final ConcurrentMap<Class, SimpleProviderBinding> myBindingsMap = new ConcurrentHashMap<Class, SimpleProviderBinding>();
private final ConcurrentMap<Class, NamedObjectProviderBinding> myNamedBindingsMap = new ConcurrentHashMap<Class, NamedObjectProviderBinding>();
private final FactoryMap<Class, List<Class>> myKnownSupers = new ConcurrentFactoryMap<Class, List<Class>>() {
@Override
protected List<Class> create(Class key) {
final Set<Class> result = new LinkedHashSet<Class>();
for (Class candidate : myBindingsMap.keySet()) {
if (candidate.isAssignableFrom(key)) {
result.add(candidate);
}
}
for (Class candidate : myNamedBindingsMap.keySet()) {
if (candidate.isAssignableFrom(key)) {
result.add(candidate);
}
}
if (result.isEmpty()) {
return Collections.emptyList();
}
return new ArrayList<Class>(result);
}
};
/**
* @deprecated {@see com.intellij.psi.PsiReferenceContributor
*/
public void registerReferenceProvider(@Nullable ElementFilter elementFilter,
@NotNull Class scope,
@NotNull PsiReferenceProvider provider,
double priority) {
registerReferenceProvider(PlatformPatterns.psiElement(scope).and(new FilterPattern(elementFilter)), provider, priority);
}
public <T extends PsiElement> void registerReferenceProvider(@NotNull ElementPattern<T> pattern,
@NotNull PomReferenceProvider<T> provider,
double priority) {
}
public <T extends PsiElement> void registerReferenceProvider(@NotNull ElementPattern<T> pattern,
@NotNull PsiReferenceProvider provider,
double priority) {
myKnownSupers.clear(); // we should clear the cache
final Class scope = pattern.getCondition().getInitialCondition().getAcceptedClass();
final List<PatternCondition<? super T>> conditions = pattern.getCondition().getConditions();
for (int i = 0, conditionsSize = conditions.size(); i < conditionsSize; i++) {
PatternCondition<? super T> _condition = conditions.get(i);
if (_condition instanceof PsiNamePatternCondition) {
final PsiNamePatternCondition<?> nameCondition = (PsiNamePatternCondition)_condition;
List<PatternCondition<? super String>> conditions1 = nameCondition.getNamePattern().getCondition().getConditions();
for (int i1 = 0, conditions1Size = conditions1.size(); i1 < conditions1Size; i1++) {
PatternCondition<? super String> condition = conditions1.get(i1);
if (condition instanceof ValuePatternCondition) {
final Collection<String> strings = ((ValuePatternCondition)condition).getValues();
registerNamedReferenceProvider(ArrayUtil.toStringArray(strings), nameCondition, scope, true, provider, priority, pattern);
return;
}
if (condition instanceof CaseInsensitiveValuePatternCondition) {
final String[] strings = ((CaseInsensitiveValuePatternCondition)condition).getValues();
registerNamedReferenceProvider(strings, nameCondition, scope, false, provider, priority, pattern);
return;
}
}
break;
}
}
while (true) {
final SimpleProviderBinding providerBinding = myBindingsMap.get(scope);
if (providerBinding != null) {
providerBinding.registerProvider(provider, pattern, priority);
return;
}
final SimpleProviderBinding binding = new SimpleProviderBinding();
binding.registerProvider(provider, pattern, priority);
if (myBindingsMap.putIfAbsent(scope, binding) == null) break;
}
}
/**
* @deprecated {@link com.intellij.psi.PsiReferenceContributor}
*/
public void registerReferenceProvider(@Nullable ElementFilter elementFilter,
@NotNull Class scope,
@NotNull PsiReferenceProvider provider) {
registerReferenceProvider(elementFilter, scope, provider, DEFAULT_PRIORITY);
}
public void unregisterReferenceProvider(@NotNull Class scope, @NotNull PsiReferenceProvider provider) {
final ProviderBinding providerBinding = myBindingsMap.get(scope);
providerBinding.unregisterProvider(provider);
}
private void registerNamedReferenceProvider(final String[] names, final PsiNamePatternCondition<?> nameCondition,
final Class scopeClass,
final boolean caseSensitive,
final PsiReferenceProvider provider, final double priority, final ElementPattern pattern) {
NamedObjectProviderBinding providerBinding = myNamedBindingsMap.get(scopeClass);
if (providerBinding == null) {
providerBinding = ConcurrencyUtil.cacheOrGet(myNamedBindingsMap, scopeClass, new NamedObjectProviderBinding() {
protected String getName(final PsiElement position) {
return nameCondition.getPropertyValue(position);
}
});
}
providerBinding.registerProvider(names, pattern, caseSensitive, provider, priority);
}
/**
* @see com.intellij.psi.PsiReferenceContributor
* @deprecated
*/
public void registerReferenceProvider(@NotNull Class scope, @NotNull PsiReferenceProvider provider) {
registerReferenceProvider(null, scope, provider);
}
@NotNull
List<Trinity<PsiReferenceProvider, ProcessingContext, Double>> getPairsByElement(@NotNull PsiElement element,
@NotNull PsiReferenceService.Hints hints) {
final Class<? extends PsiElement> clazz = element.getClass();
List<Trinity<PsiReferenceProvider, ProcessingContext, Double>> ret = null;
for (final Class aClass : myKnownSupers.get(clazz)) {
final SimpleProviderBinding simpleBinding = myBindingsMap.get(aClass);
final NamedObjectProviderBinding namedBinding = myNamedBindingsMap.get(aClass);
if (simpleBinding == null && namedBinding == null) continue;
if (ret == null) ret = new SmartList<Trinity<PsiReferenceProvider, ProcessingContext, Double>>();
if (simpleBinding != null) {
simpleBinding.addAcceptableReferenceProviders(element, ret, hints);
}
if (namedBinding != null) {
namedBinding.addAcceptableReferenceProviders(element, ret, hints);
}
}
return ret == null ? Collections.<Trinity<PsiReferenceProvider, ProcessingContext, Double>>emptyList() : ret;
}
}
@@ -16,30 +16,23 @@
package com.intellij.psi.impl.source.resolve.reference;
import com.intellij.codeInsight.completion.LegacyCompletionContributor;
import com.intellij.lang.Language;
import com.intellij.lang.LanguageExtension;
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.util.Trinity;
import com.intellij.patterns.*;
import com.intellij.pom.references.PomReferenceProvider;
import com.intellij.psi.*;
import com.intellij.psi.filters.ElementFilter;
import com.intellij.psi.filters.position.FilterPattern;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ConcurrencyUtil;
import com.intellij.util.ProcessingContext;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ConcurrentFactoryMap;
import com.intellij.util.containers.ConcurrentHashMap;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.FactoryMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.concurrent.ConcurrentMap;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
/**
* Created by IntelliJ IDEA.
@@ -48,30 +41,9 @@ import java.util.concurrent.ConcurrentMap;
* Time: 17:13:45
* To change this template use Options | File Templates.
*/
public class ReferenceProvidersRegistry extends PsiReferenceRegistrar {
private static final PsiReferenceContributor[] ourExtensions = Extensions.getExtensions(PsiReferenceContributor.EP_NAME);
private final ConcurrentMap<Class, SimpleProviderBinding> myBindingsMap = new ConcurrentHashMap<Class, SimpleProviderBinding>();
private final ConcurrentMap<Class, NamedObjectProviderBinding> myNamedBindingsMap = new ConcurrentHashMap<Class, NamedObjectProviderBinding>();
private final FactoryMap<Class, List<Class>> myKnownSupers = new ConcurrentFactoryMap<Class, List<Class>>() {
@Override
protected List<Class> create(Class key) {
final Set<Class> result = new LinkedHashSet<Class>();
for (Class candidate : myBindingsMap.keySet()) {
if (candidate.isAssignableFrom(key)) {
result.add(candidate);
}
}
for (Class candidate : myNamedBindingsMap.keySet()) {
if (candidate.isAssignableFrom(key)) {
result.add(candidate);
}
}
if (result.isEmpty()) {
return Collections.emptyList();
}
return new ArrayList<Class>(result);
}
};
public class ReferenceProvidersRegistry {
private static final LanguageExtension<PsiReferenceContributor> EXTENSION = new LanguageExtension<PsiReferenceContributor>(PsiReferenceContributor.EP_NAME.getName());
private static final Comparator<Trinity<PsiReferenceProvider, ProcessingContext, Double>> PRIORITY_COMPARATOR =
new Comparator<Trinity<PsiReferenceProvider, ProcessingContext, Double>>() {
@@ -81,131 +53,25 @@ public class ReferenceProvidersRegistry extends PsiReferenceRegistrar {
}
};
@SuppressWarnings({"MismatchedQueryAndUpdateOfCollection"})
private final static Map<Language, PsiReferenceRegistrarImpl> ourRegistrars = new FactoryMap<Language, PsiReferenceRegistrarImpl>() {
@Override
protected PsiReferenceRegistrarImpl create(Language language) {
PsiReferenceRegistrarImpl registrar = new PsiReferenceRegistrarImpl();
List<PsiReferenceContributor> contributors = EXTENSION.allForLanguage(language);
for (PsiReferenceContributor contributor : contributors) {
contributor.registerReferenceProviders(registrar);
}
return registrar;
}
};
public static ReferenceProvidersRegistry getInstance() {
return ServiceManager.getService(ReferenceProvidersRegistry.class);
}
public ReferenceProvidersRegistry() {
for (final PsiReferenceContributor contributor : ourExtensions) {
contributor.registerReferenceProviders(this);
}
}
/**
* @deprecated {@see com.intellij.psi.PsiReferenceContributor
*/
public void registerReferenceProvider(@Nullable ElementFilter elementFilter,
@NotNull Class scope,
@NotNull PsiReferenceProvider provider,
double priority) {
registerReferenceProvider(PlatformPatterns.psiElement(scope).and(new FilterPattern(elementFilter)), provider, priority);
}
public <T extends PsiElement> void registerReferenceProvider(@NotNull ElementPattern<T> pattern,
@NotNull PomReferenceProvider<T> provider,
double priority) {
}
public <T extends PsiElement> void registerReferenceProvider(@NotNull ElementPattern<T> pattern,
@NotNull PsiReferenceProvider provider,
double priority) {
myKnownSupers.clear();
final Class scope = pattern.getCondition().getInitialCondition().getAcceptedClass();
final List<PatternCondition<? super T>> conditions = pattern.getCondition().getConditions();
for (int i = 0, conditionsSize = conditions.size(); i < conditionsSize; i++) {
PatternCondition<? super T> _condition = conditions.get(i);
if (_condition instanceof PsiNamePatternCondition) {
final PsiNamePatternCondition<?> nameCondition = (PsiNamePatternCondition)_condition;
List<PatternCondition<? super String>> conditions1 = nameCondition.getNamePattern().getCondition().getConditions();
for (int i1 = 0, conditions1Size = conditions1.size(); i1 < conditions1Size; i1++) {
PatternCondition<? super String> condition = conditions1.get(i1);
if (condition instanceof ValuePatternCondition) {
final Collection<String> strings = ((ValuePatternCondition)condition).getValues();
registerNamedReferenceProvider(ArrayUtil.toStringArray(strings), nameCondition, scope, true, provider, priority, pattern);
return;
}
if (condition instanceof CaseInsensitiveValuePatternCondition) {
final String[] strings = ((CaseInsensitiveValuePatternCondition)condition).getValues();
registerNamedReferenceProvider(strings, nameCondition, scope, false, provider, priority, pattern);
return;
}
}
break;
}
}
while (true) {
final SimpleProviderBinding providerBinding = myBindingsMap.get(scope);
if (providerBinding != null) {
providerBinding.registerProvider(provider, pattern, priority);
return;
}
final SimpleProviderBinding binding = new SimpleProviderBinding();
binding.registerProvider(provider, pattern, priority);
if (myBindingsMap.putIfAbsent(scope, binding) == null) break;
}
}
/**
* @deprecated {@link com.intellij.psi.PsiReferenceContributor}
*/
public void registerReferenceProvider(@Nullable ElementFilter elementFilter,
@NotNull Class scope,
@NotNull PsiReferenceProvider provider) {
registerReferenceProvider(elementFilter, scope, provider, DEFAULT_PRIORITY);
}
public void unregisterReferenceProvider(@NotNull Class scope, @NotNull PsiReferenceProvider provider) {
final ProviderBinding providerBinding = myBindingsMap.get(scope);
providerBinding.unregisterProvider(provider);
}
private void registerNamedReferenceProvider(final String[] names, final PsiNamePatternCondition<?> nameCondition,
final Class scopeClass,
final boolean caseSensitive,
final PsiReferenceProvider provider, final double priority, final ElementPattern pattern) {
NamedObjectProviderBinding providerBinding = myNamedBindingsMap.get(scopeClass);
if (providerBinding == null) {
providerBinding = ConcurrencyUtil.cacheOrGet(myNamedBindingsMap, scopeClass, new NamedObjectProviderBinding() {
protected String getName(final PsiElement position) {
return nameCondition.getPropertyValue(position);
}
});
}
providerBinding.registerProvider(names, pattern, caseSensitive, provider, priority);
}
/**
* @see com.intellij.psi.PsiReferenceContributor
* @deprecated
*/
public void registerReferenceProvider(@NotNull Class scope, @NotNull PsiReferenceProvider provider) {
registerReferenceProvider(null, scope, provider);
}
@NotNull
private List<Trinity<PsiReferenceProvider, ProcessingContext, Double>> getPairsByElement(@NotNull PsiElement element,
@NotNull PsiReferenceService.Hints hints) {
final Class<? extends PsiElement> clazz = element.getClass();
List<Trinity<PsiReferenceProvider, ProcessingContext, Double>> ret = null;
for (final Class aClass : myKnownSupers.get(clazz)) {
final SimpleProviderBinding simpleBinding = myBindingsMap.get(aClass);
final NamedObjectProviderBinding namedBinding = myNamedBindingsMap.get(aClass);
if (simpleBinding == null && namedBinding == null) continue;
if (ret == null) ret = new SmartList<Trinity<PsiReferenceProvider, ProcessingContext, Double>>();
if (simpleBinding != null) {
simpleBinding.addAcceptableReferenceProviders(element, ret, hints);
}
if (namedBinding != null) {
namedBinding.addAcceptableReferenceProviders(element, ret, hints);
}
}
return ret == null ? Collections.<Trinity<PsiReferenceProvider, ProcessingContext, Double>>emptyList() : ret;
public PsiReferenceRegistrar getRegistrar(Language language) {
return ourRegistrars.get(language);
}
@Deprecated
@@ -217,8 +83,10 @@ public class ReferenceProvidersRegistry extends PsiReferenceRegistrar {
ProgressManager.checkCanceled();
assert context.isValid() : "Invalid context: " + context;
final List<Trinity<PsiReferenceProvider, ProcessingContext, Double>> providers =
getInstance().getPairsByElement(context, hints);
PsiReferenceRegistrarImpl registrar = ourRegistrars.get(context.getLanguage());
SmartList<Trinity<PsiReferenceProvider, ProcessingContext, Double>> providers = new SmartList<Trinity<PsiReferenceProvider, ProcessingContext, Double>>();
providers.addAll(registrar.getPairsByElement(context, hints));
providers.addAll(ourRegistrars.get(Language.ANY).getPairsByElement(context, hints));
if (providers.isEmpty()) {
return PsiReference.EMPTY_ARRAY;
}
@@ -228,12 +96,7 @@ public class ReferenceProvidersRegistry extends PsiReferenceRegistrar {
return firstProvider.getFirst().getReferencesByElement(context, firstProvider.getSecond());
}
((SmartList<Trinity<PsiReferenceProvider, ProcessingContext, Double>>)providers).sort(PRIORITY_COMPARATOR);
if (LegacyCompletionContributor.DEBUG) {
System.out.println("ReferenceProvidersRegistry.getReferencesFromProviders");
System.out.println("providers = " + providers);
}
providers.sort(PRIORITY_COMPARATOR);
List<PsiReference> result = new ArrayList<PsiReference>();
final double maxPriority = providers.get(0).getThird();
@@ -266,7 +266,7 @@
<extensionPoint name="fileContextProvider" interface="com.intellij.psi.FileContextProvider" area="IDEA_PROJECT"/>
<extensionPoint name="psi.fileReferenceHelper" interface="com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceHelper"/>
<extensionPoint name="psi.referenceContributor" interface="com.intellij.psi.PsiReferenceContributor"/>
<extensionPoint name="psi.referenceContributor" beanClass="com.intellij.psi.impl.source.resolve.reference.PsiReferenceContributorEP"/>
<extensionPoint name="psi.referenceProvider" beanClass="com.intellij.psi.PsiReferenceProviderBean"/>
<extensionPoint name="patterns.patternClass" beanClass="com.intellij.patterns.compiler.PatternClassBean"/>
@@ -18,19 +18,20 @@ package org.intellij.plugins.intelliLang.inject.java;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Computable;
import com.intellij.patterns.PatternCondition;
import static com.intellij.patterns.PsiJavaPatterns.literalExpression;
import com.intellij.patterns.StandardPatterns;
import com.intellij.psi.*;
import com.intellij.util.ProcessingContext;
import org.intellij.plugins.intelliLang.Configuration;
import org.intellij.plugins.intelliLang.util.PsiUtilEx;
import org.intellij.plugins.intelliLang.util.AnnotationUtilEx;
import org.intellij.plugins.intelliLang.util.PsiUtilEx;
import org.jetbrains.annotations.NotNull;
import static com.intellij.patterns.PsiJavaPatterns.literalExpression;
/**
* Provides references to Language-IDs and RegExp enums for completion.
*/
final class LanguageReferenceProvider extends PsiReferenceContributor {
public final class LanguageReferenceProvider extends PsiReferenceContributor {
private final Configuration myConfig = Configuration.getInstance();
private final Computable<String> ANNOTATION_NAME = new Computable<String>() {
+1 -1
View File
@@ -13,7 +13,7 @@
<configurationProducer implementation="com.theoryinpractice.testng.configuration.TestNGSuiteConfigurationProducer"/>
<inspectionToolProvider implementation="com.theoryinpractice.testng.inspection.TestNGInspectionsToolProvider"/>
<configurationType implementation="com.theoryinpractice.testng.configuration.TestNGConfigurationType"/>
<psi.referenceContributor implementation="com.theoryinpractice.testng.TestNGReferenceContributor"/>
<psi.referenceContributor language="JAVA" implementation="com.theoryinpractice.testng.TestNGReferenceContributor"/>
<intentionAction>
<className>com.theoryinpractice.testng.intention.TestNGOrderEntryFix</className>
</intentionAction>
+1 -1
View File
@@ -104,7 +104,7 @@
<compiler implementation="com.intellij.uiDesigner.make.Form2ByteCodeCompiler"/>
<compiler implementation="com.intellij.uiDesigner.make.Form2SourceCompiler"/>
<psi.referenceContributor implementation="com.intellij.uiDesigner.binding.FormReferenceContributor"/>
<psi.referenceContributor language="TEXT" implementation="com.intellij.uiDesigner.binding.FormReferenceContributor"/>
<refactoring.elementListenerProvider implementation="com.intellij.uiDesigner.palette.PaletteRefactoringListenerProvider"/>
<refactoring.moveHandler implementation="com.intellij.uiDesigner.projectView.FormMoveProvider"/>
@@ -133,7 +133,7 @@
<treeStructureProvider implementation="org.intellij.lang.xpath.xslt.impl.XsltTreeStructureProvider"/>
<psi.referenceContributor implementation="org.intellij.lang.xpath.xslt.impl.XsltReferenceContributor"/>
<psi.referenceContributor language="XML" implementation="org.intellij.lang.xpath.xslt.impl.XsltReferenceContributor"/>
<standardResourceProvider implementation="org.intellij.lang.xpath.xslt.impl.XsltResourceProvider"/>
<defaultLiveTemplatesProvider implementation="org.intellij.plugins.xpathView.XPathAppComponent" />
+1 -1
View File
@@ -58,7 +58,7 @@
<usageTypeProvider implementation="com.intellij.util.xml.DomUsageTypeProvider"/>
<psi.referenceContributor implementation="com.intellij.util.xml.impl.DomReferenceContributor"/>
<psi.referenceContributor language="XML" implementation="com.intellij.util.xml.impl.DomReferenceContributor"/>
<xml.elementDescriptorProvider implementation="com.intellij.util.xml.impl.DomDescriptorProvider"/>