mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-14 12:16:49 +00:00
refactor of how creating void types works, also cleaned up some syntax.
This commit is contained in:
1 parent
b867f81b8a
commit
19d0b8d018
9 files changed
+43
-20
No files matched your search
@@ -1200,7 +1200,7 @@ public class EclipseHandlerUtil {
|
||||
|
||||
if (node != null && node.get() instanceof TypeDeclaration) {
|
||||
TypeDeclaration typeDecl = (TypeDeclaration)node.get();
|
||||
if (typeDecl.methods != null) top: for (AbstractMethodDeclaration def : typeDecl.methods) {
|
||||
if (typeDecl.methods != null) for (AbstractMethodDeclaration def : typeDecl.methods) {
|
||||
if (def instanceof ConstructorDeclaration) {
|
||||
if ((def.bits & ASTNode.IsDefaultConstructor) != 0) continue;
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@ public class JavacAST extends AST<JavacAST, JavacNode, JCTree> {
|
||||
List<JavacNode> childNodes = new ArrayList<JavacNode>();
|
||||
for (JCTree s : top.defs) {
|
||||
if (s instanceof JCClassDecl) {
|
||||
addIfNotNull(childNodes, buildType((JCClassDecl)s));
|
||||
addIfNotNull(childNodes, buildType((JCClassDecl) s));
|
||||
} // else they are import statements, which we don't care about. Or Skip objects, whatever those are.
|
||||
}
|
||||
|
||||
@@ -228,10 +228,10 @@ public class JavacAST extends AST<JavacAST, JavacNode, JCTree> {
|
||||
* JCVariableDecl for fields
|
||||
* JCBlock for (static) initializers
|
||||
*/
|
||||
if (def instanceof JCMethodDecl) addIfNotNull(childNodes, buildMethod((JCMethodDecl)def));
|
||||
else if (def instanceof JCClassDecl) addIfNotNull(childNodes, buildType((JCClassDecl)def));
|
||||
else if (def instanceof JCVariableDecl) addIfNotNull(childNodes, buildField((JCVariableDecl)def));
|
||||
else if (def instanceof JCBlock) addIfNotNull(childNodes, buildInitializer((JCBlock)def));
|
||||
if (def instanceof JCMethodDecl) addIfNotNull(childNodes, buildMethod((JCMethodDecl) def));
|
||||
else if (def instanceof JCClassDecl) addIfNotNull(childNodes, buildType((JCClassDecl) def));
|
||||
else if (def instanceof JCVariableDecl) addIfNotNull(childNodes, buildField((JCVariableDecl) def));
|
||||
else if (def instanceof JCBlock) addIfNotNull(childNodes, buildInitializer((JCBlock) def));
|
||||
}
|
||||
|
||||
return putInMap(new JavacNode(this, type, childNodes, Kind.TYPE));
|
||||
|
||||
@@ -481,7 +481,7 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
|
||||
|
||||
statements.append(maker.Exec(maker.Assign(maker.Select(maker.Ident(type.toName("this")), type.toName("$lombokUnclean")), maker.Literal(CTC_BOOLEAN, false))));
|
||||
JCBlock body = maker.Block(0, statements.toList());
|
||||
return maker.MethodDef(maker.Modifiers(Flags.PUBLIC), type.toName("$lombokClean"), maker.Type(Javac.createVoidType(maker, CTC_VOID)), List.<JCTypeParameter>nil(), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null);
|
||||
return maker.MethodDef(maker.Modifiers(Flags.PUBLIC), type.toName("$lombokClean"), maker.Type(Javac.createVoidType(type.getSymbolTable(), CTC_VOID)), List.<JCTypeParameter>nil(), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null);
|
||||
/*
|
||||
* if (shouldReturnThis) {
|
||||
methodType = cloneSelfType(field);
|
||||
|
||||
@@ -41,6 +41,8 @@ import lombok.javac.handlers.JavacHandlerUtil.FieldAccess;
|
||||
import org.mangosdk.spi.ProviderFor;
|
||||
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
|
||||
import com.sun.tools.javac.tree.JCTree.JCAssign;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBlock;
|
||||
@@ -154,7 +156,7 @@ public class HandleSetter extends JavacAnnotationHandler<Setter> {
|
||||
return;
|
||||
}
|
||||
|
||||
JCVariableDecl fieldDecl = (JCVariableDecl)fieldNode.get();
|
||||
JCVariableDecl fieldDecl = (JCVariableDecl) fieldNode.get();
|
||||
String methodName = toSetterName(fieldNode);
|
||||
|
||||
if (methodName == null) {
|
||||
@@ -240,7 +242,7 @@ public class HandleSetter extends JavacAnnotationHandler<Setter> {
|
||||
|
||||
if (methodType == null) {
|
||||
//WARNING: Do not use field.getSymbolTable().voidType - that field has gone through non-backwards compatible API changes within javac1.6.
|
||||
methodType = treeMaker.Type(Javac.createVoidType(treeMaker, CTC_VOID));
|
||||
methodType = treeMaker.Type(Javac.createVoidType(field.getSymbolTable(), CTC_VOID));
|
||||
shouldReturnThis = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -641,7 +641,7 @@ public class JavacHandlerUtil {
|
||||
node = upToTypeNode(node);
|
||||
|
||||
if (node != null && node.get() instanceof JCClassDecl) {
|
||||
top: for (JCTree def : ((JCClassDecl)node.get()).defs) {
|
||||
for (JCTree def : ((JCClassDecl)node.get()).defs) {
|
||||
if (def instanceof JCMethodDecl) {
|
||||
JCMethodDecl md = (JCMethodDecl) def;
|
||||
if (md.name.contentEquals("<init>")) {
|
||||
|
||||
@@ -36,6 +36,7 @@ import lombok.javac.handlers.JavacSingularsRecipes.JavacSingularizer;
|
||||
import lombok.javac.handlers.JavacSingularsRecipes.SingularData;
|
||||
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Symtab;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBlock;
|
||||
import com.sun.tools.javac.tree.JCTree.JCExpression;
|
||||
@@ -71,15 +72,16 @@ abstract class JavacGuavaSingularizer extends JavacSingularizer {
|
||||
|
||||
@Override public void generateMethods(SingularData data, JavacNode builderType, JCTree source, boolean fluent, boolean chain) {
|
||||
JavacTreeMaker maker = builderType.getTreeMaker();
|
||||
JCExpression returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
Symtab symbolTable = builderType.getSymbolTable();
|
||||
JCExpression returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
JCStatement returnStatement = chain ? maker.Return(maker.Ident(builderType.toName("this"))) : null;
|
||||
generateSingularMethod(maker, returnType, returnStatement, data, builderType, source, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
returnStatement = chain ? maker.Return(maker.Ident(builderType.toName("this"))) : null;
|
||||
generatePluralMethod(maker, returnType, returnStatement, data, builderType, source, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
returnStatement = chain ? maker.Return(maker.Ident(builderType.toName("this"))) : null;
|
||||
generateClearMethod(maker, returnType, returnStatement, data, builderType, source);
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import lombok.javac.handlers.JavacHandlerUtil;
|
||||
import lombok.javac.handlers.JavacSingularsRecipes.SingularData;
|
||||
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Symtab;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBlock;
|
||||
import com.sun.tools.javac.tree.JCTree.JCExpression;
|
||||
@@ -82,17 +83,18 @@ abstract class JavacJavaUtilListSetSingularizer extends JavacJavaUtilSingularize
|
||||
}
|
||||
|
||||
JavacTreeMaker maker = builderType.getTreeMaker();
|
||||
Symtab symbolTable = builderType.getSymbolTable();
|
||||
Name thisName = builderType.toName("this");
|
||||
|
||||
JCExpression returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
JCExpression returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
JCStatement returnStatement = chain ? maker.Return(maker.Ident(thisName)) : null;
|
||||
generateSingularMethod(maker, returnType, returnStatement, data, builderType, source, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
returnStatement = chain ? maker.Return(maker.Ident(thisName)) : null;
|
||||
generatePluralMethod(maker, returnType, returnStatement, data, builderType, source, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
returnStatement = chain ? maker.Return(maker.Ident(thisName)) : null;
|
||||
generateClearMethod(maker, returnType, returnStatement, data, builderType, source);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ import lombok.javac.handlers.JavacSingularsRecipes.SingularData;
|
||||
import org.mangosdk.spi.ProviderFor;
|
||||
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Symtab;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBlock;
|
||||
import com.sun.tools.javac.tree.JCTree.JCExpression;
|
||||
@@ -107,16 +108,17 @@ public class JavacJavaUtilMapSingularizer extends JavacJavaUtilSingularizer {
|
||||
}
|
||||
|
||||
JavacTreeMaker maker = builderType.getTreeMaker();
|
||||
Symtab symbolTable = builderType.getSymbolTable();
|
||||
|
||||
JCExpression returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
JCExpression returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
JCStatement returnStatement = chain ? maker.Return(maker.Ident(builderType.toName("this"))) : null;
|
||||
generateSingularMethod(maker, returnType, returnStatement, data, builderType, source, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
returnStatement = chain ? maker.Return(maker.Ident(builderType.toName("this"))) : null;
|
||||
generatePluralMethod(maker, returnType, returnStatement, data, builderType, source, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
|
||||
returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(symbolTable, CTC_VOID));
|
||||
returnStatement = chain ? maker.Return(maker.Ident(builderType.toName("this"))) : null;
|
||||
generateClearMethod(maker, returnType, returnStatement, data, builderType, source);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import lombok.javac.JavacTreeMaker.TreeTag;
|
||||
import lombok.javac.JavacTreeMaker.TypeTag;
|
||||
|
||||
import com.sun.tools.javac.code.Source;
|
||||
import com.sun.tools.javac.code.Symtab;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.main.JavaCompiler;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
@@ -309,7 +310,21 @@ public class Javac {
|
||||
JC_NO_TYPE = c;
|
||||
}
|
||||
|
||||
public static Type createVoidType(JavacTreeMaker maker, TypeTag tag) {
|
||||
private static final Field symtabVoidType = getFieldIfExists(Symtab.class, "voidType");
|
||||
|
||||
private static Field getFieldIfExists(Class<?> c, String fieldName) {
|
||||
try {
|
||||
return c.getField("voidType");
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Type createVoidType(Symtab symbolTable, TypeTag tag) {
|
||||
if (symtabVoidType != null) try {
|
||||
return (Type) symtabVoidType.get(symbolTable);
|
||||
} catch (IllegalAccessException ignore) {}
|
||||
|
||||
if (Javac.getJavaCompilerVersion() < 8) {
|
||||
return new JCNoType(((Integer) tag.value).intValue());
|
||||
} else {
|
||||
|
||||
Reference in new issue
Block a user