Skip to content

Commit 8580f17

Browse files
committed
Fix positions and refactor to separate files
1 parent 8544ac1 commit 8580f17

File tree

7 files changed

+38
-33
lines changed

7 files changed

+38
-33
lines changed

src/main/java/com/github/junkfactory/innerbuilder/generators/AbstractGenerator.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ protected boolean addImport(PsiType psiType) {
6666
return generatorParams.psi().codeStyleManager().addImport((PsiJavaFile) generatorParams.psi().file(), psiClass);
6767
}
6868

69+
protected PsiMethod findFirstConstructor(PsiClass target) {
70+
var constructors = target.getConstructors();
71+
return constructors.length > 0 ? constructors[0] : null;
72+
}
73+
6974
private PsiMethod findConstructor(PsiClass target, PsiMethod newMethod) {
7075
for (var constructor : target.getConstructors()) {
7176
if (Utils.areParameterListsEqual(constructor.getParameterList(), newMethod.getParameterList())) {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.github.junkfactory.innerbuilder.generators;
2+
3+
import com.intellij.psi.PsiClass;
4+
import com.intellij.psi.PsiType;
5+
6+
public record BuilderClass(PsiClass psiClass,
7+
PsiType builderType,
8+
BuilderClassName builderClassName,
9+
boolean genericType) {
10+
}
11+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.github.junkfactory.innerbuilder.generators;
2+
3+
public record BuilderClassName(String className, String instanceClassName) {
4+
}
5+

src/main/java/com/github/junkfactory/innerbuilder/generators/BuilderClassParams.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.github.junkfactory.innerbuilder.generators;
22

3-
import com.github.junkfactory.innerbuilder.generators.InnerBuilderGenerator.BuilderClass;
43
import com.intellij.psi.PsiClass;
54

65
public record BuilderClassParams(PsiClass targetClass,

src/main/java/com/github/junkfactory/innerbuilder/generators/BuilderMethodsGenerator.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414

1515
class BuilderMethodsGenerator extends AbstractGenerator implements MethodsGenerator {
1616

17-
public record BuilderClassName(String className, String instanceClassName) {
18-
}
19-
2017
private final BuilderClassParams builderClassParams;
2118
private final FieldsGenerator fieldsGenerator;
2219

@@ -37,7 +34,7 @@ public GenerationResult generate() {
3734
var targetClass = builderClassParams.targetClass();
3835
var targetModifierList = Objects.requireNonNull(targetClass.getModifierList());
3936
isPublic = targetModifierList.hasModifierProperty(PsiModifier.PUBLIC);
40-
PsiElement lastAddedElement = null;
37+
PsiElement lastAddedElement = findFirstConstructor(builderClass.psiClass());
4138
for (var field : fieldsGenerator.getFields()) {
4239
var setterMethod = generateFieldMethod(field);
4340
field.putCopyableUserData(UserDataKey.METHOD_REF, setterMethod.getName());
@@ -47,11 +44,11 @@ public GenerationResult generate() {
4744
var options = generatorParams.options();
4845
if (options.contains(JavaInnerBuilderOption.WITH_VALIDATE_METHOD)) {
4946
var validateMethod = generateValidateMethod();
50-
addMethod(builderClass.psiClass(), lastAddedElement, validateMethod, false);
47+
lastAddedElement = addMethod(builderClass.psiClass(), lastAddedElement, validateMethod, false);
5148
}
5249

5350
var buildMethod = generateBuildMethod(targetClass);
54-
addMethod(builderClass.psiClass(), null, buildMethod, builderClassParams.targetClass().isRecord());
51+
addMethod(builderClass.psiClass(), lastAddedElement, buildMethod, builderClassParams.targetClass().isRecord());
5552
return generationResult;
5653
}
5754

src/main/java/com/github/junkfactory/innerbuilder/generators/InnerBuilderGenerator.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package com.github.junkfactory.innerbuilder.generators;
22

3-
import com.github.junkfactory.innerbuilder.generators.BuilderMethodsGenerator.BuilderClassName;
43
import com.github.junkfactory.innerbuilder.ui.JavaInnerBuilderOption;
54
import com.intellij.codeInsight.generation.PsiFieldMember;
65
import com.intellij.psi.PsiClass;
76
import com.intellij.psi.PsiField;
87
import com.intellij.psi.PsiJavaFile;
98
import com.intellij.psi.PsiMethod;
109
import com.intellij.psi.PsiModifier;
11-
import com.intellij.psi.PsiType;
1210
import com.intellij.psi.codeStyle.CodeStyleManager;
1311
import com.intellij.psi.util.PropertyUtilBase;
1412
import com.intellij.psi.util.PsiUtil;
@@ -23,12 +21,6 @@
2321

2422
class InnerBuilderGenerator extends AbstractGenerator implements Generator {
2523

26-
public record BuilderClass(PsiClass psiClass,
27-
PsiType builderType,
28-
BuilderClassName builderClassName,
29-
boolean genericType) {
30-
}
31-
3224
InnerBuilderGenerator(GeneratorFactory generatorFactory, GeneratorParams generatorParams) {
3325
super(generatorFactory, generatorParams);
3426
}
@@ -103,7 +95,7 @@ private PsiMethod generateToBuilderMethod(PsiClass targetClass,
10395

10496
private PsiMethod generateStaticBuilderMethod(PsiClass targetClass, BuilderClass builderClass) {
10597
var psiElementFactory = generatorParams.psi().factory();
106-
var methodName = Utils.buildBuilderMethodName(builderClass.builderType());
98+
var methodName = Utils.buildBuilderMethodName(builderClass);
10799
var newBuilderMethod = psiElementFactory.createMethodFromText(methodName, targetClass);
108100
PsiUtil.setModifierProperty(newBuilderMethod, PsiModifier.STATIC, true);
109101
PsiUtil.setModifierProperty(newBuilderMethod, PsiModifier.PUBLIC, true);

src/main/java/com/github/junkfactory/innerbuilder/generators/Utils.java

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.github.junkfactory.innerbuilder.generators;
22

3-
import com.github.junkfactory.innerbuilder.generators.BuilderMethodsGenerator.BuilderClassName;
43
import com.intellij.openapi.editor.Editor;
54
import com.intellij.psi.PsiClass;
65
import com.intellij.psi.PsiClassType;
@@ -21,7 +20,7 @@
2120
import java.util.Optional;
2221
import java.util.function.Predicate;
2322

24-
import static com.github.junkfactory.innerbuilder.generators.AbstractGenerator.BUILDER_CLASS_NAME;
23+
import static com.github.junkfactory.innerbuilder.generators.AbstractGenerator.BUILDER_METHOD_NAME;
2524

2625
public class Utils {
2726
@NonNls
@@ -178,25 +177,22 @@ public static BuilderClassName buildClassName(String className, PsiClass targetC
178177
return new BuilderClassName(builderClassName.toString(), className);
179178
}
180179

181-
public static String buildBuilderMethodName(PsiType builderType) {
182-
var methodName = BUILDER_CLASS_NAME;
183-
if (isGenericType(builderType)) {
184-
var psiClassType = (PsiClassType) builderType;
180+
public static String buildBuilderMethodName(BuilderClass builderClass) {
181+
var psiClassType = (PsiClassType) builderClass.builderType();
182+
if (builderClass.genericType()) {
185183
var typeParameters = psiClassType.getParameters();
186-
if (typeParameters.length > 0) {
187-
var typeParameterNames = new StringBuilder();
188-
for (int i = 0, l = typeParameters.length; i < l; i++) {
189-
var typeParameter = typeParameters[i];
190-
typeParameterNames.append(typeParameter.getPresentableText());
191-
if (i < l - 1) {
192-
typeParameterNames.append(", ");
193-
}
184+
var typeParameterNames = new StringBuilder();
185+
for (int i = 0, l = typeParameters.length; i < l; i++) {
186+
var typeParameter = typeParameters[i];
187+
typeParameterNames.append(typeParameter.getPresentableText());
188+
if (i < l - 1) {
189+
typeParameterNames.append(", ");
194190
}
195-
methodName = String.format("<%s> %s %s(){}", typeParameterNames,
196-
builderType.getPresentableText(), methodName);
197191
}
192+
return String.format("<%s> %s %s(){}", typeParameterNames,
193+
psiClassType.getPresentableText(), BUILDER_METHOD_NAME);
198194
}
199-
return methodName;
195+
return String.format("%s %s(){}", psiClassType.getPresentableText(), BUILDER_METHOD_NAME);
200196
}
201197

202198
}

0 commit comments

Comments
 (0)