IDEA-99499 IDEA creates invalid static imports

This commit is contained in:
peter
2013-01-24 12:39:19 +01:00
parent 9a8418b6c0
commit 223226cda4
2 changed files with 49 additions and 2 deletions
@@ -4,6 +4,8 @@ import com.intellij.codeInsight.AutoPopupController;
import com.intellij.codeInsight.TailType;
import com.intellij.codeInsight.completion.*;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.RangeMarker;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
@@ -84,17 +86,24 @@ public class VariableLookupItem extends LookupItem<PsiVariable> implements Typed
public void handleInsert(InsertionContext context) {
PsiVariable variable = getObject();
context.getDocument().replaceString(context.getStartOffset(), context.getTailOffset(), variable.getName());
Document document = context.getDocument();
document.replaceString(context.getStartOffset(), context.getTailOffset(), variable.getName());
context.commitDocument();
if (variable instanceof PsiField) {
if (willBeImported()) {
RangeMarker toDelete = JavaCompletionUtil.insertTemporary(context.getTailOffset(), document, " ");
context.commitDocument();
final PsiReferenceExpression
ref = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiReferenceExpression.class, false);
if (ref != null) {
ref.bindToElementViaStaticImport(((PsiField)variable).getContainingClass());
PostprocessReformattingAspect.getInstance(ref.getProject()).doPostponedFormatting();
}
if (toDelete.isValid()) {
document.deleteString(toDelete.getStartOffset(), toDelete.getEndOffset());
}
context.commitDocument();
}
else if (shouldQualify((PsiField)variable, context)) {
qualifyFieldReference(context, (PsiField)variable);
@@ -127,7 +136,7 @@ public class VariableLookupItem extends LookupItem<PsiVariable> implements Typed
context.setAddCompletionChar(false);
if (ref != null) {
FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EXCLAMATION_FINISH);
context.getDocument().insertString(ref.getTextRange().getStartOffset(), "!");
document.insertString(ref.getTextRange().getStartOffset(), "!");
}
}
}
@@ -197,6 +197,44 @@ class A {
'''
}
public void "test static import before an identifier"() {
myFixture.addClass '''
package test.t1;
public enum DemoEnum
{
XXONE,
TWO
}'''
doTest """
import test.t1.DemoEnum;
public class Demo {
public static void doStuff(DemoEnum enumValue, String value) {}
public static void main(String[] args)
{
String val = "anyValue";
doStuff(XXON<caret>val);
}
}
""", true, """
import test.t1.DemoEnum;
import static test.t1.DemoEnum.XXONE;
public class Demo {
public static void doStuff(DemoEnum enumValue, String value) {}
public static void main(String[] args)
{
String val = "anyValue";
doStuff(XXONE<caret>val);
}
}
"""
}
private void doTest(String input, boolean importStatic, String output) {
myFixture.configureByText("a.java", input)