mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
WEB-37928 Angular template - allow to choose which source of binding to navigate to.
This commit is contained in:
+3
-1
@@ -149,6 +149,8 @@ public class RngXmlAttributeDescriptor extends BasicXmlAttributeDescriptor {
|
||||
return myElementDescriptor.getDeclaration(it.next());
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Collection<PsiElement> getDeclarations() {
|
||||
return ContainerUtil.map2List(myDeclarations, locator -> myElementDescriptor.getDeclaration(locator));
|
||||
}
|
||||
@@ -227,4 +229,4 @@ public class RngXmlAttributeDescriptor extends BasicXmlAttributeDescriptor {
|
||||
}
|
||||
}};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,11 +16,16 @@
|
||||
|
||||
package com.intellij.xml;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.meta.PsiMetaData;
|
||||
import com.intellij.psi.xml.XmlElement;
|
||||
import com.intellij.util.ArrayFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* @author Mike
|
||||
*/
|
||||
@@ -43,4 +48,11 @@ public interface XmlAttributeDescriptor extends PsiMetaData {
|
||||
|
||||
@Nullable
|
||||
String validateValue(XmlElement context, String value);
|
||||
|
||||
@NotNull
|
||||
default Collection<PsiElement> getDeclarations() {
|
||||
PsiElement declaration = getDeclaration();
|
||||
return declaration != null ? Collections.singleton(declaration)
|
||||
: Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
+9
@@ -20,6 +20,9 @@ import com.intellij.psi.xml.XmlElement;
|
||||
import com.intellij.xml.XmlAttributeDescriptor;
|
||||
import com.intellij.xml.impl.BasicXmlAttributeDescriptor;
|
||||
import com.intellij.xml.impl.XmlEnumerationDescriptor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author Maxim.Mossienko
|
||||
@@ -80,6 +83,12 @@ public class HtmlAttributeDescriptorImpl extends BasicXmlAttributeDescriptor {
|
||||
return delegate.getDeclaration();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<PsiElement> getDeclarations() {
|
||||
return delegate.getDeclarations();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName(PsiElement context) {
|
||||
return delegate.getName(context);
|
||||
|
||||
@@ -18,19 +18,19 @@ package com.intellij.psi.impl.source.xml;
|
||||
import com.intellij.openapi.util.NullableLazyValue;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.meta.PsiMetaOwner;
|
||||
import com.intellij.psi.xml.XmlAttribute;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.xml.XmlAttributeDescriptor;
|
||||
import com.intellij.xml.XmlElementDescriptor;
|
||||
import com.intellij.xml.impl.XmlAttributeDescriptorEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class XmlAttributeReference implements PsiReference {
|
||||
public class XmlAttributeReference implements PsiPolyVariantReference {
|
||||
private final NullableLazyValue<XmlAttributeDescriptor> myDescriptor = new NullableLazyValue<XmlAttributeDescriptor>() {
|
||||
@Override
|
||||
protected XmlAttributeDescriptor compute() {
|
||||
@@ -70,6 +70,13 @@ public class XmlAttributeReference implements PsiReference {
|
||||
return myAttribute.getName();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ResolveResult[] multiResolve(boolean incompleteCode) {
|
||||
final XmlAttributeDescriptor descriptor = getDescriptor();
|
||||
return descriptor != null ? PsiElementResolveResult.createResults(descriptor.getDeclarations())
|
||||
: ResolveResult.EMPTY_ARRAY;
|
||||
}
|
||||
@Override
|
||||
public PsiElement handleElementRename(@NotNull String newElementName) throws IncorrectOperationException {
|
||||
String newName = newElementName;
|
||||
@@ -97,7 +104,9 @@ public class XmlAttributeReference implements PsiReference {
|
||||
|
||||
@Override
|
||||
public boolean isReferenceTo(@NotNull PsiElement element) {
|
||||
return myAttribute.getManager().areElementsEquivalent(element, resolve());
|
||||
PsiManager manager = getElement().getManager();
|
||||
return ContainerUtil.exists(multiResolve(false), result ->
|
||||
result.isValidResult() && manager.areElementsEquivalent(element, result.getElement()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -112,7 +121,7 @@ public class XmlAttributeReference implements PsiReference {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private XmlAttributeDescriptor getDescriptor() {
|
||||
protected XmlAttributeDescriptor getDescriptor() {
|
||||
return myDescriptor.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ import com.intellij.util.ArrayUtilRt;
|
||||
import com.intellij.xml.XmlAttributeDescriptor;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import static com.intellij.util.containers.ContainerUtil.getFirstItem;
|
||||
|
||||
public abstract class BasicXmlAttributeDescriptor extends XmlEnumerationDescriptor implements XmlAttributeDescriptor {
|
||||
@Override
|
||||
public String validateValue(XmlElement context, String value) {
|
||||
@@ -51,12 +53,12 @@ public abstract class BasicXmlAttributeDescriptor extends XmlEnumerationDescript
|
||||
@Override
|
||||
protected PsiElement getEnumeratedValueDeclaration(XmlElement xmlElement, String value) {
|
||||
String[] values = getEnumeratedValues();
|
||||
if (values == null || values.length == 0) return getDeclaration();
|
||||
return ArrayUtilRt.find(values, value) != -1 ? getDeclaration() : null;
|
||||
if (values == null || values.length == 0) return getFirstItem(getDeclarations());
|
||||
return ArrayUtilRt.find(values, value) != -1 ? getFirstItem(getDeclarations()) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PsiElement getDefaultValueDeclaration() {
|
||||
return getDeclaration();
|
||||
return getFirstItem(getDeclarations());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user