support @see class.name etc. | 支持 @see 类名等
This commit is contained in:
@@ -53,6 +53,9 @@ public class LineEnd extends EditorLinePainter {
|
||||
}
|
||||
int startOffset = document.getLineStartOffset(lineNumber);
|
||||
int endOffset = document.getLineEndOffset(lineNumber);
|
||||
if (startOffset == endOffset) {
|
||||
return null;
|
||||
}
|
||||
if (AppSettingsState.getInstance().findElementRightToLeft) {
|
||||
return ResolveElementRightToLeftUtils.resolveElement(viewProvider, startOffset, endOffset);
|
||||
}
|
||||
|
||||
@@ -18,8 +18,8 @@ public class ResolveElementLeftToRightUtils {
|
||||
};
|
||||
|
||||
@Nullable
|
||||
public static PsiElement resolveElement(FileViewProvider viewProvider, Document document, int startOffset,
|
||||
int endOffset) {
|
||||
public static PsiElement resolveElement(FileViewProvider viewProvider, Document document,
|
||||
int startOffset, int endOffset) {
|
||||
String text = document.getText(new TextRange(startOffset, endOffset));
|
||||
int offset = 0;
|
||||
for (String s : KEYS) {
|
||||
@@ -47,24 +47,18 @@ public class ResolveElementLeftToRightUtils {
|
||||
startOffset = 0;
|
||||
}
|
||||
PsiElement element = viewProvider.findElementAt(offset, JavaLanguage.INSTANCE);
|
||||
PsiIdentifier psiIdentifier = psiIdentifier(endOffset, element);
|
||||
if (psiIdentifier == null) {
|
||||
return null;
|
||||
}
|
||||
PsiIdentifier psiIdentifier = psiIdentifier(element, endOffset);
|
||||
return ResolveElementUtils.resolveElementOf(psiIdentifier, psiIdentifier, startOffset, endOffset);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiIdentifier psiIdentifier(int endOffset, PsiElement element) {
|
||||
private static PsiIdentifier psiIdentifier(PsiElement element, int endOffset) {
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
while (!(element instanceof PsiIdentifier)) {
|
||||
element = PsiTreeUtil.nextVisibleLeaf(element);
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
if (element.getTextRange().getEndOffset() > endOffset) {
|
||||
if (element == null || element.getTextRange().getEndOffset() > endOffset) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,10 +13,8 @@ public class ResolveElementRightToLeftUtils {
|
||||
|
||||
@Nullable
|
||||
public static PsiElement resolveElement(FileViewProvider viewProvider, int startOffset, int endOffset) {
|
||||
if (startOffset == endOffset) {
|
||||
return null;
|
||||
}
|
||||
PsiElement element = viewProvider.findElementAt(endOffset - 1, JavaLanguage.INSTANCE);
|
||||
// End is always white, can not -1 because @see class.name need it
|
||||
PsiElement element = viewProvider.findElementAt(endOffset, JavaLanguage.INSTANCE);
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -27,6 +25,10 @@ public class ResolveElementRightToLeftUtils {
|
||||
}
|
||||
element = identifier;
|
||||
}
|
||||
// if in prev line, set it null.
|
||||
if (identifier != null && identifier.getTextRange().getStartOffset() < startOffset) {
|
||||
identifier = null;
|
||||
}
|
||||
return ResolveElementUtils.resolveElementOf(element, identifier, startOffset, endOffset);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,22 @@ public class ResolveElementUtils {
|
||||
@Nullable
|
||||
public static PsiElement resolveElementOf(PsiElement element, PsiElement psiIdentifier,
|
||||
int startOffset, int endOffset) {
|
||||
PsiElement newPsiElement = resolveElementForExecutable(element, startOffset, endOffset);
|
||||
if (newPsiElement != null) {
|
||||
return newPsiElement;
|
||||
}
|
||||
PsiReference psiReference = parentPsiReference(psiIdentifier, endOffset);
|
||||
if (psiReference != null) {
|
||||
return psiReference.resolve();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiElement resolveElementForExecutable(PsiElement element, int startOffset, int endOffset) {
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
// method call
|
||||
PsiMethodCallExpression call =
|
||||
PsiTreeUtil.getParentOfType(element, PsiMethodCallExpression.class, false, startOffset);
|
||||
@@ -27,21 +43,6 @@ public class ResolveElementUtils {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// new
|
||||
PsiElement newPsiElement = newMethodOrClass(element, startOffset);
|
||||
if (newPsiElement != null) {
|
||||
return newPsiElement;
|
||||
}
|
||||
// ::/class/field
|
||||
PsiReference psiReference = parentPsiReference(psiIdentifier, endOffset);
|
||||
if (psiReference != null) {
|
||||
return psiReference.resolve();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiElement newMethodOrClass(PsiElement element, int startOffset) {
|
||||
// new and Class should same line
|
||||
PsiNewExpression newExp = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class, false, startOffset);
|
||||
if (newExp != null) {
|
||||
@@ -57,8 +58,14 @@ public class ResolveElementUtils {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* ::/class/field
|
||||
*/
|
||||
@Nullable
|
||||
private static PsiReference parentPsiReference(PsiElement element, int endOffset) {
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
PsiElement parent;
|
||||
while ((parent = element.getParent()) instanceof PsiReference) {
|
||||
if (parent.getTextRange().getEndOffset() > endOffset) {
|
||||
|
||||
Reference in New Issue
Block a user