aboutsummaryrefslogtreecommitdiff
path: root/src/lombok/javac/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'src/lombok/javac/handlers')
-rw-r--r--src/lombok/javac/handlers/HandleData.java4
-rw-r--r--src/lombok/javac/handlers/HandleEqualsAndHashCode.java2
-rw-r--r--src/lombok/javac/handlers/HandleGetter.java2
-rw-r--r--src/lombok/javac/handlers/HandleSetter.java2
-rw-r--r--src/lombok/javac/handlers/HandleSneakyThrows.java2
-rw-r--r--src/lombok/javac/handlers/HandleSynchronized.java2
-rw-r--r--src/lombok/javac/handlers/HandleToString.java2
-rw-r--r--src/lombok/javac/handlers/JavacHandlerUtil.java (renamed from src/lombok/javac/handlers/PKG.java)76
8 files changed, 56 insertions, 36 deletions
diff --git a/src/lombok/javac/handlers/HandleData.java b/src/lombok/javac/handlers/HandleData.java
index 8d80808f..f1b395e1 100644
--- a/src/lombok/javac/handlers/HandleData.java
+++ b/src/lombok/javac/handlers/HandleData.java
@@ -21,7 +21,7 @@
*/
package lombok.javac.handlers;
-import static lombok.javac.handlers.PKG.*;
+import static lombok.javac.handlers.JavacHandlerUtil.*;
import java.lang.reflect.Modifier;
@@ -31,7 +31,7 @@ import lombok.core.TransformationsUtil;
import lombok.core.AST.Kind;
import lombok.javac.JavacAnnotationHandler;
import lombok.javac.JavacNode;
-import lombok.javac.handlers.PKG.MemberExistsResult;
+import lombok.javac.handlers.JavacHandlerUtil.MemberExistsResult;
import org.mangosdk.spi.ProviderFor;
diff --git a/src/lombok/javac/handlers/HandleEqualsAndHashCode.java b/src/lombok/javac/handlers/HandleEqualsAndHashCode.java
index f1eae2a7..61a4ef63 100644
--- a/src/lombok/javac/handlers/HandleEqualsAndHashCode.java
+++ b/src/lombok/javac/handlers/HandleEqualsAndHashCode.java
@@ -21,7 +21,7 @@
*/
package lombok.javac.handlers;
-import static lombok.javac.handlers.PKG.*;
+import static lombok.javac.handlers.JavacHandlerUtil.*;
import lombok.EqualsAndHashCode;
import lombok.core.AnnotationValues;
import lombok.core.AST.Kind;
diff --git a/src/lombok/javac/handlers/HandleGetter.java b/src/lombok/javac/handlers/HandleGetter.java
index 064454d9..e60e426d 100644
--- a/src/lombok/javac/handlers/HandleGetter.java
+++ b/src/lombok/javac/handlers/HandleGetter.java
@@ -21,7 +21,7 @@
*/
package lombok.javac.handlers;
-import static lombok.javac.handlers.PKG.*;
+import static lombok.javac.handlers.JavacHandlerUtil.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.core.AnnotationValues;
diff --git a/src/lombok/javac/handlers/HandleSetter.java b/src/lombok/javac/handlers/HandleSetter.java
index 33bc34a9..84032e9c 100644
--- a/src/lombok/javac/handlers/HandleSetter.java
+++ b/src/lombok/javac/handlers/HandleSetter.java
@@ -21,7 +21,7 @@
*/
package lombok.javac.handlers;
-import static lombok.javac.handlers.PKG.*;
+import static lombok.javac.handlers.JavacHandlerUtil.*;
import lombok.AccessLevel;
import lombok.Setter;
import lombok.core.AnnotationValues;
diff --git a/src/lombok/javac/handlers/HandleSneakyThrows.java b/src/lombok/javac/handlers/HandleSneakyThrows.java
index 167737f9..e7879dd1 100644
--- a/src/lombok/javac/handlers/HandleSneakyThrows.java
+++ b/src/lombok/javac/handlers/HandleSneakyThrows.java
@@ -21,7 +21,7 @@
*/
package lombok.javac.handlers;
-import static lombok.javac.handlers.PKG.chainDots;
+import static lombok.javac.handlers.JavacHandlerUtil.chainDots;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/src/lombok/javac/handlers/HandleSynchronized.java b/src/lombok/javac/handlers/HandleSynchronized.java
index 4573deda..b607ea72 100644
--- a/src/lombok/javac/handlers/HandleSynchronized.java
+++ b/src/lombok/javac/handlers/HandleSynchronized.java
@@ -21,7 +21,7 @@
*/
package lombok.javac.handlers;
-import static lombok.javac.handlers.PKG.*;
+import static lombok.javac.handlers.JavacHandlerUtil.*;
import org.mangosdk.spi.ProviderFor;
diff --git a/src/lombok/javac/handlers/HandleToString.java b/src/lombok/javac/handlers/HandleToString.java
index d1c98525..f7251ab8 100644
--- a/src/lombok/javac/handlers/HandleToString.java
+++ b/src/lombok/javac/handlers/HandleToString.java
@@ -21,7 +21,7 @@
*/
package lombok.javac.handlers;
-import static lombok.javac.handlers.PKG.*;
+import static lombok.javac.handlers.JavacHandlerUtil.*;
import lombok.ToString;
import lombok.core.AnnotationValues;
diff --git a/src/lombok/javac/handlers/PKG.java b/src/lombok/javac/handlers/JavacHandlerUtil.java
index d6fd1c61..4a0a6031 100644
--- a/src/lombok/javac/handlers/PKG.java
+++ b/src/lombok/javac/handlers/JavacHandlerUtil.java
@@ -21,7 +21,6 @@
*/
package lombok.javac.handlers;
-import java.lang.reflect.Modifier;
import java.util.regex.Pattern;
import lombok.AccessLevel;
@@ -43,19 +42,26 @@ import com.sun.tools.javac.util.List;
import com.sun.tools.javac.util.Name;
/**
- * Container for static utility methods relevant to this package.
+ * Container for static utility methods useful to handlers written for javac.
*/
-class PKG {
- private PKG() {
+public class JavacHandlerUtil {
+ private JavacHandlerUtil() {
//Prevent instantiation
}
- static boolean isPrimitive(JCExpression ref) {
+ /**
+ * Checks if the given expression (that really ought to refer to a type expression) represents a primitive type.
+ */
+ public static boolean isPrimitive(JCExpression ref) {
String typeName = ref.toString();
return TransformationsUtil.PRIMITIVE_TYPE_NAME_PATTERN.matcher(typeName).matches();
}
- static java.util.List<String> toAllGetterNames(JCVariableDecl field) {
+ /**
+ * Translates the given field into all possible getter names.
+ * Convenient wrapper around {@link TransformationsUtil#toAllGetterNames(String, boolean)}.
+ */
+ public static java.util.List<String> toAllGetterNames(JCVariableDecl field) {
CharSequence fieldName = field.name;
boolean isBoolean = field.vartype.toString().equals("boolean");
@@ -65,8 +71,10 @@ class PKG {
/**
* @return the likely getter name for the stated field. (e.g. private boolean foo; to isFoo).
+ *
+ * Convenient wrapper around {@link TransformationsUtil#toGetterName(String, boolean)}.
*/
- static String toGetterName(JCVariableDecl field) {
+ public static String toGetterName(JCVariableDecl field) {
CharSequence fieldName = field.name;
boolean isBoolean = field.vartype.toString().equals("boolean");
@@ -76,15 +84,17 @@ class PKG {
/**
* @return the likely setter name for the stated field. (e.g. private boolean foo; to setFoo).
+ *
+ * Convenient wrapper around {@link TransformationsUtil.toSetterName(String)}.
*/
- static String toSetterName(JCVariableDecl field) {
+ public static String toSetterName(JCVariableDecl field) {
CharSequence fieldName = field.name;
return TransformationsUtil.toSetterName(fieldName);
}
/** Serves as return value for the methods that check for the existence of fields and methods. */
- enum MemberExistsResult {
+ public enum MemberExistsResult {
NOT_EXISTS, EXISTS_BY_USER, EXISTS_BY_LOMBOK;
}
@@ -92,9 +102,9 @@ class PKG {
* Checks if there is a field with the provided name.
*
* @param fieldName the field name to check for.
- * @param node Any node that represents the Type (JCClassDecl) to check for, or any child node thereof.
+ * @param node Any node that represents the Type (JCClassDecl) to look in, or any child node thereof.
*/
- static MemberExistsResult fieldExists(String fieldName, JavacNode node) {
+ public static MemberExistsResult fieldExists(String fieldName, JavacNode node) {
while (node != null && !(node.get() instanceof JCClassDecl)) {
node = node.up();
}
@@ -119,9 +129,9 @@ class PKG {
* the first method decides if EXISTS_BY_USER or EXISTS_BY_LOMBOK is returned.
*
* @param methodName the method name to check for.
- * @param node Any node that represents the Type (JCClassDecl) to check for, or any child node thereof.
+ * @param node Any node that represents the Type (JCClassDecl) to look in, or any child node thereof.
*/
- static MemberExistsResult methodExists(String methodName, JavacNode node) {
+ public static MemberExistsResult methodExists(String methodName, JavacNode node) {
while (node != null && !(node.get() instanceof JCClassDecl)) {
node = node.up();
}
@@ -145,9 +155,9 @@ class PKG {
* Checks if there is a (non-default) constructor. In case of multiple constructors (overloading), only
* the first constructor decides if EXISTS_BY_USER or EXISTS_BY_LOMBOK is returned.
*
- * @param node Any node that represents the Type (JCClassDecl) to check for, or any child node thereof.
+ * @param node Any node that represents the Type (JCClassDecl) to look in, or any child node thereof.
*/
- static MemberExistsResult constructorExists(JavacNode node) {
+ public static MemberExistsResult constructorExists(JavacNode node) {
while (node != null && !(node.get() instanceof JCClassDecl)) {
node = node.up();
}
@@ -170,21 +180,19 @@ class PKG {
/**
* Turns an {@code AccessLevel} instance into the flag bit used by javac.
- *
- * @see java.lang.Modifier
*/
- static int toJavacModifier(AccessLevel accessLevel) {
+ public static int toJavacModifier(AccessLevel accessLevel) {
switch (accessLevel) {
case MODULE:
case PACKAGE:
return 0;
default:
case PUBLIC:
- return Modifier.PUBLIC;
+ return Flags.PUBLIC;
case PRIVATE:
- return Modifier.PRIVATE;
+ return Flags.PRIVATE;
case PROTECTED:
- return Modifier.PROTECTED;
+ return Flags.PROTECTED;
}
}
@@ -193,7 +201,7 @@ class PKG {
*
* Also takes care of updating the JavacAST.
*/
- static void injectField(JavacNode typeNode, JCVariableDecl field) {
+ public static void injectField(JavacNode typeNode, JCVariableDecl field) {
JCClassDecl type = (JCClassDecl) typeNode.get();
type.defs = type.defs.append(field);
@@ -207,7 +215,7 @@ class PKG {
*
* Also takes care of updating the JavacAST.
*/
- static void injectMethod(JavacNode typeNode, JCMethodDecl method) {
+ public static void injectMethod(JavacNode typeNode, JCMethodDecl method) {
JCClassDecl type = (JCClassDecl) typeNode.get();
if (method.getName().contentEquals("<init>")) {
@@ -250,7 +258,7 @@ class PKG {
* @see com.sun.tools.javac.tree.JCTree.JCIdent
* @see com.sun.tools.javac.tree.JCTree.JCFieldAccess
*/
- static JCExpression chainDots(TreeMaker maker, JavacNode node, String... elems) {
+ public static JCExpression chainDots(TreeMaker maker, JavacNode node, String... elems) {
assert elems != null;
assert elems.length > 0;
@@ -262,7 +270,12 @@ class PKG {
return e;
}
- static List<JCAnnotation> findAnnotations(JavacNode fieldNode, Pattern namePattern) {
+ /**
+ * Searches the given field node for annotations and returns each one that matches the provided regular expression pattern.
+ *
+ * Only the simple name is checked - the package and any containing class are ignored.
+ */
+ public static List<JCAnnotation> findAnnotations(JavacNode fieldNode, Pattern namePattern) {
List<JCAnnotation> result = List.nil();
for (JavacNode child : fieldNode.down()) {
if (child.getKind() == Kind.ANNOTATION) {
@@ -276,9 +289,13 @@ class PKG {
}
}
return result;
- }
+ }
- static JCStatement generateNullCheck(TreeMaker treeMaker, JavacNode variable) {
+ /**
+ * Generates a new statement that checks if the given variable is null, and if so, throws a {@code NullPointerException} with the
+ * variable name as message.
+ */
+ public static JCStatement generateNullCheck(TreeMaker treeMaker, JavacNode variable) {
JCVariableDecl varDecl = (JCVariableDecl) variable.get();
if (isPrimitive(varDecl.vartype)) return null;
Name fieldName = varDecl.name;
@@ -288,7 +305,10 @@ class PKG {
return treeMaker.If(treeMaker.Binary(JCTree.EQ, treeMaker.Ident(fieldName), treeMaker.Literal(TypeTags.BOT, null)), throwStatement, null);
}
- static List<Integer> createListOfNonExistentFields(List<String> list, JavacNode type, boolean excludeStandard, boolean excludeTransient) {
+ /**
+ * Given a list of field names and a node referring to a type, finds each name in the list that does not match a field within the type.
+ */
+ public static List<Integer> createListOfNonExistentFields(List<String> list, JavacNode type, boolean excludeStandard, boolean excludeTransient) {
boolean[] matched = new boolean[list.size()];
for (JavacNode child : type.down()) {