From c0efffec177a1c1acd4b06d1bc4e52595704c503 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 20 Apr 2011 19:06:46 +0200 Subject: [PATCH] introduce field/constant: do not suggest outer class as field target if it depends on inner class constants --- .../BaseExpressionToFieldHandler.java | 15 ++++++++++----- .../InplaceIntroduceConstantPopup.java | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java index d3c266193051..87fd082a8aa5 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java @@ -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); } diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java index b4e46edf150b..933d1f210bde 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java @@ -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; } });