mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
disable field encapsulation for enum constants (IDEA-141305)
This commit is contained in:
+11
-6
@@ -22,17 +22,17 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.ScrollType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.refactoring.HelpID;
|
||||
import com.intellij.refactoring.RefactoringActionHandler;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
public class EncapsulateFieldsHandler implements RefactoringActionHandler {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.encapsulateFields.EncapsulateFieldsHandler");
|
||||
@@ -108,8 +108,13 @@ public class EncapsulateFieldsHandler implements RefactoringActionHandler {
|
||||
}
|
||||
|
||||
LOG.assertTrue(aClass != null);
|
||||
final PsiField[] fields = aClass.getFields();
|
||||
if (fields.length == 0) {
|
||||
final List<PsiField> fields = ContainerUtil.filter(aClass.getFields(), new Condition<PsiField>() {
|
||||
@Override
|
||||
public boolean value(PsiField field) {
|
||||
return !(field instanceof PsiEnumConstant);
|
||||
}
|
||||
});
|
||||
if (fields.isEmpty()) {
|
||||
CommonRefactoringUtil.showErrorHint(project, CommonDataKeys.EDITOR.getData(dataContext), "Class has no fields to encapsulate",
|
||||
REFACTORING_NAME, HelpID.ENCAPSULATE_FIELDS);
|
||||
return;
|
||||
|
||||
+11
-1
@@ -17,6 +17,7 @@ package com.intellij.refactoring.encapsulateFields;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
@@ -25,10 +26,13 @@ import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
@@ -307,7 +311,13 @@ public class JavaEncapsulateFieldHelper extends EncapsulateFieldHelper {
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiField[] getApplicableFields(@NotNull PsiClass aClass) {
|
||||
return aClass.getFields();
|
||||
final List<PsiField> fields = ContainerUtil.filter(aClass.getFields(), new Condition<PsiField>() {
|
||||
@Override
|
||||
public boolean value(PsiField field) {
|
||||
return !(field instanceof PsiEnumConstant);
|
||||
}
|
||||
});
|
||||
return fields.toArray(new PsiField[fields.size()]);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
enum A {
|
||||
B;
|
||||
private int i;
|
||||
|
||||
public int getI() {
|
||||
return i;
|
||||
}
|
||||
|
||||
public void setI(int i) {
|
||||
this.i = i;
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
enum A {
|
||||
B;
|
||||
private int i;
|
||||
}
|
||||
@@ -25,16 +25,11 @@ import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.refactoring.encapsulateFields.EncapsulateFieldsDescriptor;
|
||||
import com.intellij.refactoring.encapsulateFields.EncapsulateFieldsProcessor;
|
||||
import com.intellij.refactoring.encapsulateFields.FieldDescriptor;
|
||||
import com.intellij.refactoring.encapsulateFields.FieldDescriptorImpl;
|
||||
import com.intellij.refactoring.encapsulateFields.*;
|
||||
import com.intellij.refactoring.util.DocCommentPolicy;
|
||||
import junit.framework.Assert;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -82,7 +77,15 @@ public class EncapsulateFieldsTest extends MultiFileTestCase{
|
||||
assertNotNull("Tested class not found", aClass);
|
||||
final PsiField field = aClass.findFieldByName("i", false);
|
||||
assertNotNull(field);
|
||||
doTest(aClass, field, null, true, true);
|
||||
doTest(aClass, null, true, true, field);
|
||||
});
|
||||
}
|
||||
|
||||
public void testFilterEnumConstants() throws Exception {
|
||||
doTest((rootDir, rootAfter) -> {
|
||||
final PsiClass aClass = myJavaFacade.findClass("A", GlobalSearchScope.projectScope(myProject));
|
||||
assertNotNull("Tested class not found", aClass);
|
||||
doTest(aClass, null, true, true, new JavaEncapsulateFieldHelper().getApplicableFields(aClass));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -109,28 +112,32 @@ public class EncapsulateFieldsTest extends MultiFileTestCase{
|
||||
assertNotNull("Tested class not found", aClass);
|
||||
|
||||
|
||||
doTest(aClass, aClass.findFieldByName(fieldName, false), conflicts, true, true);
|
||||
doTest(aClass, conflicts, true, true, aClass.findFieldByName(fieldName, false));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private static void doTest(final PsiClass aClass,
|
||||
final PsiField field,
|
||||
final String conflicts,
|
||||
final boolean generateGetters,
|
||||
final boolean generateSetters) {
|
||||
final boolean generateSetters,
|
||||
final PsiField... fields) {
|
||||
try {
|
||||
final Project project = aClass.getProject();
|
||||
EncapsulateFieldsProcessor processor = new EncapsulateFieldsProcessor(project, new EncapsulateFieldsDescriptor() {
|
||||
@Override
|
||||
public FieldDescriptor[] getSelectedFields() {
|
||||
return new FieldDescriptor[]{new FieldDescriptorImpl(
|
||||
field,
|
||||
GenerateMembersUtil.suggestGetterName(field),
|
||||
GenerateMembersUtil.suggestSetterName(field),
|
||||
isToEncapsulateGet() ? GenerateMembersUtil.generateGetterPrototype(field) : null,
|
||||
isToEncapsulateSet() ? GenerateMembersUtil.generateSetterPrototype(field) : null
|
||||
)};
|
||||
final FieldDescriptor[] descriptors = new FieldDescriptor[fields.length];
|
||||
for (int i = 0; i < fields.length; i++) {
|
||||
descriptors[i] = new FieldDescriptorImpl(
|
||||
fields[i],
|
||||
GenerateMembersUtil.suggestGetterName(fields[i]),
|
||||
GenerateMembersUtil.suggestSetterName(fields[i]),
|
||||
isToEncapsulateGet() ? GenerateMembersUtil.generateGetterPrototype(fields[i]) : null,
|
||||
isToEncapsulateSet() ? GenerateMembersUtil.generateSetterPrototype(fields[i]) : null
|
||||
);
|
||||
}
|
||||
return descriptors;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user