From a7bd812893ecb1fa603229d81c924823426ea973 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Fri, 30 Jan 2015 15:43:41 +0100 Subject: [i623] added eclipse code for generating @javax.annotation.Generated, and refactored java impl to reduce DRY violations. -f pretty now includes skipping generation of this annotation, and updated ALL the test cases. --- .../eclipse/handlers/EclipseHandlerUtil.java | 42 ++++++++--- .../eclipse/handlers/HandleEqualsAndHashCode.java | 3 +- src/core/lombok/javac/handlers/HandleLog.java | 2 +- .../lombok/javac/handlers/HandleSynchronized.java | 2 +- .../lombok/javac/handlers/JavacHandlerUtil.java | 57 +++++++------- src/delombok/lombok/delombok/Delombok.java | 5 +- .../lombok/delombok/FormatPreferences.java | 16 ++-- .../resource/after-delombok/Accessors.java | 16 ++++ .../after-delombok/AccessorsConfiguration.java | 4 + .../after-delombok/BuilderChainAndFluent.java | 7 ++ .../resource/after-delombok/BuilderComplex.java | 9 +++ .../resource/after-delombok/BuilderSimple.java | 8 ++ .../BuilderSingularGuavaListsSets.java | 14 ++++ .../after-delombok/BuilderSingularGuavaMaps.java | 12 +++ .../after-delombok/BuilderSingularLists.java | 12 +++ .../after-delombok/BuilderSingularMaps.java | 14 ++++ .../BuilderSingularNoAutosingularize.java | 12 +++ .../BuilderSingularRedirectToGuava.java | 12 +++ .../after-delombok/BuilderSingularSets.java | 14 ++++ .../after-delombok/BuilderWithAccessors.java | 17 +++++ .../BuilderWithExistingBuilderClass.java | 6 ++ .../after-delombok/ClassNamedAfterGetter.java | 1 + .../after-delombok/CommentsInterspersed.java | 1 + .../ConflictingStaticConstructorNames.java | 5 ++ .../resource/after-delombok/Constructors.java | 12 +++ .../after-delombok/ConstructorsConfiguration.java | 2 + .../after-delombok/ConstructorsWithAccessors.java | 1 + .../resource/after-delombok/DataConfiguration.java | 6 ++ .../resource/after-delombok/DataExtended.java | 7 ++ .../resource/after-delombok/DataIgnore.java | 6 ++ .../resource/after-delombok/DataOnEnum.java | 3 + .../resource/after-delombok/DataOnLocalClass.java | 21 ++++++ .../resource/after-delombok/DataPlain.java | 38 ++++++++++ .../resource/after-delombok/DataWithGetter.java | 10 +++ .../after-delombok/DataWithGetterNone.java | 7 ++ .../resource/after-delombok/DelegateOnGetter.java | 3 + .../after-delombok/DelegateOnGetterNone.java | 2 + .../resource/after-delombok/DelegateOnMethods.java | 2 + .../after-delombok/DelegateTypesAndExcludes.java | 4 + .../after-delombok/DelegateWithDeprecated.java | 3 + .../resource/after-delombok/EncodingUsAscii.java | 1 + .../resource/after-delombok/EncodingUtf8.java | 1 + .../resource/after-delombok/EqualsAndHashCode.java | 11 +++ .../EqualsAndHashCodeWithExistingMethods.java | 2 + .../EqualsAndHashCodeWithOnParam.java | 3 + .../EqualsAndHashCodeWithSomeExistingMethods.java | 13 ++++ .../resource/after-delombok/GetterAccessLevel.java | 9 +++ .../after-delombok/GetterAlreadyExists.java | 10 +++ .../resource/after-delombok/GetterBoolean.java | 4 + .../resource/after-delombok/GetterDeprecated.java | 2 + .../resource/after-delombok/GetterEnum.java | 3 + .../resource/after-delombok/GetterLazy.java | 1 + .../resource/after-delombok/GetterLazyBoolean.java | 6 ++ .../after-delombok/GetterLazyEahcToString.java | 9 +++ .../resource/after-delombok/GetterLazyInvalid.java | 1 + .../resource/after-delombok/GetterLazyNative.java | 9 +++ .../resource/after-delombok/GetterNone.java | 1 + .../resource/after-delombok/GetterOnClass.java | 8 ++ .../resource/after-delombok/GetterOnMethod.java | 3 + .../after-delombok/GetterOnMethodErrors.java | 1 + .../after-delombok/GetterOnMethodErrors2.java | 8 ++ .../resource/after-delombok/GetterOnStatic.java | 2 + .../resource/after-delombok/GetterPlain.java | 2 + .../after-delombok/GetterSetterJavadoc.java | 11 +++ .../resource/after-delombok/GetterWithDollar.java | 3 + .../resource/after-delombok/InjectField.java | 7 ++ .../resource/after-delombok/LoggerCommons.java | 3 + .../resource/after-delombok/LoggerConfig.java | 1 + .../resource/after-delombok/LoggerJul.java | 3 + .../resource/after-delombok/LoggerLog4j.java | 3 + .../resource/after-delombok/LoggerLog4j2.java | 3 + .../resource/after-delombok/LoggerSlf4j.java | 4 + .../resource/after-delombok/LoggerSlf4jTypes.java | 3 + .../after-delombok/LoggerSlf4jWithPackage.java | 2 + .../resource/after-delombok/LoggerXSlf4j.java | 3 + .../resource/after-delombok/MixGetterVal.java | 1 + .../resource/after-delombok/MultiFieldGetter.java | 4 + .../resource/after-delombok/NonNullPlain.java | 7 ++ .../NonNullWithAlternateException.java | 1 + .../resource/after-delombok/SetterAccessLevel.java | 5 ++ .../after-delombok/SetterAlreadyExists.java | 2 + .../resource/after-delombok/SetterDeprecated.java | 2 + .../resource/after-delombok/SetterOnClass.java | 8 ++ .../after-delombok/SetterOnMethodOnParam.java | 3 + .../resource/after-delombok/SetterOnStatic.java | 2 + .../resource/after-delombok/SetterPlain.java | 2 + .../resource/after-delombok/SetterWithDollar.java | 5 ++ .../after-delombok/SimpleTypeResolution.java | 1 + .../resource/after-delombok/SynchronizedPlain.java | 2 + .../after-delombok/ToStringConfiguration.java | 5 ++ .../resource/after-delombok/ToStringInner.java | 4 + .../resource/after-delombok/ToStringPlain.java | 2 + .../resource/after-delombok/Tolerate.java | 9 +++ .../after-delombok/TrickyTypeResolution.java | 1 + .../resource/after-delombok/ValueExperimental.java | 8 ++ .../ValueExperimentalStarImport.java | 4 + .../resource/after-delombok/ValuePlain.java | 19 +++++ .../resource/after-delombok/WitherAccessLevel.java | 5 ++ .../after-delombok/WitherAlreadyExists.java | 2 + .../WitherAndAllArgsConstructor.java | 3 + .../resource/after-delombok/WitherDeprecated.java | 2 + .../resource/after-delombok/WitherOnClass.java | 6 ++ .../resource/after-delombok/WitherPlain.java | 2 + .../after-delombok/WitherWithGenerics.java | 3 + test/transform/resource/after-ecj/Accessors.java | 34 ++++----- .../resource/after-ecj/AccessorsConfiguration.java | 8 +- .../resource/after-ecj/BuilderChainAndFluent.java | 14 ++-- .../resource/after-ecj/BuilderComplex.java | 18 ++--- .../resource/after-ecj/BuilderSimple.java | 16 ++-- .../after-ecj/BuilderSingularGuavaListsSets.java | 28 +++---- .../after-ecj/BuilderSingularGuavaMaps.java | 24 +++--- .../resource/after-ecj/BuilderSingularLists.java | 24 +++--- .../resource/after-ecj/BuilderSingularMaps.java | 28 +++---- .../BuilderSingularNoAutosingularize.java | 24 +++--- .../after-ecj/BuilderSingularRedirectToGuava.java | 24 +++--- .../resource/after-ecj/BuilderSingularSets.java | 28 +++---- .../resource/after-ecj/BuilderWithAccessors.java | 20 ++--- .../after-ecj/BuilderWithExistingBuilderClass.java | 12 +-- .../resource/after-ecj/ClassNamedAfterGetter.java | 2 +- .../resource/after-ecj/CommentsInterspersed.java | 2 +- .../ConflictingStaticConstructorNames.java | 12 +-- .../transform/resource/after-ecj/Constructors.java | 24 +++--- .../after-ecj/ConstructorsConfiguration.java | 4 +- .../after-ecj/ConstructorsWithAccessors.java | 2 +- .../resource/after-ecj/DataConfiguration.java | 14 ++-- .../transform/resource/after-ecj/DataExtended.java | 16 ++-- test/transform/resource/after-ecj/DataIgnore.java | 14 ++-- test/transform/resource/after-ecj/DataOnEnum.java | 6 +- .../resource/after-ecj/DataOnLocalClass.java | 48 ++++++------ test/transform/resource/after-ecj/DataPlain.java | 86 +++++++++++----------- .../resource/after-ecj/DataWithGetter.java | 22 +++--- .../resource/after-ecj/DataWithGetterNone.java | 16 ++-- .../resource/after-ecj/DelegateOnGetter.java | 6 +- .../resource/after-ecj/DelegateOnGetterNone.java | 4 +- .../resource/after-ecj/DelegateOnMethods.java | 2 +- .../after-ecj/DelegateTypesAndExcludes.java | 4 +- .../resource/after-ecj/DelegateWithDeprecated.java | 6 +- .../transform/resource/after-ecj/EncodingUtf8.java | 2 +- .../resource/after-ecj/EqualsAndHashCode.java | 30 ++++---- .../EqualsAndHashCodeWithExistingMethods.java | 6 +- .../after-ecj/EqualsAndHashCodeWithOnParam.java | 8 +- .../EqualsAndHashCodeWithSomeExistingMethods.java | 30 ++++---- .../resource/after-ecj/GetterAccessLevel.java | 18 ++--- .../resource/after-ecj/GetterAlreadyExists.java | 20 ++--- .../resource/after-ecj/GetterBoolean.java | 8 +- .../resource/after-ecj/GetterDeprecated.java | 4 +- test/transform/resource/after-ecj/GetterEnum.java | 6 +- test/transform/resource/after-ecj/GetterLazy.java | 2 +- .../resource/after-ecj/GetterLazyBoolean.java | 14 ++-- .../resource/after-ecj/GetterLazyEahcToString.java | 14 ++-- .../resource/after-ecj/GetterLazyInvalid.java | 2 +- .../resource/after-ecj/GetterLazyNative.java | 18 ++--- test/transform/resource/after-ecj/GetterNone.java | 2 +- .../resource/after-ecj/GetterOnClass.java | 16 ++-- .../resource/after-ecj/GetterOnMethod.java | 6 +- .../resource/after-ecj/GetterOnMethodErrors.java | 2 +- .../resource/after-ecj/GetterOnMethodErrors2.java | 16 ++-- .../resource/after-ecj/GetterOnStatic.java | 4 +- test/transform/resource/after-ecj/GetterPlain.java | 4 +- .../resource/after-ecj/GetterSetterJavadoc.java | 24 +++--- .../resource/after-ecj/GetterWithDollar.java | 6 +- .../transform/resource/after-ecj/MixGetterVal.java | 2 +- .../resource/after-ecj/MultiFieldGetter.java | 8 +- .../transform/resource/after-ecj/NonNullPlain.java | 14 ++-- .../after-ecj/NonNullWithAlternateException.java | 2 +- .../resource/after-ecj/SetterAccessLevel.java | 10 +-- .../resource/after-ecj/SetterAlreadyExists.java | 4 +- .../resource/after-ecj/SetterDeprecated.java | 4 +- .../resource/after-ecj/SetterOnClass.java | 16 ++-- .../resource/after-ecj/SetterOnMethod.java | 12 +-- .../resource/after-ecj/SetterOnMethodOnParam.java | 6 +- .../resource/after-ecj/SetterOnParam.java | 12 +-- .../after-ecj/SetterOnParamAndOnMethod.java | 2 +- .../resource/after-ecj/SetterOnStatic.java | 4 +- test/transform/resource/after-ecj/SetterPlain.java | 4 +- .../resource/after-ecj/SetterWithDollar.java | 6 +- .../resource/after-ecj/SimpleTypeResolution.java | 2 +- .../resource/after-ecj/ToStringConfiguration.java | 10 +-- .../resource/after-ecj/ToStringInner.java | 8 +- .../resource/after-ecj/ToStringPlain.java | 4 +- test/transform/resource/after-ecj/Tolerate.java | 10 +-- .../resource/after-ecj/TrickyTypeResolution.java | 2 +- .../resource/after-ecj/ValueExperimental.java | 16 ++-- .../after-ecj/ValueExperimentalStarImport.java | 8 +- test/transform/resource/after-ecj/ValuePlain.java | 44 +++++------ .../resource/after-ecj/WitherAccessLevel.java | 10 +-- .../resource/after-ecj/WitherAlreadyExists.java | 4 +- .../after-ecj/WitherAndAllArgsConstructor.java | 6 +- .../resource/after-ecj/WitherDeprecated.java | 4 +- .../resource/after-ecj/WitherOnClass.java | 12 +-- test/transform/resource/after-ecj/WitherPlain.java | 4 +- .../resource/after-ecj/WitherWithGenerics.java | 6 +- .../messages-idempotent/NonNullPlain.java.messages | 4 +- 193 files changed, 1197 insertions(+), 611 deletions(-) diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java index 87e35269..1b27fce5 100644 --- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java +++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java @@ -48,6 +48,7 @@ import lombok.core.TypeResolver; import lombok.core.configuration.NullCheckExceptionType; import lombok.core.debug.ProblemReporter; import lombok.core.handlers.HandlerUtil; +import lombok.eclipse.Eclipse; import lombok.eclipse.EclipseAST; import lombok.eclipse.EclipseNode; import lombok.experimental.Accessors; @@ -1213,8 +1214,9 @@ public class EclipseHandlerUtil { * Inserts a field into an existing type. The type must represent a {@code TypeDeclaration}. * The field carries the @{@link SuppressWarnings}("all") annotation. */ - public static EclipseNode injectFieldSuppressWarnings(EclipseNode type, FieldDeclaration field) { - field.annotations = createSuppressWarningsAll(field, field.annotations); + public static EclipseNode injectFieldAndMarkGenerated(EclipseNode type, FieldDeclaration field) { + field.annotations = addSuppressWarningsAll(field, field.annotations); + field.annotations = addGenerated(field, field.annotations); return injectField(type, field); } @@ -1259,7 +1261,8 @@ public class EclipseHandlerUtil { * Inserts a method into an existing type. The type must represent a {@code TypeDeclaration}. */ public static EclipseNode injectMethod(EclipseNode type, AbstractMethodDeclaration method) { - method.annotations = createSuppressWarningsAll(method, method.annotations); + method.annotations = addSuppressWarningsAll(method, method.annotations); + method.annotations = addGenerated(method, method.annotations); TypeDeclaration parent = (TypeDeclaration) type.get(); if (parent.methods == null) { @@ -1301,9 +1304,10 @@ public class EclipseHandlerUtil { * @param type New type (class, interface, etc) to inject. */ public static EclipseNode injectType(final EclipseNode typeNode, final TypeDeclaration type) { - type.annotations = createSuppressWarningsAll(type, type.annotations); + type.annotations = addSuppressWarningsAll(type, type.annotations); + type.annotations = addGenerated(type, type.annotations); TypeDeclaration parent = (TypeDeclaration) typeNode.get(); - + if (parent.memberTypes == null) { parent.memberTypes = new TypeDeclaration[] { type }; } else { @@ -1317,8 +1321,20 @@ public class EclipseHandlerUtil { } private static final char[] ALL = "all".toCharArray(); + private static final char[] LOMBOK = "lombok".toCharArray(); + private static final char[][] JAVAX_ANNOTATION_GENERATED = Eclipse.fromQualifiedName("javax.annotation.Generated"); + + public static Annotation[] addSuppressWarningsAll(ASTNode source, Annotation[] originalAnnotationArray) { + return addAnnotation(source, originalAnnotationArray, TypeConstants.JAVA_LANG_SUPPRESSWARNINGS, new StringLiteral(ALL, 0, 0, 0)); + } - public static Annotation[] createSuppressWarningsAll(ASTNode source, Annotation[] originalAnnotationArray) { + public static Annotation[] addGenerated(ASTNode source, Annotation[] originalAnnotationArray) { + return addAnnotation(source, originalAnnotationArray, JAVAX_ANNOTATION_GENERATED, new StringLiteral(LOMBOK, 0, 0, 0)); + } + + private static Annotation[] addAnnotation(ASTNode source, Annotation[] originalAnnotationArray, char[][] annotationTypeFqn, Expression arg) { + char[] simpleName = annotationTypeFqn[annotationTypeFqn.length - 1]; + if (originalAnnotationArray != null) for (Annotation ann : originalAnnotationArray) { char[] lastToken = null; @@ -1329,20 +1345,24 @@ public class EclipseHandlerUtil { lastToken = ((SingleTypeReference) ann.type).token; } - if (lastToken != null && new String(lastToken).equals("SuppressWarnings")) return originalAnnotationArray; + if (lastToken != null && Arrays.equals(simpleName, lastToken)) return originalAnnotationArray; } int pS = source.sourceStart, pE = source.sourceEnd; long p = (long)pS << 32 | pE; - long[] poss = new long[3]; + long[] poss = new long[annotationTypeFqn.length]; Arrays.fill(poss, p); - QualifiedTypeReference suppressWarningsType = new QualifiedTypeReference(TypeConstants.JAVA_LANG_SUPPRESSWARNINGS, poss); + QualifiedTypeReference suppressWarningsType = new QualifiedTypeReference(annotationTypeFqn, poss); setGeneratedBy(suppressWarningsType, source); SingleMemberAnnotation ann = new SingleMemberAnnotation(suppressWarningsType, pS); ann.declarationSourceEnd = pE; - ann.memberValue = new StringLiteral(ALL, pS, pE, 0); + if (arg != null) { + arg.sourceStart = pS; + arg.sourceEnd = pE; + ann.memberValue = arg; + setGeneratedBy(ann.memberValue, source); + } setGeneratedBy(ann, source); - setGeneratedBy(ann.memberValue, source); if (originalAnnotationArray == null) return new Annotation[] { ann }; Annotation[] newAnnotationArray = new Annotation[originalAnnotationArray.length + 1]; System.arraycopy(originalAnnotationArray, 0, newAnnotationArray, 0, originalAnnotationArray.length); diff --git a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java index e1b02051..7e2ff513 100644 --- a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java +++ b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 The Project Lombok Authors. + * Copyright (C) 2009-2015 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -561,7 +561,6 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler { JCVariableDecl fieldDecl = recursiveSetGeneratedBy(maker.VarDef( maker.Modifiers(Flags.PRIVATE | Flags.FINAL | (isStatic ? Flags.STATIC : 0)), methodNode.toName(lockName), objectType, newObjectArray), ast, context); - injectFieldSuppressWarnings(methodNode.up(), fieldDecl); + injectFieldAndMarkGenerated(methodNode.up(), fieldDecl); } if (method.body == null) return; diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java index bf364641..a6bc388a 100644 --- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java +++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java @@ -69,7 +69,6 @@ import com.sun.tools.javac.tree.JCTree.JCExpressionStatement; import com.sun.tools.javac.tree.JCTree.JCFieldAccess; import com.sun.tools.javac.tree.JCTree.JCIdent; import com.sun.tools.javac.tree.JCTree.JCImport; -import com.sun.tools.javac.tree.JCTree.JCLiteral; import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCMethodInvocation; import com.sun.tools.javac.tree.JCTree.JCModifiers; @@ -818,7 +817,7 @@ public class JavacHandlerUtil { * The field carries the @{@link SuppressWarnings}("all") annotation. * Also takes care of updating the JavacAST. */ - public static void injectFieldSuppressWarnings(JavacNode typeNode, JCVariableDecl field) { + public static void injectFieldAndMarkGenerated(JavacNode typeNode, JCVariableDecl field) { injectField(typeNode, field, true); } @@ -831,10 +830,13 @@ public class JavacHandlerUtil { return injectField(typeNode, field, false); } - private static JavacNode injectField(JavacNode typeNode, JCVariableDecl field, boolean addSuppressWarnings) { + private static JavacNode injectField(JavacNode typeNode, JCVariableDecl field, boolean addGenerated) { JCClassDecl type = (JCClassDecl) typeNode.get(); - if (addSuppressWarnings) addSuppressWarningsAll(field.mods, typeNode, field.pos, getGeneratedBy(field), typeNode.getContext()); + if (addGenerated) { + addSuppressWarningsAll(field.mods, typeNode, field.pos, getGeneratedBy(field), typeNode.getContext()); + addGenerated(field.mods, typeNode, field.pos, getGeneratedBy(field), typeNode.getContext()); + } List insertAfter = null; List insertBefore = type.defs; @@ -950,44 +952,41 @@ public class JavacHandlerUtil { public static void addSuppressWarningsAll(JCModifiers mods, JavacNode node, int pos, JCTree source, Context context) { if (!LombokOptionsFactory.getDelombokOptions(context).getFormatPreferences().generateSuppressWarnings()) return; - for (JCAnnotation ann : mods.annotations) { - JCTree annType = ann.getAnnotationType(); - Name lastPart = null; - if (annType instanceof JCIdent) lastPart = ((JCIdent) annType).name; - else if (annType instanceof JCFieldAccess) lastPart = ((JCFieldAccess) annType).name; - - if (lastPart != null && lastPart.contentEquals("SuppressWarnings")) return; - } - JavacTreeMaker maker = node.getTreeMaker(); - JCExpression suppressWarningsType = genJavaLangTypeRef(node, "SuppressWarnings"); - JCLiteral allLiteral = maker.Literal("all"); - suppressWarningsType.pos = pos; - allLiteral.pos = pos; - JCAnnotation annotation = recursiveSetGeneratedBy(maker.Annotation(suppressWarningsType, List.of(allLiteral)), source, context); - annotation.pos = pos; - mods.annotations = mods.annotations.append(annotation); + addAnnotation(mods, node, pos, source, context, "java.lang.SuppressWarnings", node.getTreeMaker().Literal("all")); } - + public static void addGenerated(JCModifiers mods, JavacNode node, int pos, JCTree source, Context context) { if (!LombokOptionsFactory.getDelombokOptions(context).getFormatPreferences().generateGenerated()) return; + addAnnotation(mods, node, pos, source, context, "javax.annotation.Generated", node.getTreeMaker().Literal("lombok")); + } + + private static void addAnnotation(JCModifiers mods, JavacNode node, int pos, JCTree source, Context context, String annotationTypeFqn, JCExpression arg) { + boolean isJavaLangBased; + String simpleName; { + int idx = annotationTypeFqn.lastIndexOf('.'); + simpleName = idx == -1 ? annotationTypeFqn : annotationTypeFqn.substring(idx + 1); + + isJavaLangBased = idx == 9 && annotationTypeFqn.regionMatches(0, "java.lang.", 0, 10); + } + for (JCAnnotation ann : mods.annotations) { JCTree annType = ann.getAnnotationType(); Name lastPart = null; if (annType instanceof JCIdent) lastPart = ((JCIdent) annType).name; else if (annType instanceof JCFieldAccess) lastPart = ((JCFieldAccess) annType).name; - - if (lastPart != null && lastPart.contentEquals("Generated")) return; + + if (lastPart != null && lastPart.contentEquals(simpleName)) return; } JavacTreeMaker maker = node.getTreeMaker(); - JCExpression generatedType = chainDots(node, "javax", "annotation", "Generated"); - JCExpression lombokLiteral = maker.Literal("lombok"); - generatedType.pos = pos; - lombokLiteral.pos = pos; - JCAnnotation annotation = recursiveSetGeneratedBy(maker.Annotation(generatedType, List.of(lombokLiteral)), source, context); + JCExpression annType = isJavaLangBased ? genJavaLangTypeRef(node, simpleName) : chainDotsString(node, annotationTypeFqn); + annType.pos = pos; + if (arg != null) arg.pos = pos; + List argList = arg != null ? List.of(arg) : List.nil(); + JCAnnotation annotation = recursiveSetGeneratedBy(maker.Annotation(annType, argList), source, context); annotation.pos = pos; mods.annotations = mods.annotations.append(annotation); } - + private static List addAllButOne(List defs, int idx) { ListBuffer out = new ListBuffer(); int i = 0; diff --git a/src/delombok/lombok/delombok/Delombok.java b/src/delombok/lombok/delombok/Delombok.java index 059bb004..514fc2ec 100644 --- a/src/delombok/lombok/delombok/Delombok.java +++ b/src/delombok/lombok/delombok/Delombok.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2010 The Project Lombok Authors. + * Copyright (C) 2009-2015 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -204,7 +204,7 @@ public class Delombok { System.out.println(indentAndWordbreak(e.getValue(), 4, 70)); } System.out.println("Example: -f indent:4 -f emptyLines:indent"); - System.out.println("The '-f pretty' option is shorthand for '-f suppressWarnings:skip -f danceAroundIdeChecks:skip -f generateDelombokComment:skip -f javaLangAsFQN:skip'"); + System.out.println("The '-f pretty' option is shorthand for '-f suppressWarnings:skip -f generated:skip -f danceAroundIdeChecks:skip -f generateDelombokComment:skip -f javaLangAsFQN:skip'"); System.exit(0); return; } @@ -301,6 +301,7 @@ public class Delombok { if (prettyEnabled) { if (!formatPrefs.containsKey("suppresswarnings")) formatPrefs.put("suppresswarnings", "skip"); + if (!formatPrefs.containsKey("generated")) formatPrefs.put("generated", "skip"); if (!formatPrefs.containsKey("dancearoundidechecks")) formatPrefs.put("dancearoundidechecks", "skip"); if (!formatPrefs.containsKey("generatedelombokcomment")) formatPrefs.put("generatedelombokcomment", "skip"); if (!formatPrefs.containsKey("javalangasfqn")) formatPrefs.put("javalangasfqn", "skip"); diff --git a/src/delombok/lombok/delombok/FormatPreferences.java b/src/delombok/lombok/delombok/FormatPreferences.java index caacc246..1479a740 100644 --- a/src/delombok/lombok/delombok/FormatPreferences.java +++ b/src/delombok/lombok/delombok/FormatPreferences.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 The Project Lombok Authors. + * Copyright (C) 2013-2015 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -43,11 +43,11 @@ public final class FormatPreferences { keys.put("emptyLines", "Either 'indent' or 'blank'. indent means: Indent an empty line to the right level. Default: 'blank'"); keys.put("finalParams", "Either 'generate' or 'skip'. generate means: All lombok-generated methods set all parameters to final. Default: 'generate'"); keys.put("constructorProperties", "Either 'generate' or 'skip'. generate means: All lombok-generated constructors with 1 or more arguments get an @ConstructorProperties annotation. Default: 'generate'"); - keys.put("suppressWarnings", "Either 'generate' or 'skip'. generate means: All lombok-generated methods get a @SuppressWarnings annotation. Default: 'generate'"); + keys.put("suppressWarnings", "Either 'generate' or 'skip'. generate means: All lombok-generated methods, types, and fields get a @SuppressWarnings annotation. Default: 'generate'"); + keys.put("generated", "Either 'generate' or 'skip'. generate means: All lombok-generated methods, types, and fields get a @Generated(\"lombok\") annotation. Default: 'generate'"); keys.put("danceAroundIdeChecks", "Either 'generate' or 'skip'. generate means: Lombok will intentionally obfuscate some generated code to avoid IDE warnings. Default: 'generate'"); keys.put("generateDelombokComment", "Either 'generate' or 'skip'. generate means: Any file modified by delombok will have a comment stating this at the top. Default: 'generate'"); keys.put("javaLangAsFQN", "Either 'generate' or 'skip'. generate means: Any generated reference to java.lang classes are prefixed with `java.lang.`. Default: 'generate'"); - keys.put("generated", "Either 'generate' or 'skip'. generate means: All lombok-generated methods get a @Generated(\"lombok\") annotation. Default: 'generate'"); KEYS = Collections.unmodifiableMap(keys); } @@ -84,10 +84,10 @@ public final class FormatPreferences { this.generateFinalParams = unrollBoolean(preferences, "finalParams", "generate", "skip", true); this.generateConstructorProperties = unrollBoolean(preferences, "constructorProperties", "generate", "skip", true); this.generateSuppressWarnings = unrollBoolean(preferences, "suppressWarnings", "generate", "skip", true); + this.generateGenerated = unrollBoolean(preferences, "generated", "generate", "skip", true); this.danceAroundIdeChecks = unrollBoolean(preferences, "danceAroundIdeChecks", "generate", "skip", true); this.generateDelombokComment = unrollBoolean(preferences, "generateDelombokComment", "generate", "skip", true); this.javaLangAsFqn = unrollBoolean(preferences, "javaLangAsFQN", "generate", "skip", true); - this.generateGenerated = unrollBoolean(preferences, "generated", "generate", "skip", true); } private static boolean unrollBoolean(Map preferences, String name, String trueStr, String falseStr, boolean defaultVal) { @@ -115,6 +115,10 @@ public final class FormatPreferences { return generateSuppressWarnings; } + public boolean generateGenerated() { + return generateGenerated; + } + public boolean generateFinalParams() { return generateFinalParams; } @@ -134,8 +138,4 @@ public final class FormatPreferences { public boolean generateConstructorProperties() { return generateConstructorProperties; } - - public boolean generateGenerated() { - return generateGenerated; - } } diff --git a/test/transform/resource/after-delombok/Accessors.java b/test/transform/resource/after-delombok/Accessors.java index 0d15fe43..3346bacb 100644 --- a/test/transform/resource/after-delombok/Accessors.java +++ b/test/transform/resource/after-delombok/Accessors.java @@ -1,10 +1,12 @@ class AccessorsFluent { private String fieldName = ""; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public String fieldName() { return this.fieldName; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public AccessorsFluent fieldName(final String fieldName) { this.fieldName = fieldName; return this; @@ -14,14 +16,17 @@ class AccessorsFluentOnClass { private String fieldName = ""; private String otherFieldWithOverride = ""; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public String fieldName() { return this.fieldName; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public String getOtherFieldWithOverride() { return this.otherFieldWithOverride; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public AccessorsFluentOnClass fieldName(final String fieldName) { this.fieldName = fieldName; return this; @@ -30,6 +35,7 @@ class AccessorsFluentOnClass { class AccessorsChain { private boolean isRunning; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public AccessorsChain setRunning(final boolean isRunning) { this.isRunning = isRunning; return this; @@ -39,6 +45,7 @@ class AccessorsPrefix { private String fieldName; private String fActualField; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public void setActualField(final String fActualField) { this.fActualField = fActualField; } @@ -47,10 +54,12 @@ class AccessorsPrefix2 { private String fieldName; private String fActualField; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public void setFieldName(final String fieldName) { this.fieldName = fieldName; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public void setActualField(final String fActualField) { this.fActualField = fActualField; } @@ -62,11 +71,13 @@ class AccessorsPrefix3 { } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "AccessorsPrefix3(fName=" + this.getName() + ")"; } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public boolean equals(final java.lang.Object o) { if (o == this) return true; if (!(o instanceof AccessorsPrefix3)) return false; @@ -78,11 +89,13 @@ class AccessorsPrefix3 { return true; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") protected boolean canEqual(final java.lang.Object other) { return other instanceof AccessorsPrefix3; } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public int hashCode() { final int PRIME = 59; int result = 1; @@ -94,6 +107,7 @@ class AccessorsPrefix3 { class AccessorsFluentGenerics { private String name; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public AccessorsFluentGenerics name(final String name) { this.name = name; return this; @@ -102,6 +116,7 @@ class AccessorsFluentGenerics { class AccessorsFluentNoChaining { private String name; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public void name(final String name) { this.name = name; } @@ -109,6 +124,7 @@ class AccessorsFluentNoChaining { class AccessorsFluentStatic { private static String name; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static void name(final String name) { AccessorsFluentStatic.name = name; } diff --git a/test/transform/resource/after-delombok/AccessorsConfiguration.java b/test/transform/resource/after-delombok/AccessorsConfiguration.java index fd60b152..84a686c8 100644 --- a/test/transform/resource/after-delombok/AccessorsConfiguration.java +++ b/test/transform/resource/after-delombok/AccessorsConfiguration.java @@ -1,10 +1,12 @@ class AccessorsConfiguration { private String m_FieldName = ""; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public String fieldName() { return this.m_FieldName; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public void fieldName(final String m_FieldName) { this.m_FieldName = m_FieldName; } @@ -12,6 +14,7 @@ class AccessorsConfiguration { class AccessorsConfiguration2 { private String m_FieldName = ""; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public void setM_FieldName(final String m_FieldName) { this.m_FieldName = m_FieldName; } @@ -19,6 +22,7 @@ class AccessorsConfiguration2 { class AccessorsConfiguration3 { private String fFieldName = ""; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public AccessorsConfiguration3 setFieldName(final String fFieldName) { this.fFieldName = fFieldName; return this; diff --git a/test/transform/resource/after-delombok/BuilderChainAndFluent.java b/test/transform/resource/after-delombok/BuilderChainAndFluent.java index d4975bff..244df7db 100644 --- a/test/transform/resource/after-delombok/BuilderChainAndFluent.java +++ b/test/transform/resource/after-delombok/BuilderChainAndFluent.java @@ -1,30 +1,37 @@ class BuilderChainAndFluent { private final int yes; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderChainAndFluent(final int yes) { this.yes = yes; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class BuilderChainAndFluentBuilder { private int yes; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderChainAndFluentBuilder() { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public void setYes(final int yes) { this.yes = yes; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderChainAndFluent build() { return new BuilderChainAndFluent(yes); } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "BuilderChainAndFluent.BuilderChainAndFluentBuilder(yes=" + this.yes + ")"; } } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static BuilderChainAndFluentBuilder builder() { return new BuilderChainAndFluentBuilder(); } diff --git a/test/transform/resource/after-delombok/BuilderComplex.java b/test/transform/resource/after-delombok/BuilderComplex.java index 3c97f92a..21ff89cb 100644 --- a/test/transform/resource/after-delombok/BuilderComplex.java +++ b/test/transform/resource/after-delombok/BuilderComplex.java @@ -3,45 +3,54 @@ class BuilderComplex { private static void testVoidWithGenerics(T number, int arg2, String arg3, BuilderComplex selfRef) { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class VoidBuilder { private T number; private int arg2; private String arg3; private BuilderComplex selfRef; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") VoidBuilder() { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public VoidBuilder number(final T number) { this.number = number; return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public VoidBuilder arg2(final int arg2) { this.arg2 = arg2; return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public VoidBuilder arg3(final String arg3) { this.arg3 = arg3; return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public VoidBuilder selfRef(final BuilderComplex selfRef) { this.selfRef = selfRef; return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public void execute() { BuilderComplex.testVoidWithGenerics(number, arg2, arg3, selfRef); } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "BuilderComplex.VoidBuilder(number=" + this.number + ", arg2=" + this.arg2 + ", arg3=" + this.arg3 + ", selfRef=" + this.selfRef + ")"; } } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static VoidBuilder builder() { return new VoidBuilder(); } diff --git a/test/transform/resource/after-delombok/BuilderSimple.java b/test/transform/resource/after-delombok/BuilderSimple.java index 11c0e58c..f1b6b3bc 100644 --- a/test/transform/resource/after-delombok/BuilderSimple.java +++ b/test/transform/resource/after-delombok/BuilderSimple.java @@ -5,38 +5,46 @@ class BuilderSimple { private List also; private int $butNotMe; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSimple(final int yes, final List also) { this.yes = yes; this.also = also; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class BuilderSimpleBuilder { private int yes; private List also; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSimpleBuilder() { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSimpleBuilder yes(final int yes) { this.yes = yes; return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSimpleBuilder also(final List also) { this.also = also; return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSimple build() { return new BuilderSimple(yes, also); } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "BuilderSimple.BuilderSimpleBuilder(yes=" + this.yes + ", also=" + this.also + ")"; } } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static BuilderSimpleBuilder builder() { return new BuilderSimpleBuilder(); } diff --git a/test/transform/resource/after-delombok/BuilderSingularGuavaListsSets.java b/test/transform/resource/after-delombok/BuilderSingularGuavaListsSets.java index 5b9d620c..21659de1 100644 --- a/test/transform/resource/after-delombok/BuilderSingularGuavaListsSets.java +++ b/test/transform/resource/after-delombok/BuilderSingularGuavaListsSets.java @@ -9,6 +9,7 @@ class BuilderSingularGuavaListsSets { private ImmutableSet rawSet; private ImmutableSortedSet passes; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularGuavaListsSets(final ImmutableList cards, final ImmutableCollection frogs, final ImmutableSet rawSet, final ImmutableSortedSet passes) { this.cards = cards; this.frogs = frogs; @@ -16,63 +17,74 @@ class BuilderSingularGuavaListsSets { this.passes = passes; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class BuilderSingularGuavaListsSetsBuilder { private com.google.common.collect.ImmutableList.Builder cards; private com.google.common.collect.ImmutableList.Builder frogs; private com.google.common.collect.ImmutableSet.Builder rawSet; private com.google.common.collect.ImmutableSortedSet.Builder passes; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularGuavaListsSetsBuilder() { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSetsBuilder card(final T card) { if (this.cards == null) this.cards = com.google.common.collect.ImmutableList.builder(); this.cards.add(card); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSetsBuilder cards(final java.lang.Iterable cards) { if (this.cards == null) this.cards = com.google.common.collect.ImmutableList.builder(); this.cards.addAll(cards); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSetsBuilder frog(final Number frog) { if (this.frogs == null) this.frogs = com.google.common.collect.ImmutableList.builder(); this.frogs.add(frog); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSetsBuilder frogs(final java.lang.Iterable frogs) { if (this.frogs == null) this.frogs = com.google.common.collect.ImmutableList.builder(); this.frogs.addAll(frogs); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSetsBuilder rawSet(final java.lang.Object rawSet) { if (this.rawSet == null) this.rawSet = com.google.common.collect.ImmutableSet.builder(); this.rawSet.add(rawSet); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSetsBuilder rawSet(final java.lang.Iterable rawSet) { if (this.rawSet == null) this.rawSet = com.google.common.collect.ImmutableSet.builder(); this.rawSet.addAll(rawSet); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSetsBuilder pass(final String pass) { if (this.passes == null) this.passes = com.google.common.collect.ImmutableSortedSet.naturalOrder(); this.passes.add(pass); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSetsBuilder passes(final java.lang.Iterable passes) { if (this.passes == null) this.passes = com.google.common.collect.ImmutableSortedSet.naturalOrder(); this.passes.addAll(passes); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaListsSets build() { com.google.common.collect.ImmutableList cards = this.cards == null ? com.google.common.collect.ImmutableList.of() : this.cards.build(); com.google.common.collect.ImmutableCollection frogs = this.frogs == null ? com.google.common.collect.ImmutableList.of() : this.frogs.build(); @@ -82,11 +94,13 @@ class BuilderSingularGuavaListsSets { } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "BuilderSingularGuavaListsSets.BuilderSingularGuavaListsSetsBuilder(cards=" + this.cards + ", frogs=" + this.frogs + ", rawSet=" + this.rawSet + ", passes=" + this.passes + ")"; } } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static BuilderSingularGuavaListsSetsBuilder builder() { return new BuilderSingularGuavaListsSetsBuilder(); } diff --git a/test/transform/resource/after-delombok/BuilderSingularGuavaMaps.java b/test/transform/resource/after-delombok/BuilderSingularGuavaMaps.java index ab250e3c..fe5c65d2 100644 --- a/test/transform/resource/after-delombok/BuilderSingularGuavaMaps.java +++ b/test/transform/resource/after-delombok/BuilderSingularGuavaMaps.java @@ -7,56 +7,66 @@ class BuilderSingularGuavaMaps { @SuppressWarnings("all") private ImmutableBiMap rawMap; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularGuavaMaps(final ImmutableMap battleaxes, final ImmutableSortedMap vertices, final ImmutableBiMap rawMap) { this.battleaxes = battleaxes; this.vertices = vertices; this.rawMap = rawMap; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class BuilderSingularGuavaMapsBuilder { private com.google.common.collect.ImmutableMap.Builder battleaxes; private com.google.common.collect.ImmutableSortedMap.Builder vertices; private com.google.common.collect.ImmutableBiMap.Builder rawMap; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder() { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaMapsBuilder battleaxe(final K battleaxe$key, final V battleaxe$value) { if (this.battleaxes == null) this.battleaxes = com.google.common.collect.ImmutableMap.builder(); this.battleaxes.put(battleaxe$key, battleaxe$value); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaMapsBuilder battleaxes(final java.util.Map battleaxes) { if (this.battleaxes == null) this.battleaxes = com.google.common.collect.ImmutableMap.builder(); this.battleaxes.putAll(battleaxes); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaMapsBuilder vertex(final Integer vertex$key, final V vertex$value) { if (this.vertices == null) this.vertices = com.google.common.collect.ImmutableSortedMap.naturalOrder(); this.vertices.put(vertex$key, vertex$value); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaMapsBuilder vertices(final java.util.Map vertices) { if (this.vertices == null) this.vertices = com.google.common.collect.ImmutableSortedMap.naturalOrder(); this.vertices.putAll(vertices); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaMapsBuilder rawMap(final java.lang.Object rawMap$key, final java.lang.Object rawMap$value) { if (this.rawMap == null) this.rawMap = com.google.common.collect.ImmutableBiMap.builder(); this.rawMap.put(rawMap$key, rawMap$value); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaMapsBuilder rawMap(final java.util.Map rawMap) { if (this.rawMap == null) this.rawMap = com.google.common.collect.ImmutableBiMap.builder(); this.rawMap.putAll(rawMap); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularGuavaMaps build() { com.google.common.collect.ImmutableMap battleaxes = this.battleaxes == null ? com.google.common.collect.ImmutableMap.of() : this.battleaxes.build(); com.google.common.collect.ImmutableSortedMap vertices = this.vertices == null ? com.google.common.collect.ImmutableSortedMap.of() : this.vertices.build(); @@ -65,11 +75,13 @@ class BuilderSingularGuavaMaps { } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "BuilderSingularGuavaMaps.BuilderSingularGuavaMapsBuilder(battleaxes=" + this.battleaxes + ", vertices=" + this.vertices + ", rawMap=" + this.rawMap + ")"; } } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static BuilderSingularGuavaMapsBuilder builder() { return new BuilderSingularGuavaMapsBuilder(); } diff --git a/test/transform/resource/after-delombok/BuilderSingularLists.java b/test/transform/resource/after-delombok/BuilderSingularLists.java index 0d074e92..d33b8674 100644 --- a/test/transform/resource/after-delombok/BuilderSingularLists.java +++ b/test/transform/resource/after-delombok/BuilderSingularLists.java @@ -6,56 +6,66 @@ class BuilderSingularLists { @SuppressWarnings("all") private List rawList; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularLists(final List children, final Collection scarves, final List rawList) { this.children = children; this.scarves = scarves; this.rawList = rawList; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class BuilderSingularListsBuilder { private java.util.ArrayList children; private java.util.ArrayList scarves; private java.util.ArrayList rawList; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularListsBuilder() { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularListsBuilder child(final T child) { if (this.children == null) this.children = new java.util.ArrayList(); this.children.add(child); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularListsBuilder children(final java.util.Collection children) { if (this.children == null) this.children = new java.util.ArrayList(); this.children.addAll(children); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularListsBuilder scarf(final Number scarf) { if (this.scarves == null) this.scarves = new java.util.ArrayList(); this.scarves.add(scarf); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularListsBuilder scarves(final java.util.Collection scarves) { if (this.scarves == null) this.scarves = new java.util.ArrayList(); this.scarves.addAll(scarves); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularListsBuilder rawList(final java.lang.Object rawList) { if (this.rawList == null) this.rawList = new java.util.ArrayList(); this.rawList.add(rawList); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularListsBuilder rawList(final java.util.Collection rawList) { if (this.rawList == null) this.rawList = new java.util.ArrayList(); this.rawList.addAll(rawList); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularLists build() { java.util.List children; switch (this.children == null ? 0 : this.children.size()) { @@ -94,11 +104,13 @@ class BuilderSingularLists { } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "BuilderSingularLists.BuilderSingularListsBuilder(children=" + this.children + ", scarves=" + this.scarves + ", rawList=" + this.rawList + ")"; } } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static BuilderSingularListsBuilder builder() { return new BuilderSingularListsBuilder(); } diff --git a/test/transform/resource/after-delombok/BuilderSingularMaps.java b/test/transform/resource/after-delombok/BuilderSingularMaps.java index 640ddb94..49f555b5 100644 --- a/test/transform/resource/after-delombok/BuilderSingularMaps.java +++ b/test/transform/resource/after-delombok/BuilderSingularMaps.java @@ -7,6 +7,7 @@ class BuilderSingularMaps { private Map rawMap; private Map stringMap; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularMaps(final Map women, final SortedMap men, final Map rawMap, final Map stringMap) { this.women = women; this.men = men; @@ -14,6 +15,7 @@ class BuilderSingularMaps { this.stringMap = stringMap; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class BuilderSingularMapsBuilder { private java.util.ArrayList women$key; private java.util.ArrayList women$value; @@ -24,9 +26,11 @@ class BuilderSingularMaps { private java.util.ArrayList stringMap$key; private java.util.ArrayList stringMap$value; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularMapsBuilder() { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMapsBuilder woman(final K womanKey, final V womanValue) { if (this.women$key == null) { this.women$key = new java.util.ArrayList(); @@ -37,6 +41,7 @@ class BuilderSingularMaps { return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMapsBuilder women(final java.util.Map women) { if (this.women$key == null) { this.women$key = new java.util.ArrayList(); @@ -49,6 +54,7 @@ class BuilderSingularMaps { return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMapsBuilder man(final K manKey, final Number manValue) { if (this.men$key == null) { this.men$key = new java.util.ArrayList(); @@ -59,6 +65,7 @@ class BuilderSingularMaps { return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMapsBuilder men(final java.util.Map men) { if (this.men$key == null) { this.men$key = new java.util.ArrayList(); @@ -71,6 +78,7 @@ class BuilderSingularMaps { return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMapsBuilder rawMap(final java.lang.Object rawMapKey, final java.lang.Object rawMapValue) { if (this.rawMap$key == null) { this.rawMap$key = new java.util.ArrayList(); @@ -81,6 +89,7 @@ class BuilderSingularMaps { return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMapsBuilder rawMap(final java.util.Map rawMap) { if (this.rawMap$key == null) { this.rawMap$key = new java.util.ArrayList(); @@ -93,6 +102,7 @@ class BuilderSingularMaps { return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMapsBuilder stringMap(final String stringMapKey, final V stringMapValue) { if (this.stringMap$key == null) { this.stringMap$key = new java.util.ArrayList(); @@ -103,6 +113,7 @@ class BuilderSingularMaps { return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMapsBuilder stringMap(final java.util.Map stringMap) { if (this.stringMap$key == null) { this.stringMap$key = new java.util.ArrayList(); @@ -115,6 +126,7 @@ class BuilderSingularMaps { return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularMaps build() { java.util.Map women; switch (this.women$key == null ? 0 : this.women$key.size()) { @@ -162,11 +174,13 @@ class BuilderSingularMaps { } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "BuilderSingularMaps.BuilderSingularMapsBuilder(women$key=" + this.women$key + ", women$value=" + this.women$value + ", men$key=" + this.men$key + ", men$value=" + this.men$value + ", rawMap$key=" + this.rawMap$key + ", rawMap$value=" + this.rawMap$value + ", stringMap$key=" + this.stringMap$key + ", stringMap$value=" + this.stringMap$value + ")"; } } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static BuilderSingularMapsBuilder builder() { return new BuilderSingularMapsBuilder(); } diff --git a/test/transform/resource/after-delombok/BuilderSingularNoAutosingularize.java b/test/transform/resource/after-delombok/BuilderSingularNoAutosingularize.java index 5f985e16..ca985275 100644 --- a/test/transform/resource/after-delombok/BuilderSingularNoAutosingularize.java +++ b/test/transform/resource/after-delombok/BuilderSingularNoAutosingularize.java @@ -4,56 +4,66 @@ class BuilderSingularNoAutosingularize { private List widgets; private List items; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularNoAutosingularize(final List things, final List widgets, final List items) { this.things = things; this.widgets = widgets; this.items = items; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class BuilderSingularNoAutosingularizeBuilder { private java.util.ArrayList things; private java.util.ArrayList widgets; private java.util.ArrayList items; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularNoAutosingularizeBuilder() { } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularNoAutosingularizeBuilder things(final String things) { if (this.things == null) this.things = new java.util.ArrayList(); this.things.add(things); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularNoAutosingularizeBuilder things(final java.util.Collection things) { if (this.things == null) this.things = new java.util.ArrayList(); this.things.addAll(things); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularNoAutosingularizeBuilder widget(final String widget) { if (this.widgets == null) this.widgets = new java.util.ArrayList(); this.widgets.add(widget); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularNoAutosingularizeBuilder widgets(final java.util.Collection widgets) { if (this.widgets == null) this.widgets = new java.util.ArrayList(); this.widgets.addAll(widgets); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularNoAutosingularizeBuilder items(final String items) { if (this.items == null) this.items = new java.util.ArrayList(); this.items.add(items); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularNoAutosingularizeBuilder items(final java.util.Collection items) { if (this.items == null) this.items = new java.util.ArrayList(); this.items.addAll(items); return this; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public BuilderSingularNoAutosingularize build() { java.util.List things; switch (this.things == null ? 0 : this.things.size()) { @@ -92,11 +102,13 @@ class BuilderSingularNoAutosingularize { } @java.lang.Override @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public java.lang.String toString() { return "BuilderSingularNoAutosingularize.BuilderSingularNoAutosingularizeBuilder(things=" + this.things + ", widgets=" + this.widgets + ", items=" + this.items + ")"; } } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static BuilderSingularNoAutosingularizeBuilder builder() { return new BuilderSingularNoAutosingularizeBuilder(); } diff --git a/test/transform/resource/after-delombok/BuilderSingularRedirectToGuava.java b/test/transform/resource/after-delombok/BuilderSingularRedirectToGuava.java index 9c5ad25e..27ed2535 100644 --- a/test/transform/resource/after-delombok/BuilderSingularRedirectToGuava.java +++ b/test/transform/resource/after-delombok/BuilderSingularRedirectToGuava.java @@ -6,56 +6,66 @@ class BuilderSingularRedirectToGuava { private NavigableMap things; private Collection> doohickeys; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularRedirectToGuava(final Set dangerMice, final NavigableMap things, final Collection> doohickeys) { this.dangerMice = dangerMice; this.things = things; this.doohickeys = doohickeys; } @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") public static class BuilderSingularRedirectToGuavaBuilder { private com.google.common.collect.ImmutableSet.Builder dangerMice; private com.google.common.collect.ImmutableSortedMap.Builder things; private com.google.common.collect.ImmutableList.Builder> doohickeys; @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") BuilderSingularRedirectToGuavaBuilder()