mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't parse linked schemas
This commit is contained in:
@@ -25,6 +25,7 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.PsiWhiteSpace;
|
||||
import com.intellij.psi.XmlElementFactory;
|
||||
import com.intellij.psi.impl.FakePsiElement;
|
||||
import com.intellij.psi.impl.source.xml.SchemaPrefix;
|
||||
import com.intellij.psi.meta.PsiMetaData;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
@@ -97,6 +98,10 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
|
||||
PsiElement nameElement = null;
|
||||
String key = null;
|
||||
|
||||
if (element instanceof FakePsiElement) {
|
||||
element = element.getNavigationElement();
|
||||
}
|
||||
|
||||
if (element instanceof XmlElementDecl) {
|
||||
nameElement = ((XmlElementDecl)element).getNameElement();
|
||||
} else if (element instanceof XmlAttributeDecl) {
|
||||
|
||||
+41
-4
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.FakePsiElement;
|
||||
import com.intellij.psi.impl.source.tree.TreeUtil;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.psi.xml.XmlAttribute;
|
||||
@@ -291,10 +292,7 @@ public class RngElementDescriptor implements XmlElementDescriptor {
|
||||
final PsiElement at;
|
||||
if (column > 0) {
|
||||
if (decl.getContainingFile().getFileType() == RncFileType.getInstance()) {
|
||||
final PsiElement rncElement = file.findElementAt(startOffset + column);
|
||||
final ASTNode pattern = rncElement != null ? TreeUtil.findParent(rncElement.getNode(), RncElementTypes.PATTERN) : null;
|
||||
final ASTNode nameClass = pattern != null ? pattern.findChildByType(RncElementTypes.NAME_CLASS) : null;
|
||||
return nameClass != null ? nameClass.getPsi() : rncElement;
|
||||
return new RncLocationPsiElement(file, startOffset, column);
|
||||
}
|
||||
at = file.findElementAt(startOffset + column - 2);
|
||||
} else {
|
||||
@@ -414,4 +412,43 @@ public class RngElementDescriptor implements XmlElementDescriptor {
|
||||
public DElementPattern getElementPattern() {
|
||||
return myElementPattern;
|
||||
}
|
||||
|
||||
private static class RncLocationPsiElement extends FakePsiElement {
|
||||
private final PsiFile myFile;
|
||||
private final int myStartOffset;
|
||||
private final int myColumn;
|
||||
|
||||
public RncLocationPsiElement(PsiFile file, int startOffset, int column) {
|
||||
myFile = file;
|
||||
myStartOffset = startOffset;
|
||||
myColumn = column;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiElement getNavigationElement() {
|
||||
final PsiElement rncElement = myFile.findElementAt(myStartOffset + myColumn);
|
||||
final ASTNode pattern = rncElement != null ? TreeUtil.findParent(rncElement.getNode(), RncElementTypes.PATTERN) : null;
|
||||
final ASTNode nameClass = pattern != null ? pattern.findChildByType(RncElementTypes.NAME_CLASS) : null;
|
||||
return nameClass != null ? nameClass.getPsi() : rncElement;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement getParent() {
|
||||
return getNavigationElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object another) {
|
||||
return another instanceof RncLocationPsiElement &&
|
||||
((RncLocationPsiElement)another).myFile == myFile &&
|
||||
((RncLocationPsiElement)another).myStartOffset == myStartOffset &&
|
||||
((RncLocationPsiElement)another).myColumn == myColumn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(myFile, myStartOffset, myColumn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user