introduce field: use precalculated settings (IDEA-83180)

(cherry picked from commit 019be99b8e2b558e2014565a15dd29f0202b4653)
This commit is contained in:
anna
2012-03-21 18:02:13 +01:00
parent fbfe40427e
commit 939ed2bede
6 changed files with 51 additions and 7 deletions
@@ -218,9 +218,9 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
return false;
}
public static void setModifiers(PsiField field, Settings settings, final boolean declareStatic) {
public static void setModifiers(PsiField field, Settings settings) {
if (!settings.isIntroduceEnumConstant()) {
if (declareStatic) {
if (settings.isDeclareStatic()) {
PsiUtil.setModifierProperty(field, PsiModifier.STATIC, true);
}
if (settings.isDeclareFinal()) {
@@ -711,7 +711,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
createField(myFieldName, myType, initializer, initializerPlace == InitializationPlace.IN_FIELD_DECLARATION && initializer != null,
myParentClass);
setModifiers(myField, mySettings, mySettings.isDeclareStatic());
setModifiers(myField, mySettings);
myField = appendField(initializer, initializerPlace, destClass, myParentClass, myAnchorElement, myField);
if (!mySettings.isIntroduceEnumConstant()) {
VisibilityUtil.fixVisibility(myOccurrences, myField, mySettings.getFieldVisibility());
@@ -31,6 +31,8 @@ import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.occurrences.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class IntroduceFieldHandler extends BaseExpressionToFieldHandler {
public static final String REFACTORING_NAME = RefactoringBundle.message("introduce.field.title");
@@ -199,10 +201,19 @@ public class IntroduceFieldHandler extends BaseExpressionToFieldHandler {
final PsiStatement statement = PsiTreeUtil.getParentOfType(local, PsiStatement.class);
return IntroduceFieldHandler.this.showRefactoringDialog(project, editor, aClass, local.getInitializer(), local.getType(), occurences, local, statement);
}
@Override
protected int getChosenClassIndex(List<PsiClass> classes) {
return IntroduceFieldHandler.this.getChosenClassIndex(classes);
}
};
return localToFieldHandler.convertLocalToField(localVariable, editor);
}
protected int getChosenClassIndex(List<PsiClass> classes) {
return classes.size() - 1;
}
private static class MyOccurrenceFilter implements OccurrenceFilter {
public boolean isOK(PsiExpression occurrence) {
return !isInSuperOrThis(occurrence);
@@ -81,7 +81,7 @@ public abstract class LocalToFieldHandler {
if (classes.isEmpty()) return false;
if (classes.size() == 1 || ApplicationManager.getApplication().isUnitTestMode()) {
if (convertLocalToField(local, classes.get(classes.size() - 1), editor, tempIsStatic)) return false;
if (convertLocalToField(local, classes.get(getChosenClassIndex(classes)), editor, tempIsStatic)) return false;
} else {
final boolean isStatic = tempIsStatic;
NavigationUtil.getPsiElementPopup(classes.toArray(new PsiClass[classes.size()]), new PsiClassListCellRenderer(), "Choose class to introduce " + (myIsConstant ? "constant" : "field"), new PsiElementProcessor<PsiClass>() {
@@ -96,6 +96,10 @@ public abstract class LocalToFieldHandler {
return true;
}
protected int getChosenClassIndex(List<PsiClass> classes) {
return classes.size() - 1;
}
private boolean convertLocalToField(PsiLocalVariable local, PsiClass aClass, Editor editor, boolean isStatic) {
final PsiExpression[] occurences = CodeInsightUtil.findReferenceExpressions(RefactoringUtil.getVariableScope(local), local);
if (editor != null) {
@@ -250,7 +254,6 @@ public abstract class LocalToFieldHandler {
private final PsiClass myDestinationClass;
private final BaseExpressionToFieldHandler.Settings mySettings;
private final BaseExpressionToFieldHandler.InitializationPlace myInitializerPlace;
private final boolean myStatic;
private final PsiExpression[] myOccurences;
private PsiField myField;
private PsiStatement myAssignmentStatement;
@@ -269,7 +272,6 @@ public abstract class LocalToFieldHandler {
myDestinationClass = aClass;
mySettings = settings;
myInitializerPlace = settings.getInitializerPlace();
myStatic = isStatic;
myOccurences = occurrences;
}
@@ -288,7 +290,7 @@ public abstract class LocalToFieldHandler {
myField = mySettings.isIntroduceEnumConstant() ? EnumConstantsUtil.createEnumConstant(myDestinationClass, myLocal, myFieldName)
: createField(myLocal, mySettings.getForcedType(), myFieldName, myInitializerPlace == IN_FIELD_DECLARATION);
myField = (PsiField)myDestinationClass.add(myField);
BaseExpressionToFieldHandler.setModifiers(myField, mySettings, myStatic);
BaseExpressionToFieldHandler.setModifiers(myField, mySettings);
if (!mySettings.isIntroduceEnumConstant()) {
VisibilityUtil.fixVisibility(myOccurences, myField, mySettings.getFieldVisibility());
}