diff --git a/platform/core-impl/src/com/intellij/psi/ResolvingHint.java b/platform/core-api/src/com/intellij/psi/ResolvingHint.java similarity index 100% rename from platform/core-impl/src/com/intellij/psi/ResolvingHint.java rename to platform/core-api/src/com/intellij/psi/ResolvingHint.java diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java index 18c97c2a839d..cd679e793553 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java @@ -25,6 +25,7 @@ import com.intellij.pom.references.PomService; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; import com.intellij.psi.PsiReferenceBase; +import com.intellij.psi.ResolvingHint; import com.intellij.psi.impl.PomTargetPsiElementImpl; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; @@ -42,7 +43,7 @@ import java.util.List; /** * @author peter */ -public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { +public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider, ResolvingHint { private final GenericDomValue myGenericValue; public GenericDomValueReference(GenericDomValue domValue) { @@ -217,4 +218,10 @@ public class GenericDomValueReference extends PsiReferenceBase im } return ArrayUtil.EMPTY_OBJECT_ARRAY; } + + @Override + public boolean canResolveTo(Class elementClass) { + Converter converter = getConverter(); + return !(converter instanceof ResolvingConverter) || ((ResolvingConverter)converter).canResolveTo(elementClass); + } } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ResolvingConverter.java b/xml/dom-openapi/src/com/intellij/util/xml/ResolvingConverter.java index 7c39d3ecb4c5..c00d49de288e 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ResolvingConverter.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ResolvingConverter.java @@ -19,6 +19,7 @@ import com.intellij.codeInsight.CodeInsightBundle; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.psi.PsiElement; +import com.intellij.psi.ResolvingHint; import com.intellij.psi.xml.XmlTag; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -34,57 +35,7 @@ import java.util.Set; * * @author peter */ -public abstract class ResolvingConverter extends Converter { - @Deprecated - public static final ResolvingConverter EMPTY_CONVERTER = new ResolvingConverter() { - @Override - @NotNull - public Collection getVariants(final ConvertContext context) { - return Collections.emptyList(); - } - - @Override - public Object fromString(final String s, final ConvertContext context) { - return s; - } - - @Override - public String toString(final Object t, final ConvertContext context) { - return String.valueOf(t); - } - }; - - /** @see com.intellij.util.xml.converters.values.BooleanValueConverter */ - @Deprecated - public static final Converter BOOLEAN_CONVERTER = new ResolvingConverter() { - @Override - public Boolean fromString(final String s, final ConvertContext context) { - if ("true".equalsIgnoreCase(s)) { - return Boolean.TRUE; - } - if ("false".equalsIgnoreCase(s)) { - return Boolean.FALSE; - } - return null; - } - - @Override - public String toString(final Boolean t, final ConvertContext context) { - return t == null? null:t.toString(); - } - - @Override - @NotNull - public Collection getVariants(final ConvertContext context) { - final DomElement element = context.getInvocationElement(); - if (element instanceof GenericDomValue) { - final SubTag annotation = element.getAnnotation(SubTag.class); - if (annotation != null && annotation.indicator()) return Collections.emptyList(); - } - - return Arrays.asList(Boolean.FALSE, Boolean.TRUE); - } - }; +public abstract class ResolvingConverter extends Converter implements ResolvingHint { @Override public String getErrorMessage(@Nullable String s, final ConvertContext context) { @@ -170,6 +121,11 @@ public abstract class ResolvingConverter extends Converter { return resolveResult != null && element.getManager().areElementsEquivalent(element, getPsiElement(resolveResult)); } + @Override + public boolean canResolveTo(Class elementClass) { + return true; + } + /** * Delegate from {@link com.intellij.psi.PsiReference#resolve()} * @param o {@link #fromString(String, ConvertContext)} result @@ -242,4 +198,55 @@ public abstract class ResolvingConverter extends Converter { return myWrappedConverter.toString(t, context); } } + + @Deprecated + public static final ResolvingConverter EMPTY_CONVERTER = new ResolvingConverter() { + @Override + @NotNull + public Collection getVariants(final ConvertContext context) { + return Collections.emptyList(); + } + + @Override + public Object fromString(final String s, final ConvertContext context) { + return s; + } + + @Override + public String toString(final Object t, final ConvertContext context) { + return String.valueOf(t); + } + }; + + /** @see com.intellij.util.xml.converters.values.BooleanValueConverter */ + @Deprecated + public static final Converter BOOLEAN_CONVERTER = new ResolvingConverter() { + @Override + public Boolean fromString(final String s, final ConvertContext context) { + if ("true".equalsIgnoreCase(s)) { + return Boolean.TRUE; + } + if ("false".equalsIgnoreCase(s)) { + return Boolean.FALSE; + } + return null; + } + + @Override + public String toString(final Boolean t, final ConvertContext context) { + return t == null? null:t.toString(); + } + + @Override + @NotNull + public Collection getVariants(final ConvertContext context) { + final DomElement element = context.getInvocationElement(); + if (element instanceof GenericDomValue) { + final SubTag annotation = element.getAnnotation(SubTag.class); + if (annotation != null && annotation.indicator()) return Collections.emptyList(); + } + + return Arrays.asList(Boolean.FALSE, Boolean.TRUE); + } + }; }