aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/lombok/eclipse/handlers/HandleVal.java2
-rw-r--r--src/core/lombok/experimental/var.java (renamed from src/core/lombok/var.java)2
-rw-r--r--src/core/lombok/javac/handlers/HandleVal.java6
-rw-r--r--src/eclipseAgent/lombok/eclipse/agent/PatchVal.java60
-rw-r--r--src/eclipseAgent/lombok/eclipse/agent/PatchValEclipse.java25
-rw-r--r--test/transform/resource/after-delombok/ValNullInit.java5
-rw-r--r--test/transform/resource/after-delombok/VarNullInit.java5
-rw-r--r--test/transform/resource/after-ecj/ValNullInit.java10
-rw-r--r--test/transform/resource/after-ecj/VarComplex.java2
-rw-r--r--test/transform/resource/after-ecj/VarInFor.java2
-rw-r--r--test/transform/resource/after-ecj/VarInForOld.java2
-rw-r--r--test/transform/resource/after-ecj/VarModifier.java2
-rw-r--r--test/transform/resource/after-ecj/VarNullInit.java10
-rw-r--r--test/transform/resource/before/ValNullInit.java7
-rw-r--r--test/transform/resource/before/VarComplex.java2
-rw-r--r--test/transform/resource/before/VarInFor.java2
-rw-r--r--test/transform/resource/before/VarInForOld.java2
-rw-r--r--test/transform/resource/before/VarModifier.java2
-rw-r--r--test/transform/resource/before/VarNullInit.java7
19 files changed, 105 insertions, 50 deletions
diff --git a/src/core/lombok/eclipse/handlers/HandleVal.java b/src/core/lombok/eclipse/handlers/HandleVal.java
index 1f54bfac..0a136d0b 100644
--- a/src/core/lombok/eclipse/handlers/HandleVal.java
+++ b/src/core/lombok/eclipse/handlers/HandleVal.java
@@ -32,7 +32,7 @@ import lombok.eclipse.EclipseASTAdapter;
import lombok.eclipse.EclipseASTVisitor;
import lombok.eclipse.EclipseNode;
-import lombok.var;
+import lombok.experimental.var;
import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
import org.eclipse.jdt.internal.compiler.ast.ForStatement;
import org.eclipse.jdt.internal.compiler.ast.ForeachStatement;
diff --git a/src/core/lombok/var.java b/src/core/lombok/experimental/var.java
index 397f2760..d8de8b19 100644
--- a/src/core/lombok/var.java
+++ b/src/core/lombok/experimental/var.java
@@ -19,7 +19,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-package lombok;
+package lombok.experimental;
/**
* like val but not final
diff --git a/src/core/lombok/javac/handlers/HandleVal.java b/src/core/lombok/javac/handlers/HandleVal.java
index f4c816d6..5b90ff62 100644
--- a/src/core/lombok/javac/handlers/HandleVal.java
+++ b/src/core/lombok/javac/handlers/HandleVal.java
@@ -31,7 +31,7 @@ import lombok.ConfigurationKeys;
import lombok.core.HandlerPriority;
import lombok.javac.*;
import lombok.val;
-import lombok.var;
+import lombok.experimental.var;
import org.mangosdk.spi.ProviderFor;
import static lombok.core.handlers.HandlerUtil.handleFlagUsage;
@@ -88,8 +88,8 @@ public class HandleVal extends JavacASTAdapter {
}
if (localNode.shouldDeleteLombokAnnotations()) {
- JavacHandlerUtil.deleteImportFromCompilationUnit(localNode, "lombok.val");
- JavacHandlerUtil.deleteImportFromCompilationUnit(localNode, "lombok.var");
+ JavacHandlerUtil.deleteImportFromCompilationUnit(localNode, val.class.getName());
+ JavacHandlerUtil.deleteImportFromCompilationUnit(localNode, var.class.getName());
}
if (isVal) local.mods.flags |= Flags.FINAL;
diff --git a/src/eclipseAgent/lombok/eclipse/agent/PatchVal.java b/src/eclipseAgent/lombok/eclipse/agent/PatchVal.java
index 4a43c873..43e93bbe 100644
--- a/src/eclipseAgent/lombok/eclipse/agent/PatchVal.java
+++ b/src/eclipseAgent/lombok/eclipse/agent/PatchVal.java
@@ -21,22 +21,9 @@
*/
package lombok.eclipse.agent;
-import org.eclipse.jdt.internal.compiler.ast.Annotation;
-import org.eclipse.jdt.internal.compiler.ast.Expression;
-import org.eclipse.jdt.internal.compiler.ast.ForeachStatement;
-import org.eclipse.jdt.internal.compiler.ast.LocalDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference;
-import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference;
-import org.eclipse.jdt.internal.compiler.ast.TypeReference;
+import org.eclipse.jdt.internal.compiler.ast.*;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
-import org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
-import org.eclipse.jdt.internal.compiler.lookup.Binding;
-import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
-import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
-import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
-import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
-import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
-import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
+import org.eclipse.jdt.internal.compiler.lookup.*;
import java.lang.reflect.Field;
@@ -85,15 +72,21 @@ public class PatchVal {
}
public static boolean couldBe(String key, TypeReference ref) {
+ String[] keyParts = key.split("\\.");
if (ref instanceof SingleTypeReference) {
char[] token = ((SingleTypeReference)ref).token;
- return matches(key, token);
+ return matches(keyParts[keyParts.length - 1], token);
}
if (ref instanceof QualifiedTypeReference) {
char[][] tokens = ((QualifiedTypeReference)ref).tokens;
- if (tokens == null || tokens.length != 2) return false;
- return matches("lombok", tokens[0]) && matches(key, tokens[1]);
+ if (keyParts.length != tokens.length) return false;
+ for(int i = 0; i < tokens.length; ++i) {
+ String part = keyParts[i];
+ char[] token = tokens[i];
+ if (!matches(part, token)) return false;
+ }
+ return true;
}
return false;
@@ -105,10 +98,17 @@ public class PatchVal {
TypeBinding resolvedType = ref.resolvedType;
if (resolvedType == null) resolvedType = ref.resolveType(scope, false);
if (resolvedType == null) return false;
-
+
char[] pkg = resolvedType.qualifiedPackageName();
char[] nm = resolvedType.qualifiedSourceName();
- return matches("lombok", pkg) && matches(key, nm);
+ int pkgFullLength = pkg.length > 0 ? pkg.length + 1: 0;
+ char[] fullName = new char[pkgFullLength + nm.length];
+ if(pkg.length > 0) {
+ System.arraycopy(pkg, 0, fullName, 0, pkg.length);
+ fullName[pkg.length] = '.';
+ }
+ System.arraycopy(nm, 0, fullName, pkgFullLength, nm.length);
+ return matches(key, fullName);
}
public static final class Reflection {
@@ -132,8 +132,8 @@ public class PatchVal {
if (local == null || !LocalDeclaration.class.equals(local.getClass())) return false;
boolean decomponent = false;
- boolean val = is(local.type, scope, "val");
- boolean var = is(local.type, scope, "var");
+ boolean val = isVal(local, scope);
+ boolean var = isVar(local, scope);
if (!(val || var)) return false;
StackTraceElement[] st = new Throwable().getStackTrace();
@@ -198,11 +198,19 @@ public class PatchVal {
return false;
}
+ private static boolean isVar(LocalDeclaration local, BlockScope scope) {
+ return is(local.type, scope, "lombok.experimental.var");
+ }
+
+ private static boolean isVal(LocalDeclaration local, BlockScope scope) {
+ return is(local.type, scope, "lombok.val");
+ }
+
public static boolean handleValForForEach(ForeachStatement forEach, BlockScope scope) {
if (forEach.elementVariable == null) return false;
-
- boolean val = is(forEach.elementVariable.type, scope, "val");
- boolean var = is(forEach.elementVariable.type, scope, "var");
+
+ boolean val = isVal(forEach.elementVariable, scope);
+ boolean var = isVar(forEach.elementVariable, scope);
if (!(val || var)) return false;
TypeBinding component = getForEachComponentType(forEach.collection, scope);
@@ -216,7 +224,7 @@ public class PatchVal {
return false;
}
-
+
private static Annotation[] addValAnnotation(Annotation[] originals, TypeReference originalRef, BlockScope scope) {
Annotation[] newAnn;
if (originals != null) {
diff --git a/src/eclipseAgent/lombok/eclipse/agent/PatchValEclipse.java b/src/eclipseAgent/lombok/eclipse/agent/PatchValEclipse.java
index ec1e8309..d0c29ac8 100644
--- a/src/eclipseAgent/lombok/eclipse/agent/PatchValEclipse.java
+++ b/src/eclipseAgent/lombok/eclipse/agent/PatchValEclipse.java
@@ -41,12 +41,7 @@ import org.eclipse.jdt.core.dom.QualifiedName;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
-import org.eclipse.jdt.internal.compiler.ast.ASTNode;
-import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.Annotation;
-import org.eclipse.jdt.internal.compiler.ast.ForeachStatement;
-import org.eclipse.jdt.internal.compiler.ast.LocalDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference;
+import org.eclipse.jdt.internal.compiler.ast.*;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.internal.compiler.parser.Parser;
@@ -65,8 +60,8 @@ public class PatchValEclipse {
ForeachStatement foreachDecl = (ForeachStatement) astStack[astPtr];
ASTNode init = foreachDecl.collection;
if (init == null) return;
- boolean val = PatchVal.couldBe("val", foreachDecl.elementVariable.type);
- boolean var = PatchVal.couldBe("var", foreachDecl.elementVariable.type);
+ boolean val = couldBeVal(foreachDecl.elementVariable.type);
+ boolean var = couldBeVar(foreachDecl.elementVariable.type);
if (foreachDecl.elementVariable == null || !(val || var)) return;
try {
@@ -90,8 +85,8 @@ public class PatchValEclipse {
if (!(variableDecl instanceof LocalDeclaration)) return;
ASTNode init = variableDecl.initialization;
if (init == null) return;
- boolean val = PatchVal.couldBe("val", variableDecl.type);
- boolean var = PatchVal.couldBe("var", variableDecl.type);
+ boolean val = couldBeVal(variableDecl.type);
+ boolean var = couldBeVar(variableDecl.type);
if (!(val || var)) return;
try {
@@ -101,6 +96,10 @@ public class PatchValEclipse {
}
}
+ private static boolean couldBeVar(TypeReference type) {
+ return PatchVal.couldBe("lombok.experimental.var", type);
+ }
+
public static void addFinalAndValAnnotationToSingleVariableDeclaration(Object converter, SingleVariableDeclaration out, LocalDeclaration in) {
@SuppressWarnings("unchecked") List<IExtendedModifier> modifiers = out.modifiers();
addFinalAndValAnnotationToModifierList(converter, modifiers, out.getAST(), in);
@@ -119,7 +118,7 @@ public class PatchValEclipse {
Annotation valAnnotation = null;
for (Annotation ann : in.annotations) {
- if (PatchVal.couldBe("val", ann.type)) {
+ if (couldBeVal(ann.type)) {
found = true;
valAnnotation = ann;
break;
@@ -171,6 +170,10 @@ public class PatchValEclipse {
}
}
+ private static boolean couldBeVal(TypeReference type) {
+ return PatchVal.couldBe("lombok.val", type);
+ }
+
public static Modifier createModifier(AST ast, ModifierKeyword keyword, int start, int end) {
Modifier modifier = null;
try {
diff --git a/test/transform/resource/after-delombok/ValNullInit.java b/test/transform/resource/after-delombok/ValNullInit.java
new file mode 100644
index 00000000..f0834a63
--- /dev/null
+++ b/test/transform/resource/after-delombok/ValNullInit.java
@@ -0,0 +1,5 @@
+class ValNullInit {
+ void method() {
+ final java.lang.Object x = null;
+ }
+} \ No newline at end of file
diff --git a/test/transform/resource/after-delombok/VarNullInit.java b/test/transform/resource/after-delombok/VarNullInit.java
new file mode 100644
index 00000000..f0087765
--- /dev/null
+++ b/test/transform/resource/after-delombok/VarNullInit.java
@@ -0,0 +1,5 @@
+class VarNullInit {
+ void method() {
+ java.lang.Object x = null;
+ }
+} \ No newline at end of file
diff --git a/test/transform/resource/after-ecj/ValNullInit.java b/test/transform/resource/after-ecj/ValNullInit.java
new file mode 100644
index 00000000..bd89c023
--- /dev/null
+++ b/test/transform/resource/after-ecj/ValNullInit.java
@@ -0,0 +1,10 @@
+import lombok.val;
+
+class ValNullInit {
+ ValNullInit() {
+ super();
+ }
+ void method() {
+ final @val java.lang.Object x = null;
+ }
+} \ No newline at end of file
diff --git a/test/transform/resource/after-ecj/VarComplex.java b/test/transform/resource/after-ecj/VarComplex.java
index 97a0a177..10c456eb 100644
--- a/test/transform/resource/after-ecj/VarComplex.java
+++ b/test/transform/resource/after-ecj/VarComplex.java
@@ -1,4 +1,4 @@
-import lombok.var;
+import lombok.experimental.var;
public class VarComplex {
private String field = "";
private static final int CONSTANT = 20;
diff --git a/test/transform/resource/after-ecj/VarInFor.java b/test/transform/resource/after-ecj/VarInFor.java
index 1799d9b7..0192aaed 100644
--- a/test/transform/resource/after-ecj/VarInFor.java
+++ b/test/transform/resource/after-ecj/VarInFor.java
@@ -1,4 +1,4 @@
-import lombok.var;
+import lombok.experimental.var;
public class VarInFor {
public VarInFor() {
super();
diff --git a/test/transform/resource/after-ecj/VarInForOld.java b/test/transform/resource/after-ecj/VarInForOld.java
index 065ea94d..98fedf03 100644
--- a/test/transform/resource/after-ecj/VarInForOld.java
+++ b/test/transform/resource/after-ecj/VarInForOld.java
@@ -1,4 +1,4 @@
-import lombok.var;
+import lombok.experimental.var;
public class VarInForOld {
public VarInForOld() {
super();
diff --git a/test/transform/resource/after-ecj/VarModifier.java b/test/transform/resource/after-ecj/VarModifier.java
index 7f26534c..d11142ca 100644
--- a/test/transform/resource/after-ecj/VarModifier.java
+++ b/test/transform/resource/after-ecj/VarModifier.java
@@ -1,4 +1,4 @@
-import lombok.var;
+import lombok.experimental.var;
public class VarModifier {
private String field = "";
public VarModifier() {
diff --git a/test/transform/resource/after-ecj/VarNullInit.java b/test/transform/resource/after-ecj/VarNullInit.java
new file mode 100644
index 00000000..966afdc9
--- /dev/null
+++ b/test/transform/resource/after-ecj/VarNullInit.java
@@ -0,0 +1,10 @@
+import lombok.experimental.var;
+
+class VarNullInit {
+ ValNullInit() {
+ super();
+ }
+ void method() {
+ final @var java.lang.Object x = null;
+ }
+} \ No newline at end of file
diff --git a/test/transform/resource/before/ValNullInit.java b/test/transform/resource/before/ValNullInit.java
new file mode 100644
index 00000000..649bc0cd
--- /dev/null
+++ b/test/transform/resource/before/ValNullInit.java
@@ -0,0 +1,7 @@
+import lombok.val;
+
+class ValNullInit {
+ void method() {
+ val x = null;
+ }
+} \ No newline at end of file
diff --git a/test/transform/resource/before/VarComplex.java b/test/transform/resource/before/VarComplex.java
index c93e177a..a30492ac 100644
--- a/test/transform/resource/before/VarComplex.java
+++ b/test/transform/resource/before/VarComplex.java
@@ -1,4 +1,4 @@
-import lombok.var;
+import lombok.experimental.var;
public class VarComplex {
private String field = "";
diff --git a/test/transform/resource/before/VarInFor.java b/test/transform/resource/before/VarInFor.java
index 7f7bb7a7..ed22edc3 100644
--- a/test/transform/resource/before/VarInFor.java
+++ b/test/transform/resource/before/VarInFor.java
@@ -1,4 +1,4 @@
-import lombok.var;
+import lombok.experimental.var;
public class VarInFor {
public void enhancedFor() {
diff --git a/test/transform/resource/before/VarInForOld.java b/test/transform/resource/before/VarInForOld.java
index 99e83b57..3000f58c 100644
--- a/test/transform/resource/before/VarInForOld.java
+++ b/test/transform/resource/before/VarInForOld.java
@@ -1,4 +1,4 @@
-import lombok.var;
+import lombok.experimental.var;
public class VarInForOld {
public void oldFor() {
diff --git a/test/transform/resource/before/VarModifier.java b/test/transform/resource/before/VarModifier.java
index bb167fd2..5c68caa7 100644
--- a/test/transform/resource/before/VarModifier.java
+++ b/test/transform/resource/before/VarModifier.java
@@ -1,4 +1,4 @@
-import lombok.var;
+import lombok.experimental.var;
public class VarModifier {
private String field = "";
diff --git a/test/transform/resource/before/VarNullInit.java b/test/transform/resource/before/VarNullInit.java
new file mode 100644
index 00000000..14d7b4a3
--- /dev/null
+++ b/test/transform/resource/before/VarNullInit.java
@@ -0,0 +1,7 @@
+import lombok.experimental.var;
+
+class VarNullInit {
+ void method() {
+ var x = null;
+ }
+} \ No newline at end of file