allow to create field inside static inner class when outer class has the field with the same name (IDEA-71841)

This commit is contained in:
anna
2011-08-19 21:10:10 +02:00
parent 3f144f08b4
commit a02dca8eca
6 changed files with 32 additions and 8 deletions
@@ -1168,6 +1168,9 @@ public class HighlightUtil {
if (staticParent != null && isInstanceReference(place)) {
QuickFixAction.registerQuickFixAction(errorResult, QUICK_FIX_FACTORY.createModifierListFix(staticParent, PsiModifier.STATIC, false, false));
}
if (place instanceof PsiReferenceExpression && refElement instanceof PsiField) {
QuickFixAction.registerQuickFixAction(errorResult, new CreateFieldFromUsageFix((PsiReferenceExpression)place));
}
}
private static boolean isInstanceReference(PsiJavaCodeReferenceElement place) {
@@ -22,7 +22,6 @@ import com.intellij.codeInsight.template.Template;
import com.intellij.codeInsight.template.TemplateBuilderImpl;
import com.intellij.codeInsight.template.TemplateEditingAdapter;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.undo.UndoUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
@@ -32,7 +31,6 @@ import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
/**
@@ -54,10 +52,6 @@ public class CreateFieldFromUsageFix extends CreateVarFromUsageFix {
}
protected void invokeImpl(final PsiClass targetClass) {
if (CreateFromUsageUtils.isValidReference(myReferenceExpression, true)) {
return;
}
final Project project = myReferenceExpression.getProject();
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
@@ -37,7 +37,7 @@ public abstract class CreateVarFromUsageFix extends CreateFromUsageBaseFix {
protected boolean isValidElement(PsiElement element) {
PsiReferenceExpression expression = (PsiReferenceExpression) element;
return CreateFromUsageUtils.isValidReference(expression, true);
return CreateFromUsageUtils.isValidReference(expression, false);
}
protected PsiElement getElement() {
@@ -48,7 +48,7 @@ public abstract class CreateVarFromUsageFix extends CreateFromUsageBaseFix {
if (parent instanceof PsiMethodCallExpression) return null;
if (myReferenceExpression.getReferenceNameElement() != null) {
if (!CreateFromUsageUtils.isValidReference(myReferenceExpression, true)) {
if (!CreateFromUsageUtils.isValidReference(myReferenceExpression, false)) {
return myReferenceExpression;
}
}
@@ -0,0 +1,14 @@
// "Create Field 'field'" "true"
class A {
String field;
static class Foo {
private Object field<caret>;
Foo() {
field;
}
}
}
@@ -0,0 +1,12 @@
// "Create Field 'field'" "true"
class A {
String field;
static class Foo {
Foo() {
fie<caret>ld;
}
}
}
@@ -18,6 +18,7 @@ public class CreateFieldFromUsageTest extends LightQuickFixTestCase{
public void testParametericMethod() throws Exception { doSingleTest(); }
public void testQualifyInner() throws Exception { doSingleTest(); }
public void testTypeArgsFormatted() throws Exception { doSingleTest(); }
public void testInsideStaticInnerClass() throws Exception { doSingleTest(); }
public void testSortByRelevance() throws Exception {
new WriteCommandAction(getProject()) {