aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBulgakov Alexander <buls@yandex.ru>2019-04-26 22:10:34 +0300
committerBulgakov Alexander <buls@yandex.ru>2019-04-28 22:45:43 +0300
commitce0a09177e577c0b4f42379c5cc7ce364f26c905 (patch)
tree497981f2c3668f2afc54ce340972f2fae6859b2a
parent150be0a186d880503cb23d056ea4cf229ebc37e5 (diff)
downloadlombok-ce0a09177e577c0b4f42379c5cc7ce364f26c905.tar.gz
lombok-ce0a09177e577c0b4f42379c5cc7ce364f26c905.tar.bz2
lombok-ce0a09177e577c0b4f42379c5cc7ce364f26c905.zip
#1976. A handlers' order has been changed. The javac's HandleDelegate generates code before the HandleVal.
-rw-r--r--src/core/lombok/javac/handlers/HandleDelegate.java3
-rw-r--r--src/core/lombok/javac/handlers/HandleVal.java3
-rw-r--r--test/transform/resource/after-delombok/ValDelegateMethodReference.java65
-rw-r--r--test/transform/resource/after-ecj/ValDelegateMethodReference.java58
-rw-r--r--test/transform/resource/before/ValDelegateMethodReference.java35
5 files changed, 162 insertions, 2 deletions
diff --git a/src/core/lombok/javac/handlers/HandleDelegate.java b/src/core/lombok/javac/handlers/HandleDelegate.java
index baff7912..367b2cff 100644
--- a/src/core/lombok/javac/handlers/HandleDelegate.java
+++ b/src/core/lombok/javac/handlers/HandleDelegate.java
@@ -82,7 +82,7 @@ import lombok.javac.JavacTreeMaker;
import lombok.javac.ResolutionResetNeeded;
@ProviderFor(JavacAnnotationHandler.class)
-@HandlerPriority(65536) //2^16; to make sure that we also delegate generated methods.
+@HandlerPriority(HandleDelegate.HANDLE_DELEGATE_PRIORITY) //2^16; to make sure that we also delegate generated methods.
@ResolutionResetNeeded
public class HandleDelegate extends JavacAnnotationHandler<Delegate> {
@@ -102,6 +102,7 @@ public class HandleDelegate extends JavacAnnotationHandler<Delegate> {
private static final String LEGALITY_OF_DELEGATE = "@Delegate is legal only on instance fields or no-argument instance methods.";
private static final String RECURSION_NOT_ALLOWED = "@Delegate does not support recursion (delegating to a type that itself has @Delegate members). Member \"%s\" is @Delegate in type \"%s\"";
+ public static final int HANDLE_DELEGATE_PRIORITY = 65536;
@Override public void handle(AnnotationValues<Delegate> annotation, JCAnnotation ast, JavacNode annotationNode) {
diff --git a/src/core/lombok/javac/handlers/HandleVal.java b/src/core/lombok/javac/handlers/HandleVal.java
index 14130bc4..323bb337 100644
--- a/src/core/lombok/javac/handlers/HandleVal.java
+++ b/src/core/lombok/javac/handlers/HandleVal.java
@@ -22,6 +22,7 @@
package lombok.javac.handlers;
import static lombok.core.handlers.HandlerUtil.handleFlagUsage;
+import static lombok.javac.handlers.HandleDelegate.HANDLE_DELEGATE_PRIORITY;
import static lombok.javac.handlers.JavacHandlerUtil.*;
import lombok.ConfigurationKeys;
import lombok.val;
@@ -49,7 +50,7 @@ import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.util.List;
@ProviderFor(JavacASTVisitor.class)
-@HandlerPriority(65536) // 2^16; resolution needs to work, so if the RHS expression is i.e. a call to a generated getter, we have to run after that getter has been generated.
+@HandlerPriority(HANDLE_DELEGATE_PRIORITY + 100) // 2^16; resolution needs to work, so if the RHS expression is i.e. a call to a generated getter, we have to run after that getter has been generated.
@ResolutionResetNeeded
public class HandleVal extends JavacASTAdapter {
diff --git a/test/transform/resource/after-delombok/ValDelegateMethodReference.java b/test/transform/resource/after-delombok/ValDelegateMethodReference.java
new file mode 100644
index 00000000..186e2aaa
--- /dev/null
+++ b/test/transform/resource/after-delombok/ValDelegateMethodReference.java
@@ -0,0 +1,65 @@
+import java.util.function.Function;
+
+public class ValDelegateMethodReference {
+ public void config() {
+ final Column<Entity, java.lang.String> column = createColumn(Entity::getValue);
+ }
+
+ private <V> Column<Entity, V> createColumn(Function<Entity, V> func) {
+ return new Column<>(func);
+ }
+}
+
+class Column<T, V> {
+ public Column(Function<T, V> vp) {
+ }
+}
+
+class Entity {
+ private MyDelegate innerDelegate;
+
+ @java.lang.SuppressWarnings("all")
+ public java.lang.String getValue() {
+ return this.innerDelegate.getValue();
+ }
+
+ @java.lang.SuppressWarnings("all")
+ public java.lang.Boolean getABoolean() {
+ return this.innerDelegate.getABoolean();
+ }
+
+ @java.lang.SuppressWarnings("all")
+ public void setValue(final java.lang.String value) {
+ this.innerDelegate.setValue(value);
+ }
+
+ @java.lang.SuppressWarnings("all")
+ public void setABoolean(final java.lang.Boolean aBoolean) {
+ this.innerDelegate.setABoolean(aBoolean);
+ }
+}
+
+class MyDelegate {
+ private String value;
+ private Boolean aBoolean;
+
+ @java.lang.SuppressWarnings("all")
+ public String getValue() {
+ return this.value;
+ }
+
+ @java.lang.SuppressWarnings("all")
+ public Boolean getABoolean() {
+ return this.aBoolean;
+ }
+
+ @java.lang.SuppressWarnings("all")
+ public void setValue(final String value) {
+ this.value = value;
+ }
+
+ @java.lang.SuppressWarnings("all")
+ public void setABoolean(final Boolean aBoolean) {
+ this.aBoolean = aBoolean;
+ }
+} \ No newline at end of file
diff --git a/test/transform/resource/after-ecj/ValDelegateMethodReference.java b/test/transform/resource/after-ecj/ValDelegateMethodReference.java
new file mode 100644
index 00000000..cfd0dab2
--- /dev/null
+++ b/test/transform/resource/after-ecj/ValDelegateMethodReference.java
@@ -0,0 +1,58 @@
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Delegate;
+import lombok.val;
+import java.util.function.Function;
+public class ValDelegateMethodReference {
+ public ValDelegateMethodReference() {
+ super();
+ }
+ public void config() {
+ final @val Column<Entity, java.lang.String> column = createColumn(Entity::getValue);
+ }
+ private <V>Column<Entity, V> createColumn(Function<Entity, V> func) {
+ return new Column<>(func);
+ }
+}
+class Column<T, V> {
+ public Column(Function<T, V> vp) {
+ super();
+ }
+}
+class Entity {
+ private @Delegate MyDelegate innerDelegate;
+ Entity() {
+ super();
+ }
+ public @java.lang.SuppressWarnings("all") java.lang.Boolean getABoolean() {
+ return this.innerDelegate.getABoolean();
+ }
+ public @java.lang.SuppressWarnings("all") java.lang.String getValue() {
+ return this.innerDelegate.getValue();
+ }
+ public @java.lang.SuppressWarnings("all") void setABoolean(final java.lang.Boolean aBoolean) {
+ this.innerDelegate.setABoolean(aBoolean);
+ }
+ public @java.lang.SuppressWarnings("all") void setValue(final java.lang.String value) {
+ this.innerDelegate.setValue(value);
+ }
+}
+@Getter @Setter class MyDelegate {
+ private String value;
+ private Boolean aBoolean;
+ MyDelegate() {
+ super();
+ }
+ public @java.lang.SuppressWarnings("all") String getValue() {
+ return this.value;
+ }
+ public @java.lang.SuppressWarnings("all") Boolean getABoolean() {
+ return this.aBoolean;
+ }
+ public @java.lang.SuppressWarnings("all") void setValue(final String value) {
+ this.value = value;
+ }
+ public @java.lang.SuppressWarnings("all") void setABoolean(final Boolean aBoolean) {
+ this.aBoolean = aBoolean;
+ }
+}
diff --git a/test/transform/resource/before/ValDelegateMethodReference.java b/test/transform/resource/before/ValDelegateMethodReference.java
new file mode 100644
index 00000000..7adc402a
--- /dev/null
+++ b/test/transform/resource/before/ValDelegateMethodReference.java
@@ -0,0 +1,35 @@
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Delegate;
+import lombok.val;
+
+import java.util.function.Function;
+
+public class ValDelegateMethodReference {
+
+ public void config() {
+ val column = createColumn(Entity::getValue);
+ }
+
+ private <V> Column<Entity, V> createColumn(Function<Entity, V> func) {
+ return new Column<>(func);
+ }
+
+}
+
+class Column<T, V> {
+ public Column(Function<T, V> vp) {}
+}
+
+class Entity {
+ @Delegate
+ private MyDelegate innerDelegate;
+}
+
+@Getter
+@Setter
+class MyDelegate {
+ private String value;
+ private Boolean aBoolean;
+} \ No newline at end of file