introduce field/constant: do not suggest outer class as field target if it depends on inner class constants

This commit is contained in:
anna
2011-04-20 20:10:21 +02:00
parent de35ee6ced
commit c0efffec17
2 changed files with 11 additions and 6 deletions
@@ -120,6 +120,8 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
PsiClass aClass = myParentClass;
while (aClass != null) {
classes.add(aClass);
final PsiField psiField = ConvertToFieldRunnable.checkForwardRefs(selectedExpr, aClass);
if (psiField != null && psiField.getParent() == aClass) break;
aClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class, true);
}
if (classes.size() == 1 || ApplicationManager.getApplication().isUnitTestMode()) {
@@ -681,7 +683,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
myParentClass);
setModifiers(myField, mySettings, mySettings.isDeclareStatic());
myField = appendField(initializer, destClass, myParentClass, myAnchorElement, myField);
myField = appendField(initializer, initializerPlace, destClass, myParentClass, myAnchorElement, myField);
if (!mySettings.isIntroduceEnumConstant()) {
VisibilityUtil.fixVisibility(myOccurrences, myField, mySettings.getFieldVisibility());
}
@@ -780,7 +782,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
}
static PsiField appendField(final PsiExpression initializer,
final PsiClass destClass,
InitializationPlace initializerPlace, final PsiClass destClass,
final PsiClass parentClass,
final PsiElement anchorElement,
final PsiField psiField) {
@@ -805,9 +807,12 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
return field;
}
else {
final PsiField forwardReference = checkForwardRefs(initializer, parentClass);
if (forwardReference != null) {
return (PsiField)destClass.addAfter(psiField, forwardReference);
final PsiField forwardReference = initializerPlace == InitializationPlace.IN_FIELD_DECLARATION
? checkForwardRefs(initializer, parentClass) : null;
if (forwardReference != null ) {
return forwardReference.getParent() == destClass ?
(PsiField)destClass.addAfter(psiField, forwardReference) :
(PsiField)forwardReference.getParent().addAfter(psiField, forwardReference);
} else {
return (PsiField)destClass.add(psiField);
}
@@ -311,7 +311,7 @@ public class InplaceIntroduceConstantPopup {
if (visibility != null) {
PsiUtil.setModifierProperty(field, visibility, true);
}
field = BaseExpressionToFieldHandler.ConvertToFieldRunnable.appendField(myExpr, myParentClass, myParentClass, myAnchorElementIfAll, field);
field = BaseExpressionToFieldHandler.ConvertToFieldRunnable.appendField(myExpr, BaseExpressionToFieldHandler.InitializationPlace.IN_FIELD_DECLARATION, myParentClass, myParentClass, myAnchorElementIfAll, field);
return field;
}
});