more work on JDK8 support: val on generified lub types now works a little better.

This commit is contained in:
Reinier Zwitserloot committed 2014-05-06 18:45:09 +02:00
1 parent 5c3adb7737
commit d330649b15
2 files changed
+26 -3

No files matched your search

@@ -21,11 +21,28 @@
*/
package lombok.javac;
import com.sun.tools.javac.main.OptionName;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import lombok.Lombok;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.Options;
public class Javac6BasedLombokOptions extends LombokOptions {
private static final Method optionName_valueOf;
private static final Method options_put;
static {
try {
Class<?> optionNameClass = Class.forName("com.sun.tools.javac.main.OptionName");
optionName_valueOf = optionNameClass.getMethod("valueOf", String.class);
options_put = Class.forName("com.sun.tools.javac.util.Options").getMethod("put", optionNameClass, String.class);
} catch (Exception e) {
throw new IllegalArgumentException("Can't initialize Javac6-based lombok options due to reflection issue.", e);
}
}
public static Javac6BasedLombokOptions replaceWithDelombokOptions(Context context) {
Options options = Options.instance(context);
context.put(optionsKey, (Options)null);
@@ -39,6 +56,12 @@ public class Javac6BasedLombokOptions extends LombokOptions {
}
@Override public void putJavacOption(String optionName, String value) {
put(OptionName.valueOf(optionName), value);
try {
options_put.invoke(this, optionName_valueOf.invoke(null, optionName), value);
} catch (IllegalAccessException e) {
throw new IllegalArgumentException("Can't initialize Javac6-based lombok options due to reflection issue.", e);
} catch (InvocationTargetException e) {
throw Lombok.sneakyThrow(e.getCause());
}
}
}
@@ -91,7 +91,7 @@ public class HandleVal extends JavacASTAdapter {
local.mods.annotations = local.mods.annotations == null ? List.of(valAnnotation) : local.mods.annotations.append(valAnnotation);
}
local.vartype = JavacResolution.createJavaLangObject(localNode.getAst());
local.vartype = localNode.getAst().getTreeMaker().Ident(localNode.getAst().toName("___Lombok_VAL_Attrib__"));
Type type;
try {