mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
add on demand imports for code references, e.g. allow to collapse nested class creation (IDEA-65357 )
This commit is contained in:
+11
-10
@@ -53,10 +53,10 @@ public class AddOnDemandStaticImportAction extends PsiElementBaseIntentionAction
|
||||
@Nullable
|
||||
public static PsiClass getClassToPerformStaticImport(@NotNull PsiElement element) {
|
||||
if (!PsiUtil.isLanguageLevel5OrHigher(element)) return null;
|
||||
if (!(element instanceof PsiIdentifier) || !(element.getParent() instanceof PsiReferenceExpression)) {
|
||||
if (!(element instanceof PsiIdentifier) || !(element.getParent() instanceof PsiJavaCodeReferenceElement)) {
|
||||
return null;
|
||||
}
|
||||
PsiReferenceExpression refExpr = (PsiReferenceExpression)element.getParent();
|
||||
PsiJavaCodeReferenceElement refExpr = (PsiJavaCodeReferenceElement)element.getParent();
|
||||
if (refExpr.getParent() instanceof PsiReferenceExpression &&
|
||||
isParameterizedReference((PsiReferenceExpression)refExpr.getParent())) return null;
|
||||
|
||||
@@ -89,7 +89,7 @@ public class AddOnDemandStaticImportAction extends PsiElementBaseIntentionAction
|
||||
public static void invoke(final Project project, PsiFile file, final Editor editor, PsiElement element) {
|
||||
if (!CodeInsightUtilBase.prepareFileForWrite(file)) return;
|
||||
|
||||
final PsiReferenceExpression refExpr = (PsiReferenceExpression)element.getParent();
|
||||
final PsiJavaCodeReferenceElement refExpr = (PsiJavaCodeReferenceElement)element.getParent();
|
||||
final PsiClass aClass = (PsiClass)refExpr.resolve();
|
||||
if (aClass == null) {
|
||||
return;
|
||||
@@ -110,10 +110,11 @@ public class AddOnDemandStaticImportAction extends PsiElementBaseIntentionAction
|
||||
final TIntArrayList expressionToDequalifyOffsets = new TIntArrayList();
|
||||
copy.accept(new JavaRecursiveElementWalkingVisitor() {
|
||||
int delta = 0;
|
||||
@Override public void visitReferenceExpression(PsiReferenceExpression expression) {
|
||||
@Override
|
||||
public void visitReferenceElement(PsiJavaCodeReferenceElement expression) {
|
||||
if (isParameterizedReference(expression)) return;
|
||||
PsiExpression qualifierExpression = expression.getQualifierExpression();
|
||||
if (qualifierExpression instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifierExpression).isReferenceTo(aClass)) {
|
||||
PsiElement qualifierExpression = expression.getQualifier();
|
||||
if (qualifierExpression instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)qualifierExpression).isReferenceTo(aClass)) {
|
||||
try {
|
||||
PsiElement resolved = expression.resolve();
|
||||
int end = expression.getTextRange().getEndOffset();
|
||||
@@ -134,12 +135,12 @@ public class AddOnDemandStaticImportAction extends PsiElementBaseIntentionAction
|
||||
|
||||
expressionToDequalifyOffsets.forEachDescending(new TIntProcedure() {
|
||||
public boolean execute(int offset) {
|
||||
PsiReferenceExpression expression = PsiTreeUtil.findElementOfClassAtOffset(root, offset, PsiReferenceExpression.class, false);
|
||||
PsiJavaCodeReferenceElement expression = PsiTreeUtil.findElementOfClassAtOffset(root, offset, PsiJavaCodeReferenceElement.class, false);
|
||||
if (expression == null) {
|
||||
return false;
|
||||
}
|
||||
PsiExpression qualifierExpression = expression.getQualifierExpression();
|
||||
if (qualifierExpression instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifierExpression).isReferenceTo(aClass)) {
|
||||
PsiElement qualifierExpression = expression.getQualifier();
|
||||
if (qualifierExpression instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)qualifierExpression).isReferenceTo(aClass)) {
|
||||
qualifierExpression.delete();
|
||||
HighlightManager.getInstance(project)
|
||||
.addRangeHighlight(editor, expression.getTextRange().getStartOffset(), expression.getTextRange().getEndOffset(),
|
||||
@@ -158,7 +159,7 @@ public class AddOnDemandStaticImportAction extends PsiElementBaseIntentionAction
|
||||
invoke(project, file, editor, element);
|
||||
}
|
||||
|
||||
private static boolean isParameterizedReference(final PsiReferenceExpression expression) {
|
||||
private static boolean isParameterizedReference(final PsiJavaCodeReferenceElement expression) {
|
||||
if (expression.getParameterList() == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// "Add on demand static import for 'java.lang.Thread'" "true"
|
||||
package test;
|
||||
|
||||
import static java.lang.Thread.*;
|
||||
|
||||
public class Foo {
|
||||
{
|
||||
<caret>State en = new State();
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// "Add on demand static import for 'java.lang.Thread'" "true"
|
||||
package test;
|
||||
|
||||
public class Foo {
|
||||
{
|
||||
Thre<caret>ad.State en = new Thread.State();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user