aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/javac/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/lombok/javac/handlers')
-rw-r--r--src/core/lombok/javac/handlers/JavacHandlerUtil.java34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
index 4e9be00b..fdc8a262 100644
--- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java
+++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
@@ -27,6 +27,7 @@ import static lombok.javac.Javac.*;
import static lombok.javac.JavacAugments.JCTree_generatedNode;
import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
@@ -56,6 +57,9 @@ import lombok.javac.JavacTreeMaker;
import com.sun.tools.javac.code.BoundKind;
import com.sun.tools.javac.code.Flags;
+import com.sun.tools.javac.code.Scope;
+import com.sun.tools.javac.code.Symbol;
+import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.parser.Tokens.Comment;
import com.sun.tools.javac.tree.DocCommentTable;
import com.sun.tools.javac.tree.JCTree;
@@ -871,6 +875,32 @@ public class JavacHandlerUtil {
return (field.mods.flags & Flags.ENUM) != 0;
}
+ // jdk9 support, types have changed, names stay the same
+ static class ClassSymbolMembersField {
+ private static final Field membersField;
+ private static final Method removeMethod;
+
+ static {
+ Field f = null;
+ Method m = null;
+ try {
+ f = ClassSymbol.class.getField("members_field");
+ m = f.getType().getMethod("remove", Symbol.class);
+ } catch (Exception e) {}
+ membersField = f;
+ removeMethod = m;
+ }
+
+ static void remove(ClassSymbol from, Symbol toRemove) {
+ if (from == null) return;
+ try {
+ Scope scope = (Scope) membersField.get(from);
+ if (scope == null) return;
+ removeMethod.invoke(scope, toRemove);
+ } catch (Exception e) {}
+ }
+ }
+
/**
* Adds the given new method declaration to the provided type AST Node.
* Can also inject constructors.
@@ -889,9 +919,7 @@ public class JavacHandlerUtil {
JavacNode tossMe = typeNode.getNodeFor(def);
if (tossMe != null) tossMe.up().removeChild(tossMe);
type.defs = addAllButOne(type.defs, idx);
- if (type.sym != null && type.sym.members_field != null) {
- type.sym.members_field.remove(((JCMethodDecl)def).sym);
- }
+ ClassSymbolMembersField.remove(type.sym, ((JCMethodDecl)def).sym);
break;
}
}