mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
extract class: normalize fields declarations (IDEA-153457)
This commit is contained in:
@@ -141,7 +141,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
myClass = new WriteCommandAction<PsiClass>(myProject, getCommandName()){
|
||||
@Override
|
||||
protected void run(@NotNull Result<PsiClass> result) throws Throwable {
|
||||
result.setResult(buildClass());
|
||||
result.setResult(buildClass(false));
|
||||
}
|
||||
}.execute().getResultObject();
|
||||
myExtractEnumProcessor = new ExtractEnumProcessor(myProject, this.enumConstants, myClass);
|
||||
@@ -272,7 +272,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
}
|
||||
|
||||
protected void performRefactoring(@NotNull UsageInfo[] usageInfos) {
|
||||
final PsiClass psiClass = buildClass();
|
||||
final PsiClass psiClass = buildClass(true);
|
||||
if (psiClass == null) return;
|
||||
if (delegationRequired) {
|
||||
buildDelegate();
|
||||
@@ -661,7 +661,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
}
|
||||
|
||||
|
||||
private PsiClass buildClass() {
|
||||
private PsiClass buildClass(boolean normalizeDeclaration) {
|
||||
final PsiManager manager = sourceClass.getManager();
|
||||
final Project project = sourceClass.getProject();
|
||||
final ExtractedClassBuilder extractedClassBuilder = new ExtractedClassBuilder();
|
||||
@@ -691,7 +691,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
extractedClassBuilder.setFieldsNeedingSetters(visitor.getFieldsNeedingSetter());
|
||||
}
|
||||
|
||||
final String classString = extractedClassBuilder.buildBeanClass();
|
||||
final String classString = extractedClassBuilder.buildBeanClass(normalizeDeclaration);
|
||||
if (extractInnerClass) {
|
||||
final PsiFileFactory factory = PsiFileFactory.getInstance(project);
|
||||
final PsiJavaFile newFile = (PsiJavaFile)factory.createFileFromText(newClassName + ".java", JavaFileType.INSTANCE, classString);
|
||||
|
||||
@@ -24,7 +24,6 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.refactoring.psi.MethodInheritanceUtils;
|
||||
import com.intellij.util.Function;
|
||||
@@ -101,7 +100,7 @@ class ExtractedClassBuilder {
|
||||
}
|
||||
|
||||
|
||||
public String buildBeanClass() {
|
||||
public String buildBeanClass(boolean normalizeDeclaration) {
|
||||
if (requiresBackPointer) {
|
||||
calculateBackpointerName();
|
||||
}
|
||||
@@ -153,7 +152,7 @@ class ExtractedClassBuilder {
|
||||
}
|
||||
out.append(' ' + backPointerName + ";");
|
||||
}
|
||||
outputFieldsAndInitializers(out);
|
||||
outputFieldsAndInitializers(out, normalizeDeclaration);
|
||||
if (hasEnumConstants()) {
|
||||
final String fieldName = getValueFieldName();
|
||||
out.append("\n").append("private ").append(myEnumParameterType.getCanonicalText()).append(" ").append(fieldName).append(";\n");
|
||||
@@ -256,7 +255,7 @@ class ExtractedClassBuilder {
|
||||
}
|
||||
|
||||
|
||||
private void outputFieldsAndInitializers(final StringBuffer out) {
|
||||
private void outputFieldsAndInitializers(final StringBuffer out, boolean normalizeDeclaration) {
|
||||
if (hasEnumConstants()) {
|
||||
out.append(StringUtil.join(enumConstantFields, new Function<PsiField, String>() {
|
||||
public String fun(PsiField field) {
|
||||
@@ -274,6 +273,9 @@ class ExtractedClassBuilder {
|
||||
|
||||
final List<PsiClassInitializer> remainingInitializers = new ArrayList<PsiClassInitializer>(initializers);
|
||||
for (final PsiField field : fields) {
|
||||
if (normalizeDeclaration) {
|
||||
field.normalizeDeclaration();
|
||||
}
|
||||
final Iterator<PsiClassInitializer> initializersIterator = remainingInitializers.iterator();
|
||||
final int fieldOffset = field.getTextRange().getStartOffset();
|
||||
while (initializersIterator.hasNext()) {
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
public class Extracted {
|
||||
static final int[] myT = {1, 2};
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
class Test {
|
||||
static final int[] myF = {};
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
class Test {
|
||||
static final int[] myT = {1,2}, myF = {};
|
||||
}
|
||||
@@ -24,7 +24,6 @@ import com.intellij.JavaTestUtil;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
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.PsiMethod;
|
||||
@@ -117,6 +116,10 @@ public class ExtractClassTest extends MultiFileTestCase{
|
||||
doTestField(null);
|
||||
}
|
||||
|
||||
public void testNonNormalizedFields() throws Exception {
|
||||
doTestField(null);
|
||||
}
|
||||
|
||||
public void testDependantFieldInitializers() throws Exception {
|
||||
doTestField(null);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user