support @see class.name etc. | 支持 @see 类名等

This commit is contained in:
林万程
2022-02-21 22:00:17 +08:00
parent 8a407372a8
commit 35e2548967
4 changed files with 36 additions and 30 deletions

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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) {