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 --- test/delombok/resource/after/SneakyThrowsPlain.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 test/delombok/resource/after/SneakyThrowsPlain.java (limited to 'test/delombok/resource/after') diff --git a/test/delombok/resource/after/SneakyThrowsPlain.java b/test/delombok/resource/after/SneakyThrowsPlain.java new file mode 100644 index 00000000..d5abc478 --- /dev/null +++ b/test/delombok/resource/after/SneakyThrowsPlain.java @@ -0,0 +1,17 @@ +class SneakyThrowsPlain { + public void test() { + try { + System.out.println("test1"); + } catch (java.lang.Throwable $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } + + public void test2() { + try { + System.out.println("test2"); + } catch (java.lang.Throwable $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } +} \ No newline at end of file -- cgit From 2ff16d337505d540fc840eae49543aa3e8801107 Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Wed, 2 Dec 2009 02:47:38 +0100 Subject: Added new tests for SneakyThrows --- .../resource/after/SneakyThrowsMultiple.java | 45 ++++++++++++++++++++++ .../resource/after/SneakyThrowsSingle.java | 26 +++++++++++++ .../resource/before/SneakyThrowsMultiple.java | 28 ++++++++++++++ .../resource/before/SneakyThrowsSingle.java | 21 ++++++++++ 4 files changed, 120 insertions(+) create mode 100644 test/delombok/resource/after/SneakyThrowsMultiple.java create mode 100644 test/delombok/resource/after/SneakyThrowsSingle.java create mode 100644 test/delombok/resource/before/SneakyThrowsMultiple.java create mode 100644 test/delombok/resource/before/SneakyThrowsSingle.java (limited to 'test/delombok/resource/after') diff --git a/test/delombok/resource/after/SneakyThrowsMultiple.java b/test/delombok/resource/after/SneakyThrowsMultiple.java new file mode 100644 index 00000000..bab13990 --- /dev/null +++ b/test/delombok/resource/after/SneakyThrowsMultiple.java @@ -0,0 +1,45 @@ +import java.awt.AWTException; +import java.io.IOException; +import java.util.Random; +class SneakyThrowsMultiple { + public void test() { + try { + try { + System.out.println("test1"); + throw new IOException(); + } catch (IOException $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } catch (Throwable $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } + public void test2() { + try { + try { + System.out.println("test2"); + if (new Random().nextBoolean()) { + throw new IOException(); + } else { + throw new AWTException("WHAT"); + } + } catch (AWTException $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } catch (IOException $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } + public void test3() { + try { + try { + System.out.println("test3"); + throw new IOException(); + } catch (IOException $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } catch (Throwable $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } +} \ No newline at end of file diff --git a/test/delombok/resource/after/SneakyThrowsSingle.java b/test/delombok/resource/after/SneakyThrowsSingle.java new file mode 100644 index 00000000..519d06a9 --- /dev/null +++ b/test/delombok/resource/after/SneakyThrowsSingle.java @@ -0,0 +1,26 @@ +import java.io.IOException; +class SneakyThrowsSingle { + public void test() { + try { + System.out.println("test1"); + } catch (Throwable $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } + public void test2() { + try { + System.out.println("test2"); + throw new IOException(); + } catch (IOException $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } + public void test3() { + try { + System.out.println("test3"); + throw new IOException(); + } catch (IOException $ex) { + throw lombok.Lombok.sneakyThrow($ex); + } + } +} \ No newline at end of file diff --git a/test/delombok/resource/before/SneakyThrowsMultiple.java b/test/delombok/resource/before/SneakyThrowsMultiple.java new file mode 100644 index 00000000..7e644f3d --- /dev/null +++ b/test/delombok/resource/before/SneakyThrowsMultiple.java @@ -0,0 +1,28 @@ +import java.awt.AWTException; +import java.io.IOException; +import java.util.Random; + +class SneakyThrowsMultiple { + @lombok.SneakyThrows(IOException.class,Throwable.class) + public void test() { + System.out.println("test1"); + throw new IOException(); + } + + @lombok.SneakyThrows(AWTException.class,IOException.class) + public void test2() { + System.out.println("test2"); + if (new Random().nextBoolean()) { + throw new IOException(); + } + else { + throw new AWTException("WHAT"); + } + } + + @lombok.SneakyThrows(value={IOException.class,Throwable.class}) + public void test3() { + System.out.println("test3"); + throw new IOException(); + } +} \ No newline at end of file diff --git a/test/delombok/resource/before/SneakyThrowsSingle.java b/test/delombok/resource/before/SneakyThrowsSingle.java new file mode 100644 index 00000000..e7b78ec7 --- /dev/null +++ b/test/delombok/resource/before/SneakyThrowsSingle.java @@ -0,0 +1,21 @@ +import java.io.IOException; + +class SneakyThrowsSingle { + @lombok.SneakyThrows(Throwable.class) + public void test() { + System.out.println("test1"); + } + + @lombok.SneakyThrows(IOException.class) + public void test2() { + System.out.println("test2"); + throw new IOException(); + } + + @lombok.SneakyThrows(value=IOException.class) + public void test3() { + System.out.println("test3"); + throw new IOException(); + } + +} \ No newline at end of file -- cgit From 2ef7ef3e9f925f92a23ad279755db165495623ab Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Wed, 2 Dec 2009 02:48:07 +0100 Subject: Improved tests to also test on value= parameters --- test/delombok/resource/after/CleanupName.java | 12 +++++++++-- .../delombok/resource/after/GetterAccessLevel.java | 25 ++++++++++++++++++++-- .../delombok/resource/after/SetterAccessLevel.java | 6 +++++- test/delombok/resource/after/SynchronizedName.java | 5 +++++ test/delombok/resource/before/CleanupName.java | 8 +++++-- .../resource/before/GetterAccessLevel.java | 14 +++++++++++- .../resource/before/SetterAccessLevel.java | 4 +++- .../delombok/resource/before/SynchronizedName.java | 3 +++ 8 files changed, 68 insertions(+), 9 deletions(-) (limited to 'test/delombok/resource/after') diff --git a/test/delombok/resource/after/CleanupName.java b/test/delombok/resource/after/CleanupName.java index 26997372..cd29eb68 100644 --- a/test/delombok/resource/after/CleanupName.java +++ b/test/delombok/resource/after/CleanupName.java @@ -1,5 +1,5 @@ -class Cleanup { - void test() throws Exception { +class CleanupName { + void test() { Object o = "Hello World!"; try { System.out.println(o); @@ -7,4 +7,12 @@ class Cleanup { o.toString(); } } + void test2() { + Object o = "Hello World too!"; + try { + System.out.println(o); + } finally { + o.toString(); + } + } } diff --git a/test/delombok/resource/after/GetterAccessLevel.java b/test/delombok/resource/after/GetterAccessLevel.java index eec84e85..e117b72a 100644 --- a/test/delombok/resource/after/GetterAccessLevel.java +++ b/test/delombok/resource/after/GetterAccessLevel.java @@ -1,9 +1,15 @@ -class Getter { +class GetterAccessLevel { boolean isNone; boolean isPrivate; boolean isPackage; boolean isProtected; boolean isPublic; + String noneString; + String privateString; + String packageString; + String protectedString; + String publicString; + String value; private boolean isPrivate() { return isPrivate; } @@ -16,4 +22,19 @@ class Getter { public boolean isPublic() { return isPublic; } -} + private String getPrivateString() { + return privateString; + } + String getPackageString() { + return packageString; + } + protected String getProtectedString() { + return protectedString; + } + public String getPublicString() { + return publicString; + } + public String getValue() { + return value; + } +} \ No newline at end of file diff --git a/test/delombok/resource/after/SetterAccessLevel.java b/test/delombok/resource/after/SetterAccessLevel.java index 95179bac..d4e7ac23 100644 --- a/test/delombok/resource/after/SetterAccessLevel.java +++ b/test/delombok/resource/after/SetterAccessLevel.java @@ -1,9 +1,10 @@ -class Setter { +class SetterAccessLevel { boolean isNone; boolean isPrivate; boolean isPackage; boolean isProtected; boolean isPublic; + boolean value; private void setIsPrivate(final boolean isPrivate) { this.isPrivate = isPrivate; } @@ -16,4 +17,7 @@ class Setter { public void setIsPublic(final boolean isPublic) { this.isPublic = isPublic; } + public void setValue(final boolean value) { + this.value = value; + } } diff --git a/test/delombok/resource/after/SynchronizedName.java b/test/delombok/resource/after/SynchronizedName.java index a3e64796..066e3bdf 100644 --- a/test/delombok/resource/after/SynchronizedName.java +++ b/test/delombok/resource/after/SynchronizedName.java @@ -17,4 +17,9 @@ class SynchronizedName { System.out.println("four"); } } + void test5() { + synchronized (read) { + System.out.println("five"); + } + } } diff --git a/test/delombok/resource/before/CleanupName.java b/test/delombok/resource/before/CleanupName.java index 0d253f1e..cbc5b447 100644 --- a/test/delombok/resource/before/CleanupName.java +++ b/test/delombok/resource/before/CleanupName.java @@ -1,6 +1,10 @@ -class Cleanup { - void test() throws Exception { +class CleanupName { + void test() { @lombok.Cleanup("toString") Object o = "Hello World!"; System.out.println(o); } + void test2() { + @lombok.Cleanup(value="toString") Object o = "Hello World too!"; + System.out.println(o); + } } \ No newline at end of file diff --git a/test/delombok/resource/before/GetterAccessLevel.java b/test/delombok/resource/before/GetterAccessLevel.java index 8fd9bcc7..413b888e 100644 --- a/test/delombok/resource/before/GetterAccessLevel.java +++ b/test/delombok/resource/before/GetterAccessLevel.java @@ -1,4 +1,4 @@ -class Getter { +class GetterAccessLevel { @lombok.Getter(lombok.AccessLevel.NONE) boolean isNone; @lombok.Getter(lombok.AccessLevel.PRIVATE) @@ -9,4 +9,16 @@ class Getter { boolean isProtected; @lombok.Getter(lombok.AccessLevel.PUBLIC) boolean isPublic; + @lombok.Getter(lombok.AccessLevel.NONE) + String noneString; + @lombok.Getter(lombok.AccessLevel.PRIVATE) + String privateString; + @lombok.Getter(lombok.AccessLevel.PACKAGE) + String packageString; + @lombok.Getter(lombok.AccessLevel.PROTECTED) + String protectedString; + @lombok.Getter(lombok.AccessLevel.PUBLIC) + String publicString; + @lombok.Getter(value=lombok.AccessLevel.PUBLIC) + String value; } diff --git a/test/delombok/resource/before/SetterAccessLevel.java b/test/delombok/resource/before/SetterAccessLevel.java index 767341ef..8a30a7de 100644 --- a/test/delombok/resource/before/SetterAccessLevel.java +++ b/test/delombok/resource/before/SetterAccessLevel.java @@ -1,4 +1,4 @@ -class Setter { +class SetterAccessLevel { @lombok.Setter(lombok.AccessLevel.NONE) boolean isNone; @lombok.Setter(lombok.AccessLevel.PRIVATE) @@ -9,4 +9,6 @@ class Setter { boolean isProtected; @lombok.Setter(lombok.AccessLevel.PUBLIC) boolean isPublic; + @lombok.Setter(value=lombok.AccessLevel.PUBLIC) + boolean value; } diff --git a/test/delombok/resource/before/SynchronizedName.java b/test/delombok/resource/before/SynchronizedName.java index 3aaec705..6d9ca5e9 100644 --- a/test/delombok/resource/before/SynchronizedName.java +++ b/test/delombok/resource/before/SynchronizedName.java @@ -15,4 +15,7 @@ class SynchronizedName { @lombok.Synchronized("READ") void test4() { System.out.println("four"); } + @lombok.Synchronized(value="read") void test5() { + System.out.println("five"); + } } -- 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 +++++-- test/delombok/resource/after/DataPlain.java | 76 ++++++++++++++++++++++ test/delombok/resource/before/DataPlain.java | 9 +++ 5 files changed, 131 insertions(+), 21 deletions(-) create mode 100644 test/delombok/resource/after/DataPlain.java create mode 100644 test/delombok/resource/before/DataPlain.java (limited to 'test/delombok/resource/after') 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; } diff --git a/test/delombok/resource/after/DataPlain.java b/test/delombok/resource/after/DataPlain.java new file mode 100644 index 00000000..6b7aeae6 --- /dev/null +++ b/test/delombok/resource/after/DataPlain.java @@ -0,0 +1,76 @@ +class Data1 { + final int x; + String name; + public Data1(final int x) { + this.x = x; + } + public int getX() { + return x; + } + public String getName() { + return name; + } + public void setName(final String name) { + this.name = name; + } + @java.lang.Override + public boolean equals(final java.lang.Object o) { + if (o == this) return true; + if (o == null) return false; + if (o.getClass() != this.getClass()) return false; + final Data1 other = (Data1)o; + if (this.x != other.x) return false; + if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false; + return true; + } + @java.lang.Override + public int hashCode() { + final int PRIME = 31; + int result = 1; + result = result * PRIME + this.x; + result = result * PRIME + (this.name == null ? 0 : this.name.hashCode()); + return result; + } + @java.lang.Override + public java.lang.String toString() { + return "Data1(x=" + x + ", name=" + name + ")"; + } +} +class Data2 { + final int x; + String name; + public Data2(final int x) { + this.x = x; + } + public int getX() { + return x; + } + public String getName() { + return name; + } + public void setName(final String name) { + this.name = name; + } + @java.lang.Override + public boolean equals(final java.lang.Object o) { + if (o == this) return true; + if (o == null) return false; + if (o.getClass() != this.getClass()) return false; + final Data2 other = (Data2)o; + if (this.x != other.x) return false; + if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false; + return true; + } + @java.lang.Override + public int hashCode() { + final int PRIME = 31; + int result = 1; + result = result * PRIME + this.x; + result = result * PRIME + (this.name == null ? 0 : this.name.hashCode()); + return result; + } + @java.lang.Override + public java.lang.String toString() { + return "Data2(x=" + x + ", name=" + name + ")"; + } +} diff --git a/test/delombok/resource/before/DataPlain.java b/test/delombok/resource/before/DataPlain.java new file mode 100644 index 00000000..680ae46f --- /dev/null +++ b/test/delombok/resource/before/DataPlain.java @@ -0,0 +1,9 @@ +import lombok.Data; +@lombok.Data class Data1 { + final int x; + String name; +} +@Data class Data2 { + final int x; + String name; +} \ No newline at end of file -- cgit