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