mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-14 16:17:34 +00:00
Fixed some issues when using lambda expressions in eclipse using the beta JDK8 support plugin for Kepler.
This commit is contained in:
1 parent
e82a1c052e
commit
c476109671
2 files changed
+28
-3
No files matched your search
@@ -64,5 +64,9 @@ public class HandleVal extends EclipseASTAdapter {
|
||||
localNode.addError("'val' is not allowed in old-style for loops");
|
||||
return;
|
||||
}
|
||||
|
||||
if (local.initialization != null && local.initialization.getClass().getName().equals("org.eclipse.jdt.internal.compiler.ast.LambdaExpression")) {
|
||||
localNode.addError("'val' is not allowed with lambda expressions.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,12 +53,20 @@ public class PatchVal {
|
||||
|
||||
public static TypeBinding skipResolveInitializerIfAlreadyCalled(Expression expr, BlockScope scope) {
|
||||
if (expr.resolvedType != null) return expr.resolvedType;
|
||||
return expr.resolveType(scope);
|
||||
try {
|
||||
return expr.resolveType(scope);
|
||||
} catch (NullPointerException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static TypeBinding skipResolveInitializerIfAlreadyCalled2(Expression expr, BlockScope scope, LocalDeclaration decl) {
|
||||
if (decl != null && LocalDeclaration.class.equals(decl.getClass()) && expr.resolvedType != null) return expr.resolvedType;
|
||||
return expr.resolveType(scope);
|
||||
try {
|
||||
return expr.resolveType(scope);
|
||||
} catch (NullPointerException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean matches(String key, char[] array) {
|
||||
@@ -143,7 +151,20 @@ public class PatchVal {
|
||||
TypeReference replacement = null;
|
||||
|
||||
if (init != null) {
|
||||
TypeBinding resolved = decomponent ? getForEachComponentType(init, scope) : init.resolveType(scope);
|
||||
if (init.getClass().getName().equals("org.eclipse.jdt.internal.compiler.ast.LambdaExpression")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
TypeBinding resolved = null;
|
||||
try {
|
||||
resolved = decomponent ? getForEachComponentType(init, scope) : init.resolveType(scope);
|
||||
} catch (NullPointerException e) {
|
||||
// This definitely occurs if as part of resolving the initializer expression, a
|
||||
// lambda expression in it must also be resolved (such as when lambdas are part of
|
||||
// a ternary expression). This can't result in a viable 'val' matching, so, we
|
||||
// just go with 'Object' and let the IDE print the appropriate errors.
|
||||
resolved = null;
|
||||
}
|
||||
if (resolved != null) {
|
||||
replacement = makeType(resolved, local.type, false);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user