Java extract class: use StringBuilder instead of StringBuffer and cleanup

GitOrigin-RevId: c9053717aaeba00e58cb34164b660466f1fcc769
This commit is contained in:
Bas Leijdekkers
2023-05-16 16:43:42 +02:00
committed by intellij-monorepo-bot
parent e8bdbf5b6a
commit 3ed84e673f

View File

@@ -84,13 +84,12 @@ class ExtractedClassBuilder {
this.interfaces.addAll(interfaces); this.interfaces.addAll(interfaces);
} }
public String buildBeanClass(boolean normalizeDeclaration) { public String buildBeanClass(boolean normalizeDeclaration) {
if (requiresBackPointer) { if (requiresBackPointer) {
calculateBackpointerName(); calculateBackpointerName();
} }
@NonNls final StringBuffer out = new StringBuffer(1024); final @NonNls StringBuilder out = new StringBuilder(1024);
if (packageName.length() > 0) out.append("package " + packageName + ';'); if (packageName.length() > 0) out.append("package ").append(packageName).append(";\n");
out.append("public "); out.append("public ");
fields.removeAll(enumConstantFields); fields.removeAll(enumConstantFields);
@@ -119,10 +118,10 @@ class ExtractedClassBuilder {
first = false; first = false;
} }
} }
out.append('{'); out.append("{\n");
if (requiresBackPointer) { if (requiresBackPointer) {
out.append("private final " + originalClassName); out.append("private final ").append(originalClassName);
if (!typeParams.isEmpty()) { if (!typeParams.isEmpty()) {
out.append('<'); out.append('<');
boolean first = true; boolean first = true;
@@ -135,7 +134,7 @@ class ExtractedClassBuilder {
} }
out.append('>'); out.append('>');
} }
out.append(' ' + backPointerName + ";"); out.append(' ').append(backPointerName).append(";");
} }
outputFieldsAndInitializers(out, normalizeDeclaration); outputFieldsAndInitializers(out, normalizeDeclaration);
if (hasEnumConstants()) { if (hasEnumConstants()) {
@@ -216,19 +215,19 @@ class ExtractedClassBuilder {
return false; return false;
} }
private void outputMethods(StringBuffer out) { private void outputMethods(@NonNls StringBuilder out) {
for (PsiMethod method : methods) { for (PsiMethod method : methods) {
method.accept(new Mutator(out)); method.accept(new Mutator(out));
} }
} }
private void outputInnerClasses(StringBuffer out) { private void outputInnerClasses(@NonNls StringBuilder out) {
for (PsiClass innerClass : innerClasses) { for (PsiClass innerClass : innerClasses) {
outputMutatedInnerClass(out, innerClass, innerClassesToMakePublic.contains(innerClass)); outputMutatedInnerClass(out, innerClass, innerClassesToMakePublic.contains(innerClass));
} }
} }
private void outputMutatedInnerClass(StringBuffer out, PsiClass innerClass, boolean makePublic) { private void outputMutatedInnerClass(@NonNls StringBuilder out, PsiClass innerClass, boolean makePublic) {
if (makePublic) { if (makePublic) {
try { try {
PsiUtil.setModifierProperty(innerClass, PsiModifier.PUBLIC, false); PsiUtil.setModifierProperty(innerClass, PsiModifier.PUBLIC, false);
@@ -241,22 +240,23 @@ class ExtractedClassBuilder {
} }
private void outputFieldsAndInitializers(final StringBuffer out, boolean normalizeDeclaration) { private void outputFieldsAndInitializers(@NonNls StringBuilder out, boolean normalizeDeclaration) {
if (hasEnumConstants()) { if (hasEnumConstants()) {
out.append(StringUtil.join(enumConstantFields, field -> { out.append(StringUtil.join(enumConstantFields, field -> {
final StringBuffer fieldStr = new StringBuffer(field.getName() + "("); final @NonNls StringBuilder fieldStr = new StringBuilder(field.getName());
fieldStr.append('(');
final PsiExpression initializer = field.getInitializer(); final PsiExpression initializer = field.getInitializer();
if (initializer != null) { if (initializer != null) {
initializer.accept(new Mutator(fieldStr)); initializer.accept(new Mutator(fieldStr));
} }
fieldStr.append(")"); fieldStr.append(')');
return fieldStr.toString(); return fieldStr.toString();
}, ", ")); }, ", "));
out.append(";"); out.append(";\n");
} }
final List<PsiClassInitializer> remainingInitializers = new ArrayList<>(initializers); final List<PsiClassInitializer> remainingInitializers = new ArrayList<>(initializers);
for (final PsiField field : fields) { for (PsiField field : fields) {
if (normalizeDeclaration) { if (normalizeDeclaration) {
field.normalizeDeclaration(); field.normalizeDeclaration();
} }
@@ -287,9 +287,8 @@ class ExtractedClassBuilder {
} }
} }
private void outputConstructor(@NonNls StringBuilder out) {
private void outputConstructor(@NonNls StringBuffer out) { out.append(hasEnumConstants() ? "" : "public ").append(className).append('(');
out.append("\t").append(hasEnumConstants() ? "" : "public ").append(className).append('(');
if (requiresBackPointer) { if (requiresBackPointer) {
final String parameterName = myJavaCodeStyleManager.propertyNameToVariableName(backPointerName, VariableKind.PARAMETER); final String parameterName = myJavaCodeStyleManager.propertyNameToVariableName(backPointerName, VariableKind.PARAMETER);
out.append(originalClassName); out.append(originalClassName);
@@ -305,35 +304,34 @@ class ExtractedClassBuilder {
} }
out.append('>'); out.append('>');
} }
out.append(' ' + parameterName); out.append(' ').append(parameterName);
} else if (hasEnumConstants()) { } else if (hasEnumConstants()) {
out.append(myEnumParameterType.getCanonicalText()).append(" ").append("value"); out.append(myEnumParameterType.getCanonicalText()).append(" ").append("value");
} }
out.append(")"); out.append(") {\n");
out.append("\t{");
if (requiresBackPointer) { if (requiresBackPointer) {
final String parameterName = myJavaCodeStyleManager.propertyNameToVariableName(backPointerName, VariableKind.PARAMETER); final String parameterName = myJavaCodeStyleManager.propertyNameToVariableName(backPointerName, VariableKind.PARAMETER);
if (backPointerName.equals(parameterName)) { if (backPointerName.equals(parameterName)) {
out.append("\t\tthis." + backPointerName + " = " + parameterName + ";"); out.append("this.");
}
else {
out.append("\t\t" + backPointerName + " = " + parameterName + ";");
} }
out.append(backPointerName).append('=').append(parameterName).append(";\n");
} else if (hasEnumConstants()) { } else if (hasEnumConstants()) {
final String fieldName = getValueFieldName(); final String fieldName = getValueFieldName();
out.append(fieldName.equals("value") ? "this." : "").append(fieldName).append(" = value;"); if (fieldName.equals("value")) {
out.append("this.");
}
out.append(fieldName).append("=value;\n");
} }
out.append("\t}"); out.append("}\n");
} }
public void setRequiresBackPointer(boolean requiresBackPointer) { public void setRequiresBackPointer(boolean requiresBackPointer) {
this.requiresBackPointer = requiresBackPointer; this.requiresBackPointer = requiresBackPointer;
} }
public void setProject(Project project) {
public void setProject(final Project project) {
myProject = project; myProject = project;
myJavaCodeStyleManager = JavaCodeStyleManager.getInstance(project); myJavaCodeStyleManager = JavaCodeStyleManager.getInstance(project);
} }
@@ -363,10 +361,9 @@ class ExtractedClassBuilder {
} }
private final class Mutator extends JavaElementVisitor { private final class Mutator extends JavaElementVisitor {
@NonNls private final @NonNls StringBuilder out;
private final StringBuffer out;
private Mutator(StringBuffer out) { private Mutator(@NonNls StringBuilder out) {
super(); super();
this.out = out; this.out = out;
} }
@@ -466,8 +463,7 @@ class ExtractedClassBuilder {
} }
} }
private void delegate(final PsiExpression rhs, final PsiField field, final PsiJavaToken sign, final IElementType tokenType, private void delegate(PsiExpression rhs, PsiField field, PsiJavaToken sign, IElementType tokenType, String fieldName) {
final String fieldName) {
final String setterName = GenerateMembersUtil.suggestSetterName(field); final String setterName = GenerateMembersUtil.suggestSetterName(field);
out.append(fieldName).append('.').append(setterName).append('('); out.append(fieldName).append('.').append(setterName).append('(');
if (!tokenType.equals(JavaTokenType.EQ)) { if (!tokenType.equals(JavaTokenType.EQ)) {
@@ -480,7 +476,6 @@ class ExtractedClassBuilder {
out.append(')'); out.append(')');
} }
@Override @Override
public void visitUnaryExpression(@NotNull PsiUnaryExpression expression) { public void visitUnaryExpression(@NotNull PsiUnaryExpression expression) {
PsiExpression operand = expression.getOperand(); PsiExpression operand = expression.getOperand();
@@ -501,14 +496,14 @@ class ExtractedClassBuilder {
final PsiField field = (PsiField)reference.resolve(); final PsiField field = (PsiField)reference.resolve();
assert field != null; assert field != null;
if (!field.hasModifierProperty(PsiModifier.STATIC)) { if (!field.hasModifierProperty(PsiModifier.STATIC)) {
out.append(backPointerName + out.append(backPointerName)
'.' + GenerateMembersUtil.suggestSetterName(field) + .append('.').append(GenerateMembersUtil.suggestSetterName(field))
'(' + .append('(')
backPointerName + .append(backPointerName)
'.' + GenerateMembersUtil.suggestGetterName(field) + .append('.').append(GenerateMembersUtil.suggestGetterName(field))
"()" + .append("()")
operator + .append(operator)
"1)"); .append("1)");
} }
else { else {
visitElement(expression); visitElement(expression);
@@ -523,14 +518,11 @@ class ExtractedClassBuilder {
return BackpointerUtil.isBackpointerReference(expression, psiField -> !fieldIsExtracted(psiField)); return BackpointerUtil.isBackpointerReference(expression, psiField -> !fieldIsExtracted(psiField));
} }
@Override @Override
public void visitThisExpression(@NotNull PsiThisExpression expression) { public void visitThisExpression(@NotNull PsiThisExpression expression) {
out.append(backPointerName); out.append(backPointerName);
} }
@Override @Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) { public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
final PsiReferenceExpression expression = call.getMethodExpression(); final PsiReferenceExpression expression = call.getMethodExpression();
@@ -546,11 +538,11 @@ class ExtractedClassBuilder {
final PsiClass targetClass = ((PsiImportStaticStatement)resolveScope).resolveTargetClass(); final PsiClass targetClass = ((PsiImportStaticStatement)resolveScope).resolveTargetClass();
out.append(targetClass != null ? targetClass.getQualifiedName() : "").append('.').append(methodName); out.append(targetClass != null ? targetClass.getQualifiedName() : "").append('.').append(methodName);
} else { } else {
out.append(originalClassName + '.' + methodName); out.append(originalClassName).append('.').append(methodName);
} }
} }
else { else {
out.append(backPointerName + '.' + methodName); out.append(backPointerName).append('.').append(methodName);
} }
final PsiExpressionList argumentList = call.getArgumentList(); final PsiExpressionList argumentList = call.getArgumentList();
argumentList.accept(this); argumentList.accept(this);