1100 lines
71 KiB
Java
1100 lines
71 KiB
Java
package lombok.javac.handlers;
|
|
|
|
import com.discord.api.permission.Permission;
|
|
import com.sun.source.tree.Tree;
|
|
import com.sun.tools.javac.code.BoundKind;
|
|
import com.sun.tools.javac.tree.JCTree;
|
|
import com.sun.tools.javac.util.Context;
|
|
import com.sun.tools.javac.util.List;
|
|
import com.sun.tools.javac.util.ListBuffer;
|
|
import com.sun.tools.javac.util.Name;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.HashSet;
|
|
import java.util.Iterator;
|
|
import lombok.AccessLevel;
|
|
import lombok.Builder;
|
|
import lombok.ConfigurationKeys;
|
|
import lombok.Singular;
|
|
import lombok.Value;
|
|
import lombok.core.AST;
|
|
import lombok.core.AnnotationValues;
|
|
import lombok.core.HandlerPriority;
|
|
import lombok.core.configuration.CheckerFrameworkVersion;
|
|
import lombok.core.handlers.HandlerUtil;
|
|
import lombok.experimental.NonFinal;
|
|
import lombok.experimental.SuperBuilder;
|
|
import lombok.javac.Javac;
|
|
import lombok.javac.JavacAnnotationHandler;
|
|
import lombok.javac.JavacNode;
|
|
import lombok.javac.JavacTreeMaker;
|
|
import lombok.javac.handlers.HandleBuilder;
|
|
import lombok.javac.handlers.JavacHandlerUtil;
|
|
import lombok.javac.handlers.JavacSingularsRecipes;
|
|
@HandlerPriority(-1024)
|
|
/* loaded from: com.discord-119010.apk:lombok/javac/handlers/HandleSuperBuilder.SCL.lombok */
|
|
public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> {
|
|
private static final String SELF_METHOD = "self";
|
|
private static final String FILL_VALUES_METHOD_NAME = "$fillValuesFrom";
|
|
private static final String STATIC_FILL_VALUES_METHOD_NAME = "$fillValuesFromInstanceIntoBuilder";
|
|
private static final String INSTANCE_VARIABLE_NAME = "instance";
|
|
private static final String BUILDER_VARIABLE_NAME = "b";
|
|
private static /* synthetic */ int[] $SWITCH_TABLE$lombok$javac$handlers$JavacHandlerUtil$MemberExistsResult;
|
|
|
|
/* renamed from: lombok.javac.handlers.HandleSuperBuilder$1 reason: invalid class name */
|
|
/* loaded from: com.discord-119010.apk:lombok/javac/handlers/HandleSuperBuilder$1.SCL.lombok */
|
|
class AnonymousClass1 implements JavacSingularsRecipes.ExpressionMaker {
|
|
private final /* synthetic */ JavacTreeMaker val$maker;
|
|
private final /* synthetic */ SuperBuilderJob val$job;
|
|
private final /* synthetic */ String val$builderGenericName;
|
|
|
|
AnonymousClass1(JavacTreeMaker javacTreeMaker, SuperBuilderJob superBuilderJob, String str) {
|
|
this.val$maker = javacTreeMaker;
|
|
this.val$job = superBuilderJob;
|
|
this.val$builderGenericName = str;
|
|
}
|
|
|
|
@Override // lombok.javac.handlers.JavacSingularsRecipes.ExpressionMaker
|
|
public JCTree.JCExpression make() {
|
|
return this.val$maker.Ident(this.val$job.toName(this.val$builderGenericName));
|
|
}
|
|
}
|
|
|
|
/* renamed from: lombok.javac.handlers.HandleSuperBuilder$2 reason: invalid class name */
|
|
/* loaded from: com.discord-119010.apk:lombok/javac/handlers/HandleSuperBuilder$2.SCL.lombok */
|
|
class AnonymousClass2 implements JavacSingularsRecipes.StatementMaker {
|
|
private final /* synthetic */ JavacTreeMaker val$maker;
|
|
private final /* synthetic */ SuperBuilderJob val$job;
|
|
|
|
AnonymousClass2(JavacTreeMaker javacTreeMaker, SuperBuilderJob superBuilderJob) {
|
|
this.val$maker = javacTreeMaker;
|
|
this.val$job = superBuilderJob;
|
|
}
|
|
|
|
@Override // lombok.javac.handlers.JavacSingularsRecipes.StatementMaker
|
|
public JCTree.JCStatement make() {
|
|
return this.val$maker.Return(this.val$maker.Apply(List.nil(), this.val$maker.Ident(this.val$job.toName(HandleSuperBuilder.SELF_METHOD)), List.nil()));
|
|
}
|
|
}
|
|
|
|
/* loaded from: com.discord-119010.apk:lombok/javac/handlers/HandleSuperBuilder$SuperBuilderJob.SCL.lombok */
|
|
class SuperBuilderJob extends HandleBuilder.BuilderJob {
|
|
JavacNode builderAbstractType;
|
|
String builderAbstractClassName;
|
|
JavacNode builderImplType;
|
|
String builderImplClassName;
|
|
List<JCTree.JCTypeParameter> builderTypeParams_;
|
|
|
|
SuperBuilderJob() {
|
|
}
|
|
|
|
void init(AnnotationValues<SuperBuilder> annotationValues, SuperBuilder superBuilder, JavacNode javacNode) {
|
|
AccessLevel accessLevel = AccessLevel.PUBLIC;
|
|
this.accessInners = accessLevel;
|
|
this.accessOuters = accessLevel;
|
|
this.oldFluent = true;
|
|
this.oldChain = true;
|
|
this.builderMethodName = superBuilder.builderMethodName();
|
|
this.buildMethodName = superBuilder.buildMethodName();
|
|
this.toBuilder = superBuilder.toBuilder();
|
|
if (this.builderMethodName == null) {
|
|
this.builderMethodName = "builder";
|
|
}
|
|
if (this.buildMethodName == null) {
|
|
this.buildMethodName = "build";
|
|
}
|
|
this.builderClassName = fixBuilderClassName(javacNode, "");
|
|
}
|
|
|
|
void setBuilderToImpl() {
|
|
this.builderType = this.builderImplType;
|
|
this.builderClassName = this.builderImplClassName;
|
|
this.builderTypeParams = this.typeParams;
|
|
}
|
|
|
|
void setBuilderToAbstract() {
|
|
this.builderType = this.builderAbstractType;
|
|
this.builderClassName = this.builderAbstractClassName;
|
|
this.builderTypeParams = this.builderTypeParams_;
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:100:0x0547, code lost:
|
|
if (r0.builderAbstractType != null) goto L_0x0574;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:101:0x054a, code lost:
|
|
r0.builderAbstractType = generateBuilderAbstractClass(r0, r28, r17, r0, r0);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0.builderAbstractType.get(), r10, r11.getContext());
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:102:0x0574, code lost:
|
|
r0 = r0.builderAbstractType.get();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:103:0x0591, code lost:
|
|
if (r0.getModifiers().getFlags().contains(javax.lang.model.element.Modifier.STATIC) == false) goto L_0x05a7;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:105:0x05a4, code lost:
|
|
if (r0.getModifiers().getFlags().contains(javax.lang.model.element.Modifier.ABSTRACT) != false) goto L_0x05af;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:106:0x05a7, code lost:
|
|
r11.addError("Existing Builder must be an abstract static inner class.");
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:107:0x05ae, code lost:
|
|
return;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:108:0x05af, code lost:
|
|
lombok.javac.handlers.JavacHandlerUtil.sanityCheckForMethodGeneratingAnnotationsOnBuilderClass(r0.builderAbstractType, r11);
|
|
r0 = r0.builderFields.iterator();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:109:0x05c7, code lost:
|
|
r0 = r0.next();
|
|
r0 = r0.singularData;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:110:0x05dc, code lost:
|
|
if (r0 != null) goto L_0x05e2;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:111:0x05e2, code lost:
|
|
r0 = r0.getSingularizer();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:112:0x05eb, code lost:
|
|
if (r0 != null) goto L_0x05f1;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:114:0x05fd, code lost:
|
|
if (r0.checkForAlreadyExistingNodesAndGenerateError(r0.builderType, r0) == false) goto L_0x0606;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:115:0x0600, code lost:
|
|
r0.singularData = null;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:117:0x060d, code lost:
|
|
if (r0.hasNext() != false) goto L_0x05c7;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:118:0x0610, code lost:
|
|
r0.setBuilderToAbstract();
|
|
generateBuilderFields(r0.builderType, r0.builderFields, r10);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:119:0x0626, code lost:
|
|
if (r18 == false) goto L_0x065f;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:120:0x0629, code lost:
|
|
r0 = r0.VarDef(r0.Modifiers(2), r0.toName("$lombokUnclean"), r0.TypeIdent(lombok.javac.Javac.CTC_BOOLEAN), null);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectFieldAndMarkGenerated(r0.builderType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:122:0x0664, code lost:
|
|
if (r0.toBuilder == false) goto L_0x06b6;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:124:0x066c, code lost:
|
|
if (r28 == null) goto L_0x0673;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:125:0x066f, code lost:
|
|
r2 = true;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:126:0x0673, code lost:
|
|
r2 = false;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:127:0x0674, code lost:
|
|
r0 = generateFillValuesMethod(r0, r2, r0, r0);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderType, r0);
|
|
r0 = generateStaticFillValuesMethod(r0, r0.setterPrefix());
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:129:0x06bb, code lost:
|
|
if (r28 == null) goto L_0x06c2;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:130:0x06be, code lost:
|
|
r2 = true;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:131:0x06c2, code lost:
|
|
r2 = false;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:132:0x06c3, code lost:
|
|
r0 = generateAbstractSelfMethod(r0, r2, r0);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:133:0x06e4, code lost:
|
|
if (r28 == null) goto L_0x06eb;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:134:0x06e7, code lost:
|
|
r2 = true;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:135:0x06eb, code lost:
|
|
r2 = false;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:136:0x06ec, code lost:
|
|
r0 = generateAbstractBuildMethod(r0, r2, r0);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderType, r0);
|
|
r0 = r0.builderFields.iterator();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:137:0x0717, code lost:
|
|
generateSetterMethodsForBuilder(r0, r0.next(), r0, r0.setterPrefix());
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:139:0x073b, code lost:
|
|
if (r0.hasNext() != false) goto L_0x0717;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:140:0x073e, code lost:
|
|
r0 = new java.util.ArrayList();
|
|
r0 = r0.builderFields.iterator();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:141:0x0756, code lost:
|
|
r0 = r0.next().createdFields.iterator();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:142:0x0771, code lost:
|
|
r0.add(new lombok.core.handlers.InclusionExclusionUtils.Included(r0.next(), null, true, false));
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:144:0x0798, code lost:
|
|
if (r0.hasNext() != false) goto L_0x0771;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:146:0x07a2, code lost:
|
|
if (r0.hasNext() != false) goto L_0x0756;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:147:0x07a5, code lost:
|
|
r0 = r0.builderType;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:148:0x07af, code lost:
|
|
if (r28 == null) goto L_0x07b6;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:149:0x07b2, code lost:
|
|
r3 = true;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:150:0x07b6, code lost:
|
|
r3 = false;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:151:0x07b7, code lost:
|
|
r0 = lombok.javac.handlers.HandleToString.createToString(r0, r0, true, r3, lombok.core.handlers.HandlerUtil.FieldAccess.ALWAYS_FIELD, r10);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:152:0x07c2, code lost:
|
|
if (r0 == null) goto L_0x07cf;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:153:0x07c5, code lost:
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:155:0x07d1, code lost:
|
|
if (r18 == false) goto L_0x07fa;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:156:0x07d4, code lost:
|
|
r0 = generateCleanMethod(r0.builderFields, r0.builderType, r10);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:158:0x0808, code lost:
|
|
if ((r0.mods.flags & com.discord.api.permission.Permission.VIEW_CHANNEL) == 0) goto L_0x080f;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:159:0x080b, code lost:
|
|
r0 = true;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:160:0x080f, code lost:
|
|
r0 = false;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:162:0x0814, code lost:
|
|
if (r0 != false) goto L_0x090e;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:163:0x0817, code lost:
|
|
r0.builderImplType = findInnerClass(r0, r0.builderImplClassName);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:164:0x082c, code lost:
|
|
if (r0.builderImplType != null) goto L_0x0851;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:165:0x082f, code lost:
|
|
r0.builderImplType = generateBuilderImplClass(r0);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0.builderImplType.get(), r10, r11.getContext());
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:166:0x0851, code lost:
|
|
r0 = r0.builderImplType.get();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:167:0x086e, code lost:
|
|
if (r0.getModifiers().getFlags().contains(javax.lang.model.element.Modifier.STATIC) == false) goto L_0x0884;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:169:0x0881, code lost:
|
|
if (r0.getModifiers().getFlags().contains(javax.lang.model.element.Modifier.ABSTRACT) == false) goto L_0x088c;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:170:0x0884, code lost:
|
|
r11.addError("Existing BuilderImpl must be a non-abstract static inner class.");
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:171:0x088b, code lost:
|
|
return;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:172:0x088c, code lost:
|
|
lombok.javac.handlers.JavacHandlerUtil.sanityCheckForMethodGeneratingAnnotationsOnBuilderClass(r0.builderImplType, r11);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:173:0x0895, code lost:
|
|
r0 = lombok.javac.handlers.HandleConstructor.createConstructor(lombok.AccessLevel.PRIVATE, com.sun.tools.javac.util.List.nil(), r0.builderImplType, com.sun.tools.javac.util.List.nil(), false, r11);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:174:0x08ac, code lost:
|
|
if (r0 == null) goto L_0x08b9;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:175:0x08af, code lost:
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderImplType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:176:0x08b9, code lost:
|
|
r0.setBuilderToImpl();
|
|
r0 = generateSelfMethod(r0);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:177:0x08ec, code lost:
|
|
if (lombok.javac.handlers.JavacHandlerUtil.methodExists(r0.buildMethodName, r0.builderType, -1) != lombok.javac.handlers.JavacHandlerUtil.MemberExistsResult.NOT_EXISTS) goto L_0x090e;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:178:0x08ef, code lost:
|
|
r0 = generateBuildMethod(r0, r0);
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.builderType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:180:0x091c, code lost:
|
|
if (constructorExists(r0.parentType, r0.builderAbstractClassName) != false) goto L_0x0934;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:181:0x091f, code lost:
|
|
r0.setBuilderToAbstract();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:182:0x0929, code lost:
|
|
if (r28 == null) goto L_0x0930;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:183:0x092c, code lost:
|
|
r2 = true;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:184:0x0930, code lost:
|
|
r2 = false;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:185:0x0931, code lost:
|
|
generateBuilderBasedConstructor(r0, r2);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:187:0x0936, code lost:
|
|
if (r0 != false) goto L_0x09d5;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:189:0x093b, code lost:
|
|
if (r14 == false) goto L_0x0955;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:191:0x094f, code lost:
|
|
if (lombok.javac.handlers.JavacHandlerUtil.methodExists(r0.builderMethodName, r0.parentType, -1) == lombok.javac.handlers.JavacHandlerUtil.MemberExistsResult.NOT_EXISTS) goto L_0x0955;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:192:0x0952, code lost:
|
|
r14 = false;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:194:0x0957, code lost:
|
|
if (r14 == false) goto L_0x097c;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:195:0x095a, code lost:
|
|
r0 = generateBuilderMethod(r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:196:0x0964, code lost:
|
|
if (r0 == null) goto L_0x097c;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:197:0x0967, code lost:
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.parentType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:199:0x0981, code lost:
|
|
if (r0.toBuilder == false) goto L_0x09d5;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:201:0x0997, code lost:
|
|
switch($SWITCH_TABLE$lombok$javac$handlers$JavacHandlerUtil$MemberExistsResult()[lombok.javac.handlers.JavacHandlerUtil.methodExists("toBuilder", r0.parentType, 0).ordinal()]) {
|
|
case 1: goto L_0x09b3;
|
|
case 2: goto L_0x09d5;
|
|
case 3: goto L_0x09b0;
|
|
default: goto L_0x09d5;
|
|
};
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:202:0x09b3, code lost:
|
|
r0 = generateToBuilderMethod(r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:203:0x09bd, code lost:
|
|
if (r0 == null) goto L_0x09d5;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:204:0x09c0, code lost:
|
|
lombok.javac.handlers.JavacHandlerUtil.recursiveSetGeneratedBy(r0, r10, r11.getContext());
|
|
lombok.javac.handlers.JavacHandlerUtil.injectMethod(r0.parentType, r0);
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:206:0x09d7, code lost:
|
|
if (r21 == null) goto L_0x0a07;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:208:0x09dc, code lost:
|
|
if (r14 == false) goto L_?;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:209:0x09df, code lost:
|
|
r0 = r21.iterator();
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:210:0x09e9, code lost:
|
|
((lombok.javac.JavacNode) r0.next()).addWarning("@SuperBuilder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.");
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:212:0x0a04, code lost:
|
|
if (r0.hasNext() != false) goto L_0x09e9;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:213:0x0a07, code lost:
|
|
return;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:244:?, code lost:
|
|
return;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:245:?, code lost:
|
|
return;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:99:0x0500, code lost:
|
|
r2 = r0.replaceBuilderClassName(r0.name);
|
|
r0.builderClassName = r2;
|
|
r0.builderAbstractClassName = r2;
|
|
r0.builderImplClassName = java.lang.String.valueOf(r0.builderAbstractClassName) + "Impl";
|
|
r0.builderAbstractType = findInnerClass(r0, r0.builderClassName);
|
|
*/
|
|
@Override // lombok.javac.JavacAnnotationHandler
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
*/
|
|
public void handle(AnnotationValues<SuperBuilder> annotationValues, JCTree.JCAnnotation jCAnnotation, JavacNode javacNode) {
|
|
boolean z2;
|
|
HandlerUtil.handleExperimentalFlagUsage(javacNode, ConfigurationKeys.SUPERBUILDER_FLAG_USAGE, "@SuperBuilder");
|
|
SuperBuilderJob superBuilderJob = new SuperBuilderJob();
|
|
superBuilderJob.sourceNode = javacNode;
|
|
superBuilderJob.source = jCAnnotation;
|
|
superBuilderJob.checkerFramework = JavacHandlerUtil.getCheckerFrameworkVersion(javacNode);
|
|
superBuilderJob.isStatic = true;
|
|
SuperBuilder instance = annotationValues.getInstance();
|
|
superBuilderJob.init(annotationValues, instance, javacNode);
|
|
if (superBuilderJob.builderMethodName.isEmpty()) {
|
|
z2 = false;
|
|
} else if (HandlerUtil.checkName("builderMethodName", superBuilderJob.builderMethodName, javacNode)) {
|
|
z2 = true;
|
|
} else {
|
|
return;
|
|
}
|
|
if (HandlerUtil.checkName("buildMethodName", superBuilderJob.buildMethodName, javacNode)) {
|
|
JavacNode up = javacNode.up();
|
|
superBuilderJob.builderFields = new ArrayList();
|
|
superBuilderJob.typeParams = List.nil();
|
|
List<JCTree.JCExpression> nil = List.nil();
|
|
List<JCTree.JCExpression> nil2 = List.nil();
|
|
boolean z3 = false;
|
|
if (up.get() instanceof JCTree.JCClassDecl) {
|
|
superBuilderJob.parentType = up;
|
|
JCTree.JCClassDecl jCClassDecl = (JCTree.JCClassDecl) up.get();
|
|
ListBuffer listBuffer = new ListBuffer();
|
|
ArrayList arrayList = null;
|
|
boolean z4 = JavacHandlerUtil.hasAnnotation(Value.class, up) || JavacHandlerUtil.hasAnnotation("lombok.experimental.Value", up);
|
|
Iterator it = HandleConstructor.findAllFields(up, true).iterator();
|
|
while (it.hasNext()) {
|
|
JavacNode javacNode2 = (JavacNode) it.next();
|
|
JCTree.JCVariableDecl jCVariableDecl = javacNode2.get();
|
|
JavacNode findAnnotation = JavacHandlerUtil.findAnnotation(Builder.Default.class, javacNode2, true);
|
|
boolean z5 = (jCVariableDecl.mods.flags & 16) != 0 || (z4 && !JavacHandlerUtil.hasAnnotation(NonFinal.class, javacNode2));
|
|
HandleBuilder.BuilderFieldData builderFieldData = new HandleBuilder.BuilderFieldData();
|
|
builderFieldData.rawName = jCVariableDecl.name;
|
|
builderFieldData.name = JavacHandlerUtil.removePrefixFromField(javacNode2);
|
|
builderFieldData.builderFieldName = builderFieldData.name;
|
|
builderFieldData.annotations = JavacHandlerUtil.findCopyableAnnotations(javacNode2);
|
|
builderFieldData.type = jCVariableDecl.vartype;
|
|
builderFieldData.singularData = getSingularData(javacNode2, instance.setterPrefix());
|
|
builderFieldData.originalFieldNode = javacNode2;
|
|
if (!(builderFieldData.singularData == null || findAnnotation == null)) {
|
|
findAnnotation.addError("@Builder.Default and @Singular cannot be mixed.");
|
|
findAnnotation = null;
|
|
}
|
|
if (jCVariableDecl.init == null && findAnnotation != null) {
|
|
findAnnotation.addWarning("@Builder.Default requires an initializing expression (' = something;').");
|
|
findAnnotation = null;
|
|
}
|
|
if (jCVariableDecl.init != null && findAnnotation == null) {
|
|
if (!z5) {
|
|
if (arrayList == null) {
|
|
arrayList = new ArrayList();
|
|
}
|
|
arrayList.add(javacNode2);
|
|
}
|
|
}
|
|
if (findAnnotation != null) {
|
|
builderFieldData.nameOfDefaultProvider = up.toName("$default$" + builderFieldData.name);
|
|
builderFieldData.nameOfSetFlag = up.toName(builderFieldData.name + "$set");
|
|
builderFieldData.builderFieldName = up.toName(builderFieldData.name + "$value");
|
|
JCTree.JCMethodDecl generateDefaultProvider = HandleBuilder.generateDefaultProvider(builderFieldData.nameOfDefaultProvider, javacNode2, jCClassDecl.typarams);
|
|
JavacHandlerUtil.recursiveSetGeneratedBy(generateDefaultProvider, jCAnnotation, javacNode.getContext());
|
|
if (generateDefaultProvider != null) {
|
|
JavacHandlerUtil.injectMethod(up, generateDefaultProvider);
|
|
}
|
|
}
|
|
addObtainVia(builderFieldData, javacNode2);
|
|
superBuilderJob.builderFields.add(builderFieldData);
|
|
listBuffer.append(javacNode2);
|
|
}
|
|
List<JCTree.JCTypeParameter> list = jCClassDecl.typarams;
|
|
superBuilderJob.builderTypeParams = list;
|
|
superBuilderJob.typeParams = list;
|
|
superBuilderJob.builderClassName = superBuilderJob.replaceBuilderClassName(jCClassDecl.name);
|
|
if (HandlerUtil.checkName("builderClassName", superBuilderJob.builderClassName, javacNode)) {
|
|
HashSet<String> gatherUsedTypeNames = gatherUsedTypeNames(superBuilderJob.typeParams, jCClassDecl);
|
|
String generateNonclashingNameFor = generateNonclashingNameFor("C", gatherUsedTypeNames);
|
|
String generateNonclashingNameFor2 = generateNonclashingNameFor("B", gatherUsedTypeNames);
|
|
JavacTreeMaker treeMaker = javacNode.getTreeMaker();
|
|
JCTree.JCTypeParameter TypeParameter = treeMaker.TypeParameter(up.toName(generateNonclashingNameFor), List.of(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, up, superBuilderJob.typeParams)));
|
|
ListBuffer<JCTree.JCExpression> typeParamExpressions = getTypeParamExpressions(superBuilderJob.typeParams, treeMaker, superBuilderJob.sourceNode.getContext());
|
|
typeParamExpressions.add(treeMaker.Ident(up.toName(generateNonclashingNameFor)));
|
|
typeParamExpressions.add(treeMaker.Ident(up.toName(generateNonclashingNameFor2)));
|
|
JCTree.JCTypeParameter TypeParameter2 = treeMaker.TypeParameter(up.toName(generateNonclashingNameFor2), List.of(treeMaker.TypeApply(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, up, superBuilderJob.getBuilderClassName(), false, List.nil()), typeParamExpressions.toList())));
|
|
if (superBuilderJob.typeParams == null || superBuilderJob.typeParams.isEmpty()) {
|
|
superBuilderJob.builderTypeParams_ = List.of(TypeParameter, TypeParameter2);
|
|
} else {
|
|
superBuilderJob.builderTypeParams_ = superBuilderJob.typeParams.append(TypeParameter).append(TypeParameter2);
|
|
}
|
|
JCTree extendsClause = Javac.getExtendsClause(jCClassDecl);
|
|
JCTree.JCFieldAccess jCFieldAccess = null;
|
|
if (extendsClause instanceof JCTree.JCTypeApply) {
|
|
nil2 = ((JCTree.JCTypeApply) extendsClause).getTypeArguments();
|
|
extendsClause = ((JCTree.JCTypeApply) extendsClause).getType();
|
|
}
|
|
if (extendsClause instanceof JCTree.JCFieldAccess) {
|
|
jCFieldAccess = up.getTreeMaker().Select((JCTree.JCFieldAccess) extendsClause, up.toName(String.valueOf(((JCTree.JCFieldAccess) extendsClause).getIdentifier().toString()) + "Builder"));
|
|
} else if (extendsClause != null) {
|
|
jCFieldAccess = JavacHandlerUtil.chainDots(up, extendsClause.toString(), String.valueOf(extendsClause.toString()) + "Builder", new String[0]);
|
|
}
|
|
Iterator<HandleBuilder.BuilderFieldData> it2 = superBuilderJob.builderFields.iterator();
|
|
while (true) {
|
|
if (it2.hasNext()) {
|
|
HandleBuilder.BuilderFieldData next = it2.next();
|
|
if (next.singularData != null && next.singularData.getSingularizer() != null && next.singularData.getSingularizer().requiresCleaning()) {
|
|
z3 = true;
|
|
break;
|
|
} else if (next.obtainVia != null) {
|
|
if (next.obtainVia.field().isEmpty() == next.obtainVia.method().isEmpty()) {
|
|
next.obtainViaNode.addError("The syntax is either @ObtainVia(field = \"fieldName\") or @ObtainVia(method = \"methodName\").");
|
|
return;
|
|
} else if (next.obtainVia.method().isEmpty() && next.obtainVia.isStatic()) {
|
|
next.obtainViaNode.addError("@ObtainVia(isStatic = true) is not valid unless 'method' has been set.");
|
|
return;
|
|
}
|
|
}
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
javacNode.addError("@SuperBuilder is only supported on types.");
|
|
}
|
|
}
|
|
}
|
|
|
|
private JavacNode generateBuilderAbstractClass(SuperBuilderJob superBuilderJob, JCTree.JCExpression jCExpression, List<JCTree.JCExpression> list, String str, String str2) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.parentType.getTreeMaker();
|
|
JCTree.JCModifiers Modifiers = treeMaker.Modifiers(1033L);
|
|
ListBuffer listBuffer = new ListBuffer();
|
|
listBuffer.addAll(JavacHandlerUtil.copyTypeParams(superBuilderJob.sourceNode, superBuilderJob.typeParams));
|
|
listBuffer.add(treeMaker.TypeParameter(superBuilderJob.toName(str), List.of(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.typeParams))));
|
|
Name name = superBuilderJob.toName(superBuilderJob.builderClassName);
|
|
ListBuffer<JCTree.JCExpression> typeParamExpressions = getTypeParamExpressions(superBuilderJob.typeParams, treeMaker, superBuilderJob.sourceNode.getContext());
|
|
typeParamExpressions.add(treeMaker.Ident(superBuilderJob.toName(str)));
|
|
typeParamExpressions.add(treeMaker.Ident(superBuilderJob.toName(str2)));
|
|
listBuffer.add(treeMaker.TypeParameter(superBuilderJob.toName(str2), List.of(treeMaker.TypeApply(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, name, false, List.nil()), typeParamExpressions.toList()))));
|
|
JCTree.JCTypeApply jCTypeApply = null;
|
|
if (jCExpression != null) {
|
|
ListBuffer<JCTree.JCExpression> typeParamExpressions2 = getTypeParamExpressions(list, treeMaker, superBuilderJob.sourceNode.getContext());
|
|
typeParamExpressions2.add(treeMaker.Ident(superBuilderJob.toName(str)));
|
|
typeParamExpressions2.add(treeMaker.Ident(superBuilderJob.toName(str2)));
|
|
jCTypeApply = treeMaker.TypeApply(jCExpression, typeParamExpressions2.toList());
|
|
}
|
|
return JavacHandlerUtil.injectType(superBuilderJob.parentType, treeMaker.ClassDef(Modifiers, name, listBuffer.toList(), jCTypeApply, List.nil(), List.nil()));
|
|
}
|
|
|
|
private JavacNode generateBuilderImplClass(SuperBuilderJob superBuilderJob) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
JCTree.JCModifiers Modifiers = treeMaker.Modifiers(26L);
|
|
JCTree.JCExpression namePlusTypeParamsToTypeReference = JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.toName(superBuilderJob.builderAbstractClassName), false, List.nil());
|
|
new ListBuffer().addAll(JavacHandlerUtil.copyTypeParams(superBuilderJob.sourceNode, superBuilderJob.typeParams));
|
|
JCTree.JCExpression namePlusTypeParamsToTypeReference2 = JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.typeParams);
|
|
JCTree.JCExpression namePlusTypeParamsToTypeReference3 = JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.toName(superBuilderJob.builderImplClassName), false, superBuilderJob.typeParams);
|
|
ListBuffer<JCTree.JCExpression> typeParamExpressions = getTypeParamExpressions(superBuilderJob.typeParams, treeMaker, superBuilderJob.getContext());
|
|
typeParamExpressions.add(namePlusTypeParamsToTypeReference2);
|
|
typeParamExpressions.add(namePlusTypeParamsToTypeReference3);
|
|
return JavacHandlerUtil.injectType(superBuilderJob.parentType, treeMaker.ClassDef(Modifiers, superBuilderJob.toName(superBuilderJob.builderImplClassName), JavacHandlerUtil.copyTypeParams(superBuilderJob.parentType, superBuilderJob.typeParams), treeMaker.TypeApply(namePlusTypeParamsToTypeReference, typeParamExpressions.toList()), List.nil(), List.nil()));
|
|
}
|
|
|
|
private void generateBuilderBasedConstructor(SuperBuilderJob superBuilderJob, boolean z2) {
|
|
JCTree.JCIdent jCIdent;
|
|
JCTree.JCStatement generateNullCheck;
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
AccessLevel accessLevel = AccessLevel.PROTECTED;
|
|
ListBuffer<JCTree.JCStatement> listBuffer = new ListBuffer<>();
|
|
Name name = superBuilderJob.toName(BUILDER_VARIABLE_NAME);
|
|
Iterator<HandleBuilder.BuilderFieldData> it = superBuilderJob.builderFields.iterator();
|
|
while (it.hasNext()) {
|
|
HandleBuilder.BuilderFieldData next = it.next();
|
|
if (next.singularData == null || next.singularData.getSingularizer() == null) {
|
|
jCIdent = treeMaker.Select(treeMaker.Ident(name), next.builderFieldName);
|
|
} else {
|
|
next.singularData.getSingularizer().appendBuildCode(next.singularData, next.originalFieldNode, next.type, listBuffer, next.builderFieldName, BUILDER_VARIABLE_NAME);
|
|
jCIdent = treeMaker.Ident(next.singularData.getPluralName());
|
|
}
|
|
JCTree.JCExpressionStatement Exec = treeMaker.Exec(treeMaker.Assign(treeMaker.Select(treeMaker.Ident(superBuilderJob.toName("this")), next.rawName), jCIdent));
|
|
if (next.nameOfSetFlag != null) {
|
|
listBuffer.append(treeMaker.If(treeMaker.Select(treeMaker.Ident(name), next.nameOfSetFlag), Exec, treeMaker.Exec(treeMaker.Assign(treeMaker.Select(treeMaker.Ident(superBuilderJob.toName("this")), next.rawName), treeMaker.Apply(JavacHandlerUtil.typeParameterNames(treeMaker, superBuilderJob.parentType.get().typarams), treeMaker.Select(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, List.nil()), next.nameOfDefaultProvider), List.nil())))));
|
|
} else {
|
|
listBuffer.append(Exec);
|
|
}
|
|
if (JavacHandlerUtil.hasNonNullAnnotations(next.originalFieldNode) && (generateNullCheck = JavacHandlerUtil.generateNullCheck(treeMaker, next.originalFieldNode, superBuilderJob.sourceNode)) != null) {
|
|
listBuffer.append(generateNullCheck);
|
|
}
|
|
}
|
|
JCTree.JCModifiers Modifiers = treeMaker.Modifiers(JavacHandlerUtil.toJavacModifier(accessLevel), superBuilderJob.checkerFramework.generateUnique() ? List.of(treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.parentType, CheckerFrameworkVersion.NAME__SIDE_EFFECT_FREE), List.nil())) : List.nil());
|
|
ListBuffer listBuffer2 = new ListBuffer();
|
|
long addFinalIfNeeded = JavacHandlerUtil.addFinalIfNeeded(Permission.MANAGE_EVENTS, superBuilderJob.getContext());
|
|
ListBuffer<JCTree.JCExpression> typeParamExpressions = getTypeParamExpressions(superBuilderJob.typeParams, treeMaker, superBuilderJob.getContext());
|
|
typeParamExpressions.add(treeMaker.Wildcard(treeMaker.TypeBoundKind(BoundKind.UNBOUND), null));
|
|
typeParamExpressions.add(treeMaker.Wildcard(treeMaker.TypeBoundKind(BoundKind.UNBOUND), null));
|
|
listBuffer2.append(treeMaker.VarDef(treeMaker.Modifiers(addFinalIfNeeded), name, treeMaker.TypeApply(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.getBuilderClassName(), false, List.nil()), typeParamExpressions.toList()), null));
|
|
if (z2) {
|
|
listBuffer.prepend(treeMaker.Exec(treeMaker.Apply(List.nil(), treeMaker.Ident(superBuilderJob.toName("super")), List.of(treeMaker.Ident(name)))));
|
|
}
|
|
JavacHandlerUtil.injectMethod(superBuilderJob.parentType, JavacHandlerUtil.recursiveSetGeneratedBy(treeMaker.MethodDef(Modifiers, superBuilderJob.toName("<init>"), null, List.nil(), listBuffer2.toList(), List.nil(), treeMaker.Block(0L, listBuffer.toList()), null), superBuilderJob.source, superBuilderJob.getContext()), null, Javac.createVoidType(superBuilderJob.builderType.getSymbolTable(), Javac.CTC_VOID));
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateBuilderMethod(SuperBuilderJob superBuilderJob) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
ListBuffer listBuffer = new ListBuffer();
|
|
Iterator it = superBuilderJob.typeParams.iterator();
|
|
while (it.hasNext()) {
|
|
listBuffer.append(treeMaker.Ident(((JCTree.JCTypeParameter) it.next()).name));
|
|
}
|
|
JCTree.JCBlock Block = treeMaker.Block(0L, List.of(treeMaker.Return(treeMaker.NewClass(null, List.nil(), JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.toName(superBuilderJob.builderImplClassName), false, superBuilderJob.typeParams), List.nil(), null))));
|
|
int i = 1 | 8;
|
|
ListBuffer listBuffer2 = new ListBuffer();
|
|
listBuffer2.addAll(JavacHandlerUtil.typeParameterNames(treeMaker, superBuilderJob.typeParams));
|
|
JCTree.JCWildcard Wildcard = treeMaker.Wildcard(treeMaker.TypeBoundKind(BoundKind.UNBOUND), null);
|
|
listBuffer2.add(Wildcard);
|
|
listBuffer2.add(Wildcard);
|
|
JCTree.JCMethodDecl MethodDef = treeMaker.MethodDef(treeMaker.Modifiers(i, superBuilderJob.checkerFramework.generateUnique() ? List.of(treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.parentType, CheckerFrameworkVersion.NAME__SIDE_EFFECT_FREE), List.nil())) : List.nil()), superBuilderJob.toName(superBuilderJob.builderMethodName), treeMaker.TypeApply(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.toName(superBuilderJob.builderAbstractClassName), false, List.nil()), listBuffer2.toList()), JavacHandlerUtil.copyTypeParams(superBuilderJob.sourceNode, superBuilderJob.typeParams), List.nil(), List.nil(), Block, null);
|
|
JavacHandlerUtil.createRelevantNonNullAnnotation(superBuilderJob.parentType, MethodDef);
|
|
return MethodDef;
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateToBuilderMethod(SuperBuilderJob superBuilderJob) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
ListBuffer listBuffer = new ListBuffer();
|
|
Iterator it = superBuilderJob.typeParams.iterator();
|
|
while (it.hasNext()) {
|
|
listBuffer.append(treeMaker.Ident(((JCTree.JCTypeParameter) it.next()).name));
|
|
}
|
|
JCTree.JCBlock Block = treeMaker.Block(0L, List.of(treeMaker.Return(treeMaker.Apply(List.nil(), treeMaker.Select(treeMaker.NewClass(null, List.nil(), JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.toName(superBuilderJob.builderImplClassName), false, superBuilderJob.typeParams), List.nil(), null), superBuilderJob.toName(FILL_VALUES_METHOD_NAME)), List.of(treeMaker.Ident(superBuilderJob.toName("this")))))));
|
|
ListBuffer listBuffer2 = new ListBuffer();
|
|
listBuffer2.addAll(JavacHandlerUtil.typeParameterNames(treeMaker, superBuilderJob.typeParams));
|
|
JCTree.JCWildcard Wildcard = treeMaker.Wildcard(treeMaker.TypeBoundKind(BoundKind.UNBOUND), null);
|
|
listBuffer2.add(Wildcard);
|
|
listBuffer2.add(Wildcard);
|
|
JCTree.JCMethodDecl MethodDef = treeMaker.MethodDef(treeMaker.Modifiers(1, superBuilderJob.checkerFramework.generateUnique() ? List.of(treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.parentType, CheckerFrameworkVersion.NAME__SIDE_EFFECT_FREE), List.nil())) : List.nil()), superBuilderJob.toName("toBuilder"), treeMaker.TypeApply(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.toName(superBuilderJob.builderAbstractClassName), false, List.nil()), listBuffer2.toList()), List.nil(), List.nil(), List.nil(), Block, null);
|
|
JavacHandlerUtil.createRelevantNonNullAnnotation(superBuilderJob.parentType, MethodDef);
|
|
return MethodDef;
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateFillValuesMethod(SuperBuilderJob superBuilderJob, boolean z2, String str, String str2) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
List<JCTree.JCAnnotation> nil = List.nil();
|
|
if (z2) {
|
|
nil = List.of(treeMaker.Annotation(JavacHandlerUtil.genJavaLangTypeRef(superBuilderJob.builderType, "Override"), List.nil()));
|
|
}
|
|
JCTree.JCModifiers Modifiers = treeMaker.Modifiers(4L, nil);
|
|
Name name = superBuilderJob.toName(FILL_VALUES_METHOD_NAME);
|
|
JCTree.JCIdent Ident = treeMaker.Ident(superBuilderJob.toName(str));
|
|
JCTree.JCVariableDecl VarDef = treeMaker.VarDef(treeMaker.Modifiers(8589934608L), superBuilderJob.toName(INSTANCE_VARIABLE_NAME), treeMaker.Ident(superBuilderJob.toName(str2)), null);
|
|
ListBuffer listBuffer = new ListBuffer();
|
|
if (z2) {
|
|
listBuffer.append(treeMaker.Exec(treeMaker.Apply(List.nil(), treeMaker.Select(treeMaker.Ident(superBuilderJob.toName("super")), name), List.of(treeMaker.Ident(superBuilderJob.toName(INSTANCE_VARIABLE_NAME))))));
|
|
}
|
|
listBuffer.append(treeMaker.Exec(treeMaker.Apply(List.nil(), treeMaker.Select(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.getBuilderClassName(), false, List.nil()), superBuilderJob.toName(STATIC_FILL_VALUES_METHOD_NAME)), List.of(treeMaker.Ident(superBuilderJob.toName(INSTANCE_VARIABLE_NAME)), treeMaker.Ident(superBuilderJob.toName("this"))))));
|
|
listBuffer.append(treeMaker.Return(treeMaker.Apply(List.nil(), treeMaker.Ident(superBuilderJob.toName(SELF_METHOD)), List.nil())));
|
|
return treeMaker.MethodDef(Modifiers, name, Ident, List.nil(), List.of(VarDef), List.nil(), treeMaker.Block(0L, listBuffer.toList()), null);
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateStaticFillValuesMethod(SuperBuilderJob superBuilderJob, String str) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
JCTree.JCModifiers Modifiers = treeMaker.Modifiers(10L, List.nil());
|
|
Name name = superBuilderJob.toName(STATIC_FILL_VALUES_METHOD_NAME);
|
|
JCTree.JCPrimitiveTypeTree TypeIdent = treeMaker.TypeIdent(Javac.CTC_VOID);
|
|
JCTree.JCVariableDecl VarDef = treeMaker.VarDef(treeMaker.Modifiers(8589934608L), superBuilderJob.toName(INSTANCE_VARIABLE_NAME), JavacHandlerUtil.cloneSelfType(superBuilderJob.parentType), null);
|
|
ListBuffer<JCTree.JCExpression> typeParamExpressions = getTypeParamExpressions(superBuilderJob.typeParams, treeMaker, superBuilderJob.getContext());
|
|
typeParamExpressions.add(treeMaker.Wildcard(treeMaker.TypeBoundKind(BoundKind.UNBOUND), null));
|
|
typeParamExpressions.add(treeMaker.Wildcard(treeMaker.TypeBoundKind(BoundKind.UNBOUND), null));
|
|
JCTree.JCVariableDecl VarDef2 = treeMaker.VarDef(treeMaker.Modifiers(8589934608L), superBuilderJob.toName(BUILDER_VARIABLE_NAME), treeMaker.TypeApply(JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.parentType, superBuilderJob.getBuilderClassName(), false, List.nil()), typeParamExpressions.toList()), null);
|
|
ListBuffer listBuffer = new ListBuffer();
|
|
Iterator<HandleBuilder.BuilderFieldData> it = superBuilderJob.builderFields.iterator();
|
|
while (it.hasNext()) {
|
|
listBuffer.append(createSetterCallWithInstanceValue(it.next(), superBuilderJob.parentType, treeMaker, str));
|
|
}
|
|
return treeMaker.MethodDef(Modifiers, name, TypeIdent, JavacHandlerUtil.copyTypeParams(superBuilderJob.builderType, superBuilderJob.typeParams), List.of(VarDef, VarDef2), List.nil(), treeMaker.Block(0L, listBuffer.toList()), null);
|
|
}
|
|
|
|
private JCTree.JCExpressionStatement createSetterCallWithInstanceValue(HandleBuilder.BuilderFieldData builderFieldData, JavacNode javacNode, JavacTreeMaker javacTreeMaker, String str) {
|
|
JCTree.JCConditional[] jCConditionalArr = new JCTree.JCExpression[builderFieldData.singularData == null ? 1 : 2];
|
|
if (builderFieldData.obtainVia == null || !builderFieldData.obtainVia.field().isEmpty()) {
|
|
for (int i = 0; i < jCConditionalArr.length; i++) {
|
|
jCConditionalArr[i] = javacTreeMaker.Select(javacTreeMaker.Ident(javacNode.toName(INSTANCE_VARIABLE_NAME)), builderFieldData.obtainVia == null ? builderFieldData.rawName : javacNode.toName(builderFieldData.obtainVia.field()));
|
|
}
|
|
} else if (builderFieldData.obtainVia.isStatic()) {
|
|
for (int i2 = 0; i2 < jCConditionalArr.length; i2++) {
|
|
jCConditionalArr[i2] = javacTreeMaker.Apply(List.nil(), javacTreeMaker.Select(JavacHandlerUtil.namePlusTypeParamsToTypeReference(javacTreeMaker, javacNode, List.nil()), javacNode.toName(builderFieldData.obtainVia.method())), List.of(javacTreeMaker.Ident(javacNode.toName(INSTANCE_VARIABLE_NAME))));
|
|
}
|
|
} else {
|
|
for (int i3 = 0; i3 < jCConditionalArr.length; i3++) {
|
|
jCConditionalArr[i3] = javacTreeMaker.Apply(List.nil(), javacTreeMaker.Select(javacTreeMaker.Ident(javacNode.toName(INSTANCE_VARIABLE_NAME)), javacNode.toName(builderFieldData.obtainVia.method())), List.nil());
|
|
}
|
|
}
|
|
return javacTreeMaker.Exec(javacTreeMaker.Apply(List.nil(), javacTreeMaker.Select(javacTreeMaker.Ident(javacNode.toName(BUILDER_VARIABLE_NAME)), javacNode.toName(HandlerUtil.buildAccessorName(str, builderFieldData.name.toString()))), List.of(builderFieldData.singularData == null ? jCConditionalArr[0] : javacTreeMaker.Conditional(javacTreeMaker.Binary(Javac.CTC_EQUAL, jCConditionalArr[0], javacTreeMaker.Literal(Javac.CTC_BOT, null)), javacTreeMaker.Apply(List.nil(), JavacHandlerUtil.chainDots(javacNode, builderFieldData.singularData.getSingularizer().getEmptyMaker(builderFieldData.singularData.getTargetFqn()).split("\\.")), List.nil()), jCConditionalArr[1]))));
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateAbstractSelfMethod(SuperBuilderJob superBuilderJob, boolean z2, String str) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
List<JCTree.JCAnnotation> nil = List.nil();
|
|
JCTree.JCAnnotation Annotation = z2 ? treeMaker.Annotation(JavacHandlerUtil.genJavaLangTypeRef(superBuilderJob.builderType, "Override"), List.nil()) : null;
|
|
JCTree.JCAnnotation Annotation2 = superBuilderJob.checkerFramework.generateReturnsReceiver() ? treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.builderType, CheckerFrameworkVersion.NAME__RETURNS_RECEIVER), List.nil()) : null;
|
|
JCTree.JCAnnotation Annotation3 = superBuilderJob.checkerFramework.generatePure() ? treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.builderType, CheckerFrameworkVersion.NAME__PURE), List.nil()) : null;
|
|
if (Annotation3 != null) {
|
|
nil = nil.prepend(Annotation3);
|
|
}
|
|
if (Annotation2 != null) {
|
|
nil = nil.prepend(Annotation2);
|
|
}
|
|
if (Annotation != null) {
|
|
nil = nil.prepend(Annotation);
|
|
}
|
|
return treeMaker.MethodDef(treeMaker.Modifiers(1028L, nil), superBuilderJob.toName(SELF_METHOD), treeMaker.Ident(superBuilderJob.toName(str)), List.nil(), List.nil(), List.nil(), null, null);
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateSelfMethod(SuperBuilderJob superBuilderJob) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
JCTree.JCAnnotation Annotation = treeMaker.Annotation(JavacHandlerUtil.genJavaLangTypeRef(superBuilderJob.builderType, "Override"), List.nil());
|
|
JCTree.JCAnnotation Annotation2 = superBuilderJob.checkerFramework.generateReturnsReceiver() ? treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.builderType, CheckerFrameworkVersion.NAME__RETURNS_RECEIVER), List.nil()) : null;
|
|
JCTree.JCAnnotation Annotation3 = superBuilderJob.checkerFramework.generatePure() ? treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.builderType, CheckerFrameworkVersion.NAME__PURE), List.nil()) : null;
|
|
List nil = List.nil();
|
|
if (Annotation3 != null) {
|
|
nil = nil.prepend(Annotation3);
|
|
}
|
|
if (Annotation2 != null) {
|
|
nil = nil.prepend(Annotation2);
|
|
}
|
|
return treeMaker.MethodDef(treeMaker.Modifiers(4L, nil.prepend(Annotation)), superBuilderJob.toName(SELF_METHOD), JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.builderType.up(), superBuilderJob.getBuilderClassName(), false, superBuilderJob.typeParams), List.nil(), List.nil(), List.nil(), treeMaker.Block(0L, List.of(treeMaker.Return(treeMaker.Ident(superBuilderJob.toName("this"))))), null);
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateAbstractBuildMethod(SuperBuilderJob superBuilderJob, boolean z2, String str) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
List<JCTree.JCAnnotation> nil = List.nil();
|
|
if (z2) {
|
|
nil = List.of(treeMaker.Annotation(JavacHandlerUtil.genJavaLangTypeRef(superBuilderJob.builderType, "Override"), List.nil()));
|
|
}
|
|
if (superBuilderJob.checkerFramework.generateSideEffectFree()) {
|
|
nil = nil.prepend(treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.builderType, CheckerFrameworkVersion.NAME__SIDE_EFFECT_FREE), List.nil()));
|
|
}
|
|
JCTree.JCModifiers Modifiers = treeMaker.Modifiers(1025L, nil);
|
|
Name name = superBuilderJob.toName(superBuilderJob.buildMethodName);
|
|
JCTree.JCIdent Ident = treeMaker.Ident(superBuilderJob.toName(str));
|
|
JCTree.JCVariableDecl generateReceiver = HandleBuilder.generateReceiver(superBuilderJob);
|
|
return (generateReceiver == null || !treeMaker.hasMethodDefWithRecvParam()) ? treeMaker.MethodDef(Modifiers, name, Ident, List.nil(), List.nil(), List.nil(), null, null) : treeMaker.MethodDefWithRecvParam(Modifiers, name, Ident, List.nil(), generateReceiver, List.nil(), List.nil(), null, null);
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateBuildMethod(SuperBuilderJob superBuilderJob, List<JCTree.JCExpression> list) {
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
ListBuffer listBuffer = new ListBuffer();
|
|
listBuffer.append(treeMaker.Return(treeMaker.NewClass(null, List.nil(), JavacHandlerUtil.cloneSelfType(superBuilderJob.parentType), List.of(treeMaker.Ident(superBuilderJob.toName("this"))), null)));
|
|
JCTree.JCBlock Block = treeMaker.Block(0L, listBuffer.toList());
|
|
List<JCTree.JCAnnotation> of = List.of(treeMaker.Annotation(JavacHandlerUtil.genJavaLangTypeRef(superBuilderJob.builderType, "Override"), List.nil()));
|
|
if (superBuilderJob.checkerFramework.generateSideEffectFree()) {
|
|
of = of.prepend(treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.builderType, CheckerFrameworkVersion.NAME__SIDE_EFFECT_FREE), List.nil()));
|
|
}
|
|
JCTree.JCModifiers Modifiers = treeMaker.Modifiers(1L, of);
|
|
JCTree.JCVariableDecl generateReceiver = HandleBuilder.generateReceiver(superBuilderJob);
|
|
JCTree.JCMethodDecl MethodDef = (generateReceiver == null || !treeMaker.hasMethodDefWithRecvParam()) ? treeMaker.MethodDef(Modifiers, superBuilderJob.toName(superBuilderJob.buildMethodName), JavacHandlerUtil.cloneSelfType(superBuilderJob.parentType), List.nil(), List.nil(), list, Block, null) : treeMaker.MethodDefWithRecvParam(Modifiers, superBuilderJob.toName(superBuilderJob.buildMethodName), JavacHandlerUtil.cloneSelfType(superBuilderJob.parentType), List.nil(), generateReceiver, List.nil(), list, Block, null);
|
|
JavacHandlerUtil.createRelevantNonNullAnnotation(superBuilderJob.builderType, MethodDef);
|
|
return MethodDef;
|
|
}
|
|
|
|
private JCTree.JCMethodDecl generateCleanMethod(java.util.List<HandleBuilder.BuilderFieldData> list, JavacNode javacNode, JCTree jCTree) {
|
|
JavacTreeMaker treeMaker = javacNode.getTreeMaker();
|
|
ListBuffer<JCTree.JCStatement> listBuffer = new ListBuffer<>();
|
|
Iterator<HandleBuilder.BuilderFieldData> it = list.iterator();
|
|
while (it.hasNext()) {
|
|
HandleBuilder.BuilderFieldData next = it.next();
|
|
if (!(next.singularData == null || next.singularData.getSingularizer() == null)) {
|
|
next.singularData.getSingularizer().appendCleaningCode(next.singularData, javacNode, jCTree, listBuffer);
|
|
}
|
|
}
|
|
listBuffer.append(treeMaker.Exec(treeMaker.Assign(treeMaker.Select(treeMaker.Ident(javacNode.toName("this")), javacNode.toName("$lombokUnclean")), treeMaker.Literal(Javac.CTC_BOOLEAN, 0))));
|
|
return treeMaker.MethodDef(treeMaker.Modifiers(1L), javacNode.toName("$lombokClean"), treeMaker.Type(Javac.createVoidType(javacNode.getSymbolTable(), Javac.CTC_VOID)), List.nil(), List.nil(), List.nil(), treeMaker.Block(0L, listBuffer.toList()), null);
|
|
}
|
|
|
|
private void generateBuilderFields(JavacNode javacNode, java.util.List<HandleBuilder.BuilderFieldData> list, JCTree jCTree) {
|
|
int size = list.size();
|
|
ArrayList arrayList = new ArrayList();
|
|
Iterator<JavacNode> it = javacNode.down().iterator();
|
|
while (it.hasNext()) {
|
|
JavacNode next = it.next();
|
|
if (next.getKind() == AST.Kind.FIELD) {
|
|
arrayList.add(next);
|
|
}
|
|
}
|
|
ArrayList arrayList2 = new ArrayList();
|
|
for (int i = size - 1; i >= 0; i--) {
|
|
HandleBuilder.BuilderFieldData builderFieldData = list.get(i);
|
|
if (builderFieldData.singularData == null || builderFieldData.singularData.getSingularizer() == null) {
|
|
JavacNode javacNode2 = null;
|
|
JavacNode javacNode3 = null;
|
|
Iterator it2 = arrayList.iterator();
|
|
while (it2.hasNext()) {
|
|
JavacNode javacNode4 = (JavacNode) it2.next();
|
|
Name name = javacNode4.get().name;
|
|
if (name.equals(builderFieldData.builderFieldName)) {
|
|
javacNode2 = javacNode4;
|
|
}
|
|
if (name.equals(builderFieldData.nameOfSetFlag)) {
|
|
javacNode3 = javacNode4;
|
|
}
|
|
}
|
|
JavacTreeMaker treeMaker = javacNode.getTreeMaker();
|
|
if (javacNode2 == null) {
|
|
JCTree.JCVariableDecl VarDef = treeMaker.VarDef(treeMaker.Modifiers(2L), builderFieldData.builderFieldName, JavacHandlerUtil.cloneType(treeMaker, builderFieldData.type, jCTree, javacNode.getContext()), null);
|
|
javacNode2 = JavacHandlerUtil.injectFieldAndMarkGenerated(javacNode, VarDef);
|
|
arrayList2.add(VarDef);
|
|
}
|
|
if (javacNode3 == null && builderFieldData.nameOfSetFlag != null) {
|
|
JCTree.JCVariableDecl VarDef2 = treeMaker.VarDef(treeMaker.Modifiers(2L), builderFieldData.nameOfSetFlag, treeMaker.TypeIdent(Javac.CTC_BOOLEAN), null);
|
|
JavacHandlerUtil.injectFieldAndMarkGenerated(javacNode, VarDef2);
|
|
arrayList2.add(VarDef2);
|
|
}
|
|
builderFieldData.createdFields.add(javacNode2);
|
|
} else {
|
|
builderFieldData.createdFields.addAll(builderFieldData.singularData.getSingularizer().generateFields(builderFieldData.singularData, javacNode, jCTree));
|
|
}
|
|
}
|
|
Iterator it3 = arrayList2.iterator();
|
|
while (it3.hasNext()) {
|
|
JavacHandlerUtil.recursiveSetGeneratedBy((JCTree.JCVariableDecl) it3.next(), jCTree, javacNode.getContext());
|
|
}
|
|
}
|
|
|
|
private void generateSetterMethodsForBuilder(SuperBuilderJob superBuilderJob, HandleBuilder.BuilderFieldData builderFieldData, String str, String str2) {
|
|
boolean isFieldDeprecated = JavacHandlerUtil.isFieldDeprecated(builderFieldData.originalFieldNode);
|
|
JavacTreeMaker treeMaker = superBuilderJob.getTreeMaker();
|
|
AnonymousClass1 r0 = new AnonymousClass1(treeMaker, superBuilderJob, str);
|
|
AnonymousClass2 r02 = new AnonymousClass2(treeMaker, superBuilderJob);
|
|
if (builderFieldData.singularData == null || builderFieldData.singularData.getSingularizer() == null) {
|
|
generateSimpleSetterMethodForBuilder(superBuilderJob, isFieldDeprecated, builderFieldData.createdFields.get(0), builderFieldData.name, builderFieldData.nameOfSetFlag, r0.make(), r02.make(), builderFieldData.annotations, builderFieldData.originalFieldNode, str2);
|
|
} else {
|
|
builderFieldData.singularData.getSingularizer().generateMethods(superBuilderJob.checkerFramework, builderFieldData.singularData, isFieldDeprecated, superBuilderJob.builderType, superBuilderJob.source, true, r0, r02, AccessLevel.PUBLIC);
|
|
}
|
|
}
|
|
|
|
private void generateSimpleSetterMethodForBuilder(SuperBuilderJob superBuilderJob, boolean z2, JavacNode javacNode, Name name, Name name2, JCTree.JCExpression jCExpression, JCTree.JCStatement jCStatement, List<JCTree.JCAnnotation> list, JavacNode javacNode2, String str) {
|
|
String buildAccessorName = HandlerUtil.buildAccessorName(str, name.toString());
|
|
Name name3 = superBuilderJob.builderType.toName(buildAccessorName);
|
|
Iterator<JavacNode> it = superBuilderJob.builderType.down().iterator();
|
|
while (it.hasNext()) {
|
|
JavacNode next = it.next();
|
|
if (next.getKind() == AST.Kind.METHOD) {
|
|
JCTree.JCMethodDecl jCMethodDecl = next.get();
|
|
if (jCMethodDecl.name.equals(name3) && !JavacHandlerUtil.isTolerate(javacNode, jCMethodDecl)) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
JavacTreeMaker treeMaker = javacNode.getTreeMaker();
|
|
List<JCTree.JCAnnotation> findCopyableToSetterAnnotations = JavacHandlerUtil.findCopyableToSetterAnnotations(javacNode2);
|
|
JCTree.JCMethodDecl jCMethodDecl2 = null;
|
|
if (superBuilderJob.checkerFramework.generateCalledMethods() && treeMaker.hasMethodDefWithRecvParam()) {
|
|
jCMethodDecl2 = HandleSetter.createSetterWithRecv(1L, z2, javacNode, treeMaker, buildAccessorName, name, name2, jCExpression, jCStatement, superBuilderJob.sourceNode, findCopyableToSetterAnnotations, list, treeMaker.VarDef(treeMaker.Modifiers(0L, List.nil()), superBuilderJob.toName("this"), JavacHandlerUtil.namePlusTypeParamsToTypeReference(treeMaker, superBuilderJob.builderType, superBuilderJob.builderType.get().typarams, List.of(treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.sourceNode, CheckerFrameworkVersion.NAME__NOT_CALLED), List.of(treeMaker.Literal(buildAccessorName.toString()))))), null));
|
|
}
|
|
if (jCMethodDecl2 == null) {
|
|
jCMethodDecl2 = HandleSetter.createSetter(1L, z2, javacNode, treeMaker, buildAccessorName, name, name2, jCExpression, jCStatement, superBuilderJob.sourceNode, findCopyableToSetterAnnotations, list);
|
|
}
|
|
if (superBuilderJob.checkerFramework.generateReturnsReceiver()) {
|
|
List list2 = jCMethodDecl2.mods.annotations;
|
|
if (list2 == null) {
|
|
list2 = List.nil();
|
|
}
|
|
JCTree.JCAnnotation Annotation = treeMaker.Annotation(JavacHandlerUtil.genTypeRef(superBuilderJob.builderType, CheckerFrameworkVersion.NAME__RETURNS_RECEIVER), List.nil());
|
|
JavacHandlerUtil.recursiveSetGeneratedBy(Annotation, superBuilderJob.source, superBuilderJob.getContext());
|
|
jCMethodDecl2.mods.annotations = list2.prepend(Annotation);
|
|
}
|
|
JavacHandlerUtil.injectMethod(superBuilderJob.builderType, jCMethodDecl2);
|
|
}
|
|
|
|
private void addObtainVia(HandleBuilder.BuilderFieldData builderFieldData, JavacNode javacNode) {
|
|
Iterator<JavacNode> it = javacNode.down().iterator();
|
|
while (it.hasNext()) {
|
|
JavacNode next = it.next();
|
|
if (JavacHandlerUtil.annotationTypeMatches(Builder.ObtainVia.class, next)) {
|
|
builderFieldData.obtainVia = JavacHandlerUtil.createAnnotation(Builder.ObtainVia.class, next).getInstance();
|
|
builderFieldData.obtainViaNode = next;
|
|
JavacHandlerUtil.deleteAnnotationIfNeccessary(next, Builder.ObtainVia.class);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private JavacSingularsRecipes.SingularData getSingularData(JavacNode javacNode, String str) {
|
|
Iterator<JavacNode> it = javacNode.down().iterator();
|
|
while (it.hasNext()) {
|
|
JavacNode next = it.next();
|
|
if (JavacHandlerUtil.annotationTypeMatches(Singular.class, next)) {
|
|
Name removePrefixFromField = javacNode.getKind() == AST.Kind.FIELD ? JavacHandlerUtil.removePrefixFromField(javacNode) : javacNode.get().name;
|
|
Singular instance = JavacHandlerUtil.createAnnotation(Singular.class, next).getInstance();
|
|
JavacHandlerUtil.deleteAnnotationIfNeccessary(next, Singular.class);
|
|
String value = instance.value();
|
|
if (value.isEmpty()) {
|
|
if (Boolean.FALSE.equals(javacNode.getAst().readConfiguration(ConfigurationKeys.SINGULAR_AUTO))) {
|
|
javacNode.addError("The singular must be specified explicitly (e.g. @Singular(\"task\")) because auto singularization is disabled.");
|
|
value = removePrefixFromField.toString();
|
|
} else {
|
|
value = HandlerUtil.autoSingularize(removePrefixFromField.toString());
|
|
if (value == null) {
|
|
javacNode.addError("Can't singularize this name; please specify the singular explicitly (i.e. @Singular(\"sheep\"))");
|
|
value = removePrefixFromField.toString();
|
|
}
|
|
}
|
|
}
|
|
Name name = javacNode.toName(value);
|
|
JCTree.JCExpression jCExpression = null;
|
|
if (javacNode.get() instanceof JCTree.JCVariableDecl) {
|
|
jCExpression = javacNode.get().vartype;
|
|
}
|
|
List nil = List.nil();
|
|
if (jCExpression instanceof JCTree.JCTypeApply) {
|
|
nil = ((JCTree.JCTypeApply) jCExpression).arguments;
|
|
jCExpression = ((JCTree.JCTypeApply) jCExpression).clazz;
|
|
}
|
|
String jCExpression2 = jCExpression.toString();
|
|
String qualified = JavacSingularsRecipes.get().toQualified(jCExpression2);
|
|
JavacSingularsRecipes.JavacSingularizer singularizer = JavacSingularsRecipes.get().getSingularizer(qualified, javacNode);
|
|
if (singularizer != null) {
|
|
return new JavacSingularsRecipes.SingularData(next, name, removePrefixFromField, nil, qualified, singularizer, instance.ignoreNullCollections(), str);
|
|
}
|
|
javacNode.addError("Lombok does not know how to create the singular-form builder methods for type '" + jCExpression2 + "'; they won't be generated.");
|
|
return null;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private HashSet<String> gatherUsedTypeNames(List<JCTree.JCTypeParameter> list, JCTree.JCClassDecl jCClassDecl) {
|
|
HashSet<String> hashSet = new HashSet<>();
|
|
Iterator it = list.iterator();
|
|
while (it.hasNext()) {
|
|
hashSet.add(((JCTree.JCTypeParameter) it.next()).getName().toString());
|
|
}
|
|
hashSet.add(jCClassDecl.name.toString());
|
|
Iterator it2 = jCClassDecl.getMembers().iterator();
|
|
while (it2.hasNext()) {
|
|
JCTree.JCVariableDecl jCVariableDecl = (JCTree) it2.next();
|
|
if (jCVariableDecl.getKind() == Tree.Kind.VARIABLE && (jCVariableDecl instanceof JCTree.JCVariableDecl)) {
|
|
JCTree.JCIdent type = jCVariableDecl.getType();
|
|
if (type instanceof JCTree.JCIdent) {
|
|
hashSet.add(type.getName().toString());
|
|
}
|
|
}
|
|
}
|
|
return hashSet;
|
|
}
|
|
|
|
private String generateNonclashingNameFor(String str, HashSet<String> hashSet) {
|
|
if (!hashSet.contains(str)) {
|
|
return str;
|
|
}
|
|
int i = 2;
|
|
while (hashSet.contains(String.valueOf(str) + i)) {
|
|
i++;
|
|
}
|
|
return String.valueOf(str) + i;
|
|
}
|
|
|
|
private JavacNode findInnerClass(JavacNode javacNode, String str) {
|
|
Iterator<JavacNode> it = javacNode.down().iterator();
|
|
while (it.hasNext()) {
|
|
JavacNode next = it.next();
|
|
if (next.getKind() == AST.Kind.TYPE && next.get().name.contentEquals(str)) {
|
|
return next;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private ListBuffer<JCTree.JCExpression> getTypeParamExpressions(List<? extends JCTree> list, JavacTreeMaker javacTreeMaker, Context context) {
|
|
ListBuffer<JCTree.JCExpression> listBuffer = new ListBuffer<>();
|
|
Iterator it = list.iterator();
|
|
while (it.hasNext()) {
|
|
JCTree.JCTypeApply jCTypeApply = (JCTree) it.next();
|
|
if (jCTypeApply instanceof JCTree.JCTypeParameter) {
|
|
listBuffer.add(javacTreeMaker.Ident(((JCTree.JCTypeParameter) jCTypeApply).getName()));
|
|
} else if (jCTypeApply instanceof JCTree.JCIdent) {
|
|
listBuffer.add(javacTreeMaker.Ident(((JCTree.JCIdent) jCTypeApply).getName()));
|
|
} else if (jCTypeApply instanceof JCTree.JCFieldAccess) {
|
|
listBuffer.add(copySelect(javacTreeMaker, (JCTree.JCFieldAccess) jCTypeApply));
|
|
} else if (jCTypeApply instanceof JCTree.JCTypeApply) {
|
|
listBuffer.add(JavacHandlerUtil.cloneType(javacTreeMaker, jCTypeApply, jCTypeApply, context));
|
|
}
|
|
}
|
|
return listBuffer;
|
|
}
|
|
|
|
private JCTree.JCExpression copySelect(JavacTreeMaker javacTreeMaker, JCTree.JCFieldAccess jCFieldAccess) {
|
|
ArrayList arrayList = new ArrayList();
|
|
JCTree.JCFieldAccess jCFieldAccess2 = jCFieldAccess;
|
|
while (jCFieldAccess2 != null) {
|
|
if (jCFieldAccess2 instanceof JCTree.JCFieldAccess) {
|
|
arrayList.add(jCFieldAccess2.getIdentifier());
|
|
jCFieldAccess2 = jCFieldAccess2.getExpression();
|
|
} else if (jCFieldAccess2 instanceof JCTree.JCIdent) {
|
|
arrayList.add(((JCTree.JCIdent) jCFieldAccess2).getName());
|
|
jCFieldAccess2 = null;
|
|
}
|
|
}
|
|
Collections.reverse(arrayList);
|
|
JCTree.JCFieldAccess jCFieldAccess3 = null;
|
|
Iterator it = arrayList.iterator();
|
|
while (it.hasNext()) {
|
|
Name name = (Name) it.next();
|
|
jCFieldAccess3 = jCFieldAccess3 == null ? javacTreeMaker.Ident(name) : javacTreeMaker.Select(jCFieldAccess3, name);
|
|
}
|
|
return jCFieldAccess3;
|
|
}
|
|
|
|
private boolean constructorExists(JavacNode javacNode, String str) {
|
|
if (javacNode == null || !(javacNode.get() instanceof JCTree.JCClassDecl)) {
|
|
return false;
|
|
}
|
|
Iterator it = javacNode.get().defs.iterator();
|
|
while (it.hasNext()) {
|
|
JCTree.JCMethodDecl jCMethodDecl = (JCTree) it.next();
|
|
if (jCMethodDecl instanceof JCTree.JCMethodDecl) {
|
|
JCTree.JCMethodDecl jCMethodDecl2 = jCMethodDecl;
|
|
boolean equals = jCMethodDecl2.name.toString().equals("<init>");
|
|
if (!JavacHandlerUtil.isTolerate(javacNode, jCMethodDecl2) && equals && jCMethodDecl2.params != null && jCMethodDecl2.params.length() == 1) {
|
|
String jCTree = ((JCTree.JCVariableDecl) jCMethodDecl2.params.get(0)).getType().toString();
|
|
int lastIndexOf = jCTree.lastIndexOf(46);
|
|
if (lastIndexOf >= 0) {
|
|
jCTree = jCTree.substring(lastIndexOf + 1);
|
|
}
|
|
if ((String.valueOf(str) + "<?, ?>").equals(jCTree)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
static /* synthetic */ int[] $SWITCH_TABLE$lombok$javac$handlers$JavacHandlerUtil$MemberExistsResult() {
|
|
int[] iArr = $SWITCH_TABLE$lombok$javac$handlers$JavacHandlerUtil$MemberExistsResult;
|
|
if (iArr != null) {
|
|
return iArr;
|
|
}
|
|
int[] iArr2 = new int[JavacHandlerUtil.MemberExistsResult.values().length];
|
|
try {
|
|
iArr2[JavacHandlerUtil.MemberExistsResult.EXISTS_BY_LOMBOK.ordinal()] = 2;
|
|
} catch (NoSuchFieldError unused) {
|
|
}
|
|
try {
|
|
iArr2[JavacHandlerUtil.MemberExistsResult.EXISTS_BY_USER.ordinal()] = 3;
|
|
} catch (NoSuchFieldError unused2) {
|
|
}
|
|
try {
|
|
iArr2[JavacHandlerUtil.MemberExistsResult.NOT_EXISTS.ordinal()] = 1;
|
|
} catch (NoSuchFieldError unused3) {
|
|
}
|
|
$SWITCH_TABLE$lombok$javac$handlers$JavacHandlerUtil$MemberExistsResult = iArr2;
|
|
return iArr2;
|
|
}
|
|
}
|