mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-14 08:18:29 +00:00
[trivial] some memoryload improvements by not making a new instance but using a cached one instead. Fixes issue #1579
This commit is contained in:
1 parent
3deb393911
commit
01bbd212e9
12 files changed
+61
-31
No files matched your search
@@ -897,7 +897,7 @@ public class EclipseHandlerUtil {
|
||||
|
||||
// Check if the class has a @Getter annotation.
|
||||
|
||||
if (!hasGetterAnnotation && new HandleGetter().fieldQualifiesForGetterGeneration(field)) {
|
||||
if (!hasGetterAnnotation && HandleGetter.fieldQualifiesForGetterGeneration(field)) {
|
||||
//Check if the class has @Getter or @Data annotation.
|
||||
|
||||
EclipseNode containingType = field.up();
|
||||
|
||||
@@ -89,6 +89,8 @@ import lombok.experimental.NonFinal;
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
@HandlerPriority(-1024) //-2^10; to ensure we've picked up @FieldDefault's changes (-2048) but @Value hasn't removed itself yet (-512), so that we can error on presence of it on the builder classes.
|
||||
public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
private static final char[] CLEAN_FIELD_NAME = "$lombokUnclean".toCharArray();
|
||||
private static final char[] CLEAN_METHOD_NAME = "$lombokClean".toCharArray();
|
||||
|
||||
@@ -225,7 +227,7 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
|
||||
allFields.add(fieldNode);
|
||||
}
|
||||
|
||||
new HandleConstructor().generateConstructor(tdParent, AccessLevel.PACKAGE, allFields, false, null, SkipIfConstructorExists.I_AM_BUILDER,
|
||||
handleConstructor.generateConstructor(tdParent, AccessLevel.PACKAGE, allFields, false, null, SkipIfConstructorExists.I_AM_BUILDER,
|
||||
Collections.<Annotation>emptyList(), annotationNode);
|
||||
|
||||
returnType = namePlusTypeParamsToTypeReference(td.name, td.typeParameters, p);
|
||||
|
||||
@@ -80,6 +80,8 @@ import org.mangosdk.spi.ProviderFor;
|
||||
public class HandleConstructor {
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleNoArgsConstructor extends EclipseAnnotationHandler<NoArgsConstructor> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
@Override public void handle(AnnotationValues<NoArgsConstructor> annotation, Annotation ast, EclipseNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.NO_ARGS_CONSTRUCTOR_FLAG_USAGE, "@NoArgsConstructor", ConfigurationKeys.ANY_CONSTRUCTOR_FLAG_USAGE, "any @xArgsConstructor");
|
||||
|
||||
@@ -95,12 +97,14 @@ public class HandleConstructor {
|
||||
List<EclipseNode> fields = force ? findFinalFields(typeNode) : Collections.<EclipseNode>emptyList();
|
||||
List<Annotation> onConstructor = unboxAndRemoveAnnotationParameter(ast, "onConstructor", "@NoArgsConstructor(onConstructor", annotationNode);
|
||||
|
||||
new HandleConstructor().generateConstructor(typeNode, level, fields, force, staticName, SkipIfConstructorExists.NO, onConstructor, annotationNode);
|
||||
handleConstructor.generateConstructor(typeNode, level, fields, force, staticName, SkipIfConstructorExists.NO, onConstructor, annotationNode);
|
||||
}
|
||||
}
|
||||
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleRequiredArgsConstructor extends EclipseAnnotationHandler<RequiredArgsConstructor> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
@Override public void handle(AnnotationValues<RequiredArgsConstructor> annotation, Annotation ast, EclipseNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.REQUIRED_ARGS_CONSTRUCTOR_FLAG_USAGE, "@RequiredArgsConstructor", ConfigurationKeys.ANY_CONSTRUCTOR_FLAG_USAGE, "any @xArgsConstructor");
|
||||
|
||||
@@ -116,7 +120,7 @@ public class HandleConstructor {
|
||||
|
||||
List<Annotation> onConstructor = unboxAndRemoveAnnotationParameter(ast, "onConstructor", "@RequiredArgsConstructor(onConstructor", annotationNode);
|
||||
|
||||
new HandleConstructor().generateConstructor(
|
||||
handleConstructor.generateConstructor(
|
||||
typeNode, level, findRequiredFields(typeNode), false, staticName, SkipIfConstructorExists.NO,
|
||||
onConstructor, annotationNode);
|
||||
}
|
||||
@@ -163,6 +167,8 @@ public class HandleConstructor {
|
||||
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleAllArgsConstructor extends EclipseAnnotationHandler<AllArgsConstructor> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
@Override public void handle(AnnotationValues<AllArgsConstructor> annotation, Annotation ast, EclipseNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.ALL_ARGS_CONSTRUCTOR_FLAG_USAGE, "@AllArgsConstructor", ConfigurationKeys.ANY_CONSTRUCTOR_FLAG_USAGE, "any @xArgsConstructor");
|
||||
|
||||
@@ -178,7 +184,7 @@ public class HandleConstructor {
|
||||
|
||||
List<Annotation> onConstructor = unboxAndRemoveAnnotationParameter(ast, "onConstructor", "@AllArgsConstructor(onConstructor", annotationNode);
|
||||
|
||||
new HandleConstructor().generateConstructor(
|
||||
handleConstructor.generateConstructor(
|
||||
typeNode, level, findAllFields(typeNode), false, staticName, SkipIfConstructorExists.NO,
|
||||
onConstructor, annotationNode);
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ import org.mangosdk.spi.ProviderFor;
|
||||
*/
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public class HandleData extends EclipseAnnotationHandler<Data> {
|
||||
|
||||
private HandleGetter handleGetter = new HandleGetter();
|
||||
private HandleSetter handleSetter = new HandleSetter();
|
||||
private HandleEqualsAndHashCode handleEqualsAndHashCode = new HandleEqualsAndHashCode();
|
||||
|
||||
@@ -105,7 +105,7 @@ public class HandleGetter extends EclipseAnnotationHandler<Getter> {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean fieldQualifiesForGetterGeneration(EclipseNode field) {
|
||||
public static boolean fieldQualifiesForGetterGeneration(EclipseNode field) {
|
||||
if (field.getKind() != Kind.FIELD) return false;
|
||||
FieldDeclaration fieldDecl = (FieldDeclaration) field.get();
|
||||
return filterField(fieldDecl);
|
||||
|
||||
@@ -47,6 +47,12 @@ import org.mangosdk.spi.ProviderFor;
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
@HandlerPriority(-512) //-2^9; to ensure @EqualsAndHashCode and such pick up on this handler making the class final and messing with the fields' access levels, run earlier.
|
||||
public class HandleValue extends EclipseAnnotationHandler<Value> {
|
||||
private HandleFieldDefaults handleFieldDefaults = new HandleFieldDefaults();
|
||||
private HandleGetter handleGetter = new HandleGetter();
|
||||
private HandleEqualsAndHashCode handleEqualsAndHashCode = new HandleEqualsAndHashCode();
|
||||
private HandleToString handleToString = new HandleToString();
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
public void handle(AnnotationValues<Value> annotation, Annotation ast, EclipseNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.VALUE_FLAG_USAGE, "@Value");
|
||||
|
||||
@@ -72,7 +78,7 @@ public class HandleValue extends EclipseAnnotationHandler<Value> {
|
||||
}
|
||||
}
|
||||
|
||||
new HandleFieldDefaults().generateFieldDefaultsForType(typeNode, annotationNode, AccessLevel.PRIVATE, true, true);
|
||||
handleFieldDefaults.generateFieldDefaultsForType(typeNode, annotationNode, AccessLevel.PRIVATE, true, true);
|
||||
|
||||
//Careful: Generate the public static constructor (if there is one) LAST, so that any attempt to
|
||||
//'find callers' on the annotation node will find callers of the constructor, which is by far the
|
||||
@@ -80,10 +86,10 @@ public class HandleValue extends EclipseAnnotationHandler<Value> {
|
||||
//for whatever reason, though you can find callers of that one by focusing on the class name itself
|
||||
//and hitting 'find callers'.
|
||||
|
||||
new HandleGetter().generateGetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true);
|
||||
new HandleEqualsAndHashCode().generateEqualsAndHashCodeForType(typeNode, annotationNode);
|
||||
new HandleToString().generateToStringForType(typeNode, annotationNode);
|
||||
new HandleConstructor().generateAllArgsConstructor(typeNode, AccessLevel.PUBLIC, ann.staticConstructor(), SkipIfConstructorExists.YES,
|
||||
handleGetter.generateGetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true);
|
||||
handleEqualsAndHashCode.generateEqualsAndHashCodeForType(typeNode, annotationNode);
|
||||
handleToString.generateToStringForType(typeNode, annotationNode);
|
||||
handleConstructor.generateAllArgsConstructor(typeNode, AccessLevel.PUBLIC, ann.staticConstructor(), SkipIfConstructorExists.YES,
|
||||
Collections.<Annotation>emptyList(), annotationNode);
|
||||
}
|
||||
}
|
||||
@@ -74,6 +74,8 @@ import static lombok.javac.JavacTreeMaker.TypeTag.*;
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
@HandlerPriority(-1024) //-2^10; to ensure we've picked up @FieldDefault's changes (-2048) but @Value hasn't removed itself yet (-512), so that we can error on presence of it on the builder classes.
|
||||
public class HandleBuilder extends JavacAnnotationHandler<Builder> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
private static final boolean toBoolean(Object expr, boolean defaultValue) {
|
||||
if (expr == null) return defaultValue;
|
||||
if (expr instanceof JCLiteral) return ((Integer) ((JCLiteral) expr).value) != 0;
|
||||
@@ -176,7 +178,7 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
|
||||
allFields.append(fieldNode);
|
||||
}
|
||||
|
||||
new HandleConstructor().generateConstructor(tdParent, AccessLevel.PACKAGE, List.<JCAnnotation>nil(), allFields.toList(), false, null, SkipIfConstructorExists.I_AM_BUILDER, annotationNode);
|
||||
handleConstructor.generateConstructor(tdParent, AccessLevel.PACKAGE, List.<JCAnnotation>nil(), allFields.toList(), false, null, SkipIfConstructorExists.I_AM_BUILDER, annotationNode);
|
||||
|
||||
returnType = namePlusTypeParamsToTypeReference(tdParent.getTreeMaker(), td.name, td.typarams);
|
||||
typeParams = td.typarams;
|
||||
|
||||
@@ -64,6 +64,8 @@ import com.sun.tools.javac.util.Name;
|
||||
public class HandleConstructor {
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleNoArgsConstructor extends JavacAnnotationHandler<NoArgsConstructor> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
@Override public void handle(AnnotationValues<NoArgsConstructor> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.NO_ARGS_CONSTRUCTOR_FLAG_USAGE, "@NoArgsConstructor", ConfigurationKeys.ANY_CONSTRUCTOR_FLAG_USAGE, "any @xArgsConstructor");
|
||||
|
||||
@@ -78,12 +80,14 @@ public class HandleConstructor {
|
||||
String staticName = ann.staticName();
|
||||
boolean force = ann.force();
|
||||
List<JavacNode> fields = force ? findFinalFields(typeNode) : List.<JavacNode>nil();
|
||||
new HandleConstructor().generateConstructor(typeNode, level, onConstructor, fields, force, staticName, SkipIfConstructorExists.NO, annotationNode);
|
||||
handleConstructor.generateConstructor(typeNode, level, onConstructor, fields, force, staticName, SkipIfConstructorExists.NO, annotationNode);
|
||||
}
|
||||
}
|
||||
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleRequiredArgsConstructor extends JavacAnnotationHandler<RequiredArgsConstructor> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
@Override public void handle(AnnotationValues<RequiredArgsConstructor> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.REQUIRED_ARGS_CONSTRUCTOR_FLAG_USAGE, "@RequiredArgsConstructor", ConfigurationKeys.ANY_CONSTRUCTOR_FLAG_USAGE, "any @xArgsConstructor");
|
||||
|
||||
@@ -100,7 +104,7 @@ public class HandleConstructor {
|
||||
annotationNode.addError("This deprecated feature is no longer supported. Remove it; you can create a lombok.config file with 'lombok.anyConstructor.suppressConstructorProperties = true'.");
|
||||
}
|
||||
|
||||
new HandleConstructor().generateConstructor(typeNode, level, onConstructor, findRequiredFields(typeNode), false, staticName, SkipIfConstructorExists.NO, annotationNode);
|
||||
handleConstructor.generateConstructor(typeNode, level, onConstructor, findRequiredFields(typeNode), false, staticName, SkipIfConstructorExists.NO, annotationNode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,6 +135,8 @@ public class HandleConstructor {
|
||||
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleAllArgsConstructor extends JavacAnnotationHandler<AllArgsConstructor> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
|
||||
@Override public void handle(AnnotationValues<AllArgsConstructor> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.ALL_ARGS_CONSTRUCTOR_FLAG_USAGE, "@AllArgsConstructor", ConfigurationKeys.ANY_CONSTRUCTOR_FLAG_USAGE, "any @xArgsConstructor");
|
||||
|
||||
@@ -146,7 +152,7 @@ public class HandleConstructor {
|
||||
if (annotation.isExplicit("suppressConstructorProperties")) {
|
||||
annotationNode.addError("This deprecated feature is no longer supported. Remove it; you can create a lombok.config file with 'lombok.anyConstructor.suppressConstructorProperties = true'.");
|
||||
}
|
||||
new HandleConstructor().generateConstructor(typeNode, level, onConstructor, findAllFields(typeNode), false, staticName, SkipIfConstructorExists.NO, annotationNode);
|
||||
handleConstructor.generateConstructor(typeNode, level, onConstructor, findAllFields(typeNode), false, staticName, SkipIfConstructorExists.NO, annotationNode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,12 @@ import com.sun.tools.javac.tree.JCTree.JCAnnotation;
|
||||
*/
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public class HandleData extends JavacAnnotationHandler<Data> {
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
private HandleGetter handleGetter = new HandleGetter();
|
||||
private HandleSetter handleSetter = new HandleSetter();
|
||||
private HandleEqualsAndHashCode handleEqualsAndHashCode = new HandleEqualsAndHashCode();
|
||||
private HandleToString handleToString = new HandleToString();
|
||||
|
||||
@Override public void handle(AnnotationValues<Data> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.DATA_FLAG_USAGE, "@Data");
|
||||
|
||||
@@ -54,11 +60,10 @@ public class HandleData extends JavacAnnotationHandler<Data> {
|
||||
|
||||
String staticConstructorName = annotation.getInstance().staticConstructor();
|
||||
|
||||
// TODO move this to the end OR move it to the top in eclipse.
|
||||
new HandleConstructor().generateRequiredArgsConstructor(typeNode, AccessLevel.PUBLIC, staticConstructorName, SkipIfConstructorExists.YES, annotationNode);
|
||||
new HandleGetter().generateGetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true);
|
||||
new HandleSetter().generateSetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true);
|
||||
new HandleEqualsAndHashCode().generateEqualsAndHashCodeForType(typeNode, annotationNode);
|
||||
new HandleToString().generateToStringForType(typeNode, annotationNode);
|
||||
handleConstructor.generateRequiredArgsConstructor(typeNode, AccessLevel.PUBLIC, staticConstructorName, SkipIfConstructorExists.YES, annotationNode);
|
||||
handleGetter.generateGetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true);
|
||||
handleSetter.generateSetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true);
|
||||
handleEqualsAndHashCode.generateEqualsAndHashCodeForType(typeNode, annotationNode);
|
||||
handleToString.generateToStringForType(typeNode, annotationNode);
|
||||
}
|
||||
}
|
||||
@@ -95,7 +95,7 @@ public class HandleGetter extends JavacAnnotationHandler<Getter> {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean fieldQualifiesForGetterGeneration(JavacNode field) {
|
||||
public static boolean fieldQualifiesForGetterGeneration(JavacNode field) {
|
||||
if (field.getKind() != Kind.FIELD) return false;
|
||||
JCVariableDecl fieldDecl = (JCVariableDecl) field.get();
|
||||
//Skip fields that start with $
|
||||
|
||||
@@ -47,6 +47,12 @@ import com.sun.tools.javac.tree.JCTree.JCModifiers;
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
@HandlerPriority(-512) //-2^9; to ensure @EqualsAndHashCode and such pick up on this handler making the class final and messing with the fields' access levels, run earlier.
|
||||
public class HandleValue extends JavacAnnotationHandler<Value> {
|
||||
private HandleFieldDefaults handleFieldDefaults = new HandleFieldDefaults();
|
||||
private HandleConstructor handleConstructor = new HandleConstructor();
|
||||
private HandleGetter handleGetter = new HandleGetter();
|
||||
private HandleEqualsAndHashCode handleEqualsAndHashCode = new HandleEqualsAndHashCode();
|
||||
private HandleToString handleToString = new HandleToString();
|
||||
|
||||
@Override public void handle(AnnotationValues<Value> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.VALUE_FLAG_USAGE, "@Value");
|
||||
|
||||
@@ -68,12 +74,10 @@ public class HandleValue extends JavacAnnotationHandler<Value> {
|
||||
typeNode.rebuild();
|
||||
}
|
||||
}
|
||||
new HandleFieldDefaults().generateFieldDefaultsForType(typeNode, annotationNode, AccessLevel.PRIVATE, true, true);
|
||||
|
||||
// TODO move this to the end OR move it to the top in eclipse.
|
||||
new HandleConstructor().generateAllArgsConstructor(typeNode, AccessLevel.PUBLIC, staticConstructorName, SkipIfConstructorExists.YES, annotationNode);
|
||||
new HandleGetter().generateGetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true);
|
||||
new HandleEqualsAndHashCode().generateEqualsAndHashCodeForType(typeNode, annotationNode);
|
||||
new HandleToString().generateToStringForType(typeNode, annotationNode);
|
||||
handleFieldDefaults.generateFieldDefaultsForType(typeNode, annotationNode, AccessLevel.PRIVATE, true, true);
|
||||
handleConstructor.generateAllArgsConstructor(typeNode, AccessLevel.PUBLIC, staticConstructorName, SkipIfConstructorExists.YES, annotationNode);
|
||||
handleGetter.generateGetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true);
|
||||
handleEqualsAndHashCode.generateEqualsAndHashCodeForType(typeNode, annotationNode);
|
||||
handleToString.generateToStringForType(typeNode, annotationNode);
|
||||
}
|
||||
}
|
||||
@@ -818,7 +818,7 @@ public class JavacHandlerUtil {
|
||||
|
||||
// Check if the class has a @Getter annotation.
|
||||
|
||||
if (!hasGetterAnnotation && new HandleGetter().fieldQualifiesForGetterGeneration(field)) {
|
||||
if (!hasGetterAnnotation && HandleGetter.fieldQualifiesForGetterGeneration(field)) {
|
||||
//Check if the class has @Getter or @Data annotation.
|
||||
|
||||
JavacNode containingType = field.up();
|
||||
|
||||
Reference in new issue
Block a user