From 1f4fb2fb4885ad9c808a080fbbf63353042e08d1 Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Wed, 2 Dec 2009 01:51:50 +0100 Subject: Fixed #73 SneakyThrows without parameter did not default to Throwable.class Added tests for SneakyThrows --- src/core/lombok/javac/handlers/HandleSneakyThrows.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/core/lombok/javac/handlers/HandleSneakyThrows.java b/src/core/lombok/javac/handlers/HandleSneakyThrows.java index 8a185e87..fda8805c 100644 --- a/src/core/lombok/javac/handlers/HandleSneakyThrows.java +++ b/src/core/lombok/javac/handlers/HandleSneakyThrows.java @@ -26,6 +26,7 @@ import static lombok.javac.handlers.JavacHandlerUtil.markAnnotationAsProcessed; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import lombok.SneakyThrows; import lombok.core.AnnotationValues; @@ -52,9 +53,9 @@ public class HandleSneakyThrows implements JavacAnnotationHandler @Override public boolean handle(AnnotationValues annotation, JCAnnotation ast, JavacNode annotationNode) { markAnnotationAsProcessed(annotationNode, SneakyThrows.class); Collection exceptionNames = annotation.getRawExpressions("value"); - - List memberValuePairs = ast.getArguments(); - if (memberValuePairs == null || memberValuePairs.size() == 0) return false; + if (exceptionNames.isEmpty()) { + exceptionNames = Collections.singleton("java.lang.Throwable"); + } java.util.List exceptions = new ArrayList(); for (String exception : exceptionNames) { -- cgit From 0de0f25c9071aa09d435d4990d3e819c060b7284 Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Wed, 2 Dec 2009 02:13:27 +0100 Subject: Removed debug print --- src/core/lombok/javac/HandlerLibrary.java | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/core/lombok/javac/HandlerLibrary.java b/src/core/lombok/javac/HandlerLibrary.java index 48218513..76fbb8ab 100644 --- a/src/core/lombok/javac/HandlerLibrary.java +++ b/src/core/lombok/javac/HandlerLibrary.java @@ -165,7 +165,6 @@ public class HandlerLibrary { if (container == null) continue; try { - System.out.println("Calling handle on: "+ container.handler.getClass().getName()); handled |= container.handle(node); } catch (AnnotationValueDecodeFail fail) { fail.owner.setError(fail.getMessage(), fail.idx); -- cgit From f05facd4576648122f7bdb80122dc7a1b3f6ecf6 Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Wed, 2 Dec 2009 04:07:41 +0100 Subject: Make delombok actually work from the command line if tools.jar is not already on your classpath --- src/delombok/lombok/delombok/DelombokApp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/delombok/lombok/delombok/DelombokApp.java b/src/delombok/lombok/delombok/DelombokApp.java index 71fda96f..76d5aed3 100644 --- a/src/delombok/lombok/delombok/DelombokApp.java +++ b/src/delombok/lombok/delombok/DelombokApp.java @@ -108,7 +108,7 @@ public class DelombokApp implements LombokApp { } }; try { - loader.loadClass("lombok.delombok.Delombok").getMethod("main", String[].class).invoke(null, new Object[] {args}); + loader.loadClass("lombok.delombok.Delombok").getMethod("main", String[].class).invoke(null, new Object[] {args.toArray(new String[0])}); } catch (InvocationTargetException e1) { Throwable t = e1.getCause(); if (t instanceof Error) throw (Error)t; -- cgit From e3d9e116af1c573b27ba35ac07f0111aaa1882ac Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Wed, 2 Dec 2009 04:11:40 +0100 Subject: Use chainDots to generate java.lang.Object to get rid of the extra prepended dot! Change the order of the generated methods, first equals then hashCode --- .../lombok/javac/handlers/HandleEqualsAndHashCode.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java index f388336d..4ee24391 100644 --- a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java +++ b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java @@ -167,9 +167,9 @@ public class HandleEqualsAndHashCode implements JavacAnnotationHandlernil()); JCModifiers mods = maker.Modifiers(Flags.PUBLIC, List.of(overrideAnnotation)); - JCExpression objectType = maker.Type(typeNode.getSymbolTable().objectType); + JCExpression objectType = chainDots(maker, typeNode, "java", "lang", "Object"); JCExpression returnType = maker.TypeIdent(TypeTags.BOOLEAN); List statements = List.nil(); -- cgit From 9f69893ce2efd6ca0a6ef64022e48e49fc2b33f0 Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Wed, 2 Dec 2009 04:21:31 +0100 Subject: Changed the order of the generated methods in for @Data - Constructor(s) - Getters/Setters per field - equals - hashCode - toString Added first test for @Data --- src/core/lombok/eclipse/handlers/HandleData.java | 27 ++++++++++++++++------ .../eclipse/handlers/HandleEqualsAndHashCode.java | 16 ++++++------- src/core/lombok/javac/handlers/HandleData.java | 24 ++++++++++++++----- 3 files changed, 46 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/core/lombok/eclipse/handlers/HandleData.java b/src/core/lombok/eclipse/handlers/HandleData.java index 37b1e6f1..4e23bbf4 100644 --- a/src/core/lombok/eclipse/handlers/HandleData.java +++ b/src/core/lombok/eclipse/handlers/HandleData.java @@ -21,13 +21,21 @@ */ package lombok.eclipse.handlers; -import static lombok.eclipse.Eclipse.*; -import static lombok.eclipse.handlers.EclipseHandlerUtil.*; +import static lombok.eclipse.Eclipse.copyAnnotations; +import static lombok.eclipse.Eclipse.copyType; +import static lombok.eclipse.Eclipse.copyTypeParams; +import static lombok.eclipse.handlers.EclipseHandlerUtil.constructorExists; +import static lombok.eclipse.handlers.EclipseHandlerUtil.findAnnotations; +import static lombok.eclipse.handlers.EclipseHandlerUtil.generateNullCheck; +import static lombok.eclipse.handlers.EclipseHandlerUtil.injectMethod; +import static lombok.eclipse.handlers.EclipseHandlerUtil.methodExists; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import lombok.AccessLevel; import lombok.Data; @@ -84,6 +92,7 @@ public class HandleData implements EclipseAnnotationHandler { } List nodesForConstructor = new ArrayList(); + Map gettersAndSetters = new LinkedHashMap(); for (EclipseNode child : typeNode.down()) { if (child.getKind() != Kind.FIELD) continue; FieldDeclaration fieldDecl = (FieldDeclaration) child.get(); @@ -94,13 +103,9 @@ public class HandleData implements EclipseAnnotationHandler { boolean isFinal = (fieldDecl.modifiers & ClassFileConstants.AccFinal) != 0; boolean isNonNull = findAnnotations(fieldDecl, TransformationsUtil.NON_NULL_PATTERN).length != 0; if ((isFinal || isNonNull) && fieldDecl.initialization == null) nodesForConstructor.add(child); - new HandleGetter().generateGetterForField(child, annotationNode.get()); - if (!isFinal) new HandleSetter().generateSetterForField(child, annotationNode.get()); + gettersAndSetters.put(child, !isFinal); } - new HandleToString().generateToStringForType(typeNode, annotationNode); - new HandleEqualsAndHashCode().generateEqualsAndHashCodeForType(typeNode, annotationNode); - //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 //most useful of the many methods built by @Data. This trick won't work for the non-static constructor, @@ -121,6 +126,14 @@ public class HandleData implements EclipseAnnotationHandler { } } + for (Map.Entry field : gettersAndSetters.entrySet()) { + new HandleGetter().generateGetterForField(field.getKey(), annotationNode.get()); + if (field.getValue()) new HandleSetter().generateSetterForField(field.getKey(), annotationNode.get()); + } + + new HandleEqualsAndHashCode().generateEqualsAndHashCodeForType(typeNode, annotationNode); + new HandleToString().generateToStringForType(typeNode, annotationNode); + return false; } diff --git a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java index 7c0980c8..2c636916 100644 --- a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java +++ b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java @@ -204,32 +204,32 @@ public class HandleEqualsAndHashCode implements EclipseAnnotationHandler { } List nodesForConstructor = List.nil(); + Map gettersAndSetters = new LinkedHashMap(); for (JavacNode child : typeNode.down()) { if (child.getKind() != Kind.FIELD) continue; JCVariableDecl fieldDecl = (JCVariableDecl) child.get(); @@ -83,13 +91,9 @@ public class HandleData implements JavacAnnotationHandler { boolean isFinal = (fieldFlags & Flags.FINAL) != 0; boolean isNonNull = !findAnnotations(child, TransformationsUtil.NON_NULL_PATTERN).isEmpty(); if ((isFinal || isNonNull) && fieldDecl.init == null) nodesForConstructor = nodesForConstructor.append(child); - new HandleGetter().generateGetterForField(child, annotationNode.get()); - if (!isFinal) new HandleSetter().generateSetterForField(child, annotationNode.get()); + gettersAndSetters.put(child, !isFinal); } - new HandleToString().generateToStringForType(typeNode, annotationNode); - new HandleEqualsAndHashCode().generateEqualsAndHashCodeForType(typeNode, annotationNode); - String staticConstructorName = annotation.getInstance().staticConstructor(); if (constructorExists(typeNode) == MemberExistsResult.NOT_EXISTS) { @@ -102,6 +106,14 @@ public class HandleData implements JavacAnnotationHandler { injectMethod(typeNode, staticConstructor); } + for (Map.Entry field : gettersAndSetters.entrySet()) { + new HandleGetter().generateGetterForField(field.getKey(), annotationNode.get()); + if (field.getValue()) new HandleSetter().generateSetterForField(field.getKey(), annotationNode.get()); + } + + new HandleEqualsAndHashCode().generateEqualsAndHashCodeForType(typeNode, annotationNode); + new HandleToString().generateToStringForType(typeNode, annotationNode); + return true; } -- cgit