mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 22:16:11 +00:00
[i731] javac resolution broken by 1.8.0_20; fixed with some reflection voodoo. -R&R
This commit is contained in:
1 parent
836c6e865e
commit
eba2a515fa
2 files changed
+35
-4
No files matched your search
@@ -2,7 +2,7 @@ Lombok Changelog
|
||||
----------------
|
||||
|
||||
### v1.14.5 "Edgy Guinea Pig"
|
||||
|
||||
* BUGFIX: Usage of `val` would break starting with JDK8 release `1.8.0_20`. [Issue #731](https://code.google.com/p/projectlombok/issues/detail?id=731)
|
||||
* WORK-IN-PROGRESS: A bunch of errors in the error log about 'Path must include project and resource name' seem to be related to slowdowns. This fix removes the errors, but does it remove the slowdowns? [Issue #682](https://code.google.com/p/projectlombok/issues/detail?id=682).
|
||||
This edge release contains some special flags:
|
||||
|
||||
@@ -12,7 +12,7 @@ Lombok Changelog
|
||||
2. `-Dlombok.disableConfig`: Disables the config system (notably including all attempts to look up the location of, and read, `lombok.config` files) entirely.
|
||||
|
||||
Both flags can be used simultaneously. Add either or both of these switches in your `eclipse.ini`, directly under `-javaagent:lombok.jar`.
|
||||
|
||||
|
||||
### v1.14.4 (July 1st, 2014)
|
||||
* BUGFIX: GWT produces errors in handlers on line 1 in any source files that use lombok; this has been fixed. [Issue #699](https://code.google.com/p/projectlombok/issues/detail?id=699)
|
||||
* BUGFIX-IN-PROGRESS: Many pathfinder issues in eclipse (see the bugfix in progress in v1.14.2) have now been fixed. [Issue #682](https://code.google.com/p/projectlombok/issues/detail?id=682)
|
||||
|
||||
@@ -24,11 +24,15 @@ package lombok.javac;
|
||||
import static lombok.javac.Javac.*;
|
||||
import static lombok.javac.JavacTreeMaker.TypeTag.typeTag;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.lang.model.type.TypeKind;
|
||||
|
||||
import lombok.Lombok;
|
||||
|
||||
import com.sun.tools.javac.code.BoundKind;
|
||||
import com.sun.tools.javac.code.Symbol.TypeSymbol;
|
||||
import com.sun.tools.javac.code.Symtab;
|
||||
@@ -179,10 +183,37 @@ public class JavacResolution {
|
||||
}
|
||||
}
|
||||
|
||||
private static class ReflectiveAccess {
|
||||
private static Method UPPER_BOUND;
|
||||
|
||||
static {
|
||||
Method upperBound = null;
|
||||
try {
|
||||
upperBound = Types.class.getMethod("upperBound", Type.class);
|
||||
} catch (Throwable ignore) {}
|
||||
if (upperBound == null) try {
|
||||
upperBound = Types.class.getMethod("wildUpperBound", Type.class);
|
||||
} catch (Throwable ignore) {}
|
||||
|
||||
UPPER_BOUND = upperBound;
|
||||
}
|
||||
|
||||
public static Type Types_upperBound(Types types, Type type) {
|
||||
try {
|
||||
return (Type) UPPER_BOUND.invoke(types, type);
|
||||
} catch (InvocationTargetException e) {
|
||||
throw Lombok.sneakyThrow(e.getCause());
|
||||
} catch (Exception e) {
|
||||
throw Lombok.sneakyThrow(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Type ifTypeIsIterableToComponent(Type type, JavacAST ast) {
|
||||
Types types = Types.instance(ast.getContext());
|
||||
Symtab syms = Symtab.instance(ast.getContext());
|
||||
Type boundType = types.upperBound(type);
|
||||
Type boundType = ReflectiveAccess.Types_upperBound(types, type);
|
||||
// Type boundType = types.upperBound(type);
|
||||
Type elemTypeIfArray = types.elemtype(boundType);
|
||||
if (elemTypeIfArray != null) return elemTypeIfArray;
|
||||
|
||||
@@ -190,7 +221,7 @@ public class JavacResolution {
|
||||
if (base == null) return syms.objectType;
|
||||
|
||||
List<Type> iterableParams = base.allparams();
|
||||
return iterableParams.isEmpty() ? syms.objectType : types.upperBound(iterableParams.head);
|
||||
return iterableParams.isEmpty() ? syms.objectType : ReflectiveAccess.Types_upperBound(types, iterableParams.head);
|
||||
}
|
||||
|
||||
public static JCExpression typeToJCTree(Type type, JavacAST ast, boolean allowVoid) throws TypeNotConvertibleException {
|
||||
|
||||
Reference in new issue
Block a user