mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-16 00:15:01 +00:00
added type mirror fixing for @XConstructor and @Wither.
This commit is contained in:
1 parent
19d0b8d018
commit
5cbdd35744
5 files changed
+31
-13
No files matched your search
@@ -34,6 +34,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.core.AnnotationValues;
|
||||
import lombok.core.AST.Kind;
|
||||
import lombok.delombok.LombokOptionsFactory;
|
||||
import lombok.javac.Javac;
|
||||
import lombok.javac.JavacAnnotationHandler;
|
||||
import lombok.javac.JavacNode;
|
||||
import lombok.javac.JavacTreeMaker;
|
||||
@@ -41,6 +42,8 @@ import lombok.javac.JavacTreeMaker;
|
||||
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;
|
||||
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBlock;
|
||||
@@ -226,10 +229,15 @@ public class HandleConstructor {
|
||||
}
|
||||
|
||||
JCMethodDecl constr = createConstructor(staticConstrRequired ? AccessLevel.PRIVATE : level, onConstructor, typeNode, fields, allToDefault, suppressConstructorProperties, source);
|
||||
injectMethod(typeNode, constr);
|
||||
ListBuffer<Type> argTypes = new ListBuffer<Type>();
|
||||
for (JavacNode fieldNode : fields) argTypes.append(getMirrorForFieldType(fieldNode));
|
||||
List<Type> argTypes_ = argTypes.toList();
|
||||
injectMethod(typeNode, constr, argTypes_, Javac.createVoidType(typeNode.getSymbolTable(), CTC_VOID));
|
||||
if (staticConstrRequired) {
|
||||
ClassSymbol sym = ((JCClassDecl) typeNode.get()).sym;
|
||||
Type returnType = sym == null ? null : sym.type;
|
||||
JCMethodDecl staticConstr = createStaticConstructor(staticName, level, typeNode, allToDefault ? List.<JavacNode>nil() : fields, source.get());
|
||||
injectMethod(typeNode, staticConstr);
|
||||
injectMethod(typeNode, staticConstr, argTypes_, returnType);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -230,6 +230,7 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
}
|
||||
|
||||
JCMethodDecl equalsMethod = createEquals(typeNode, nodesForEquality.toList(), callSuper, fieldAccess, needsCanEqual, source.get(), onParam);
|
||||
|
||||
injectMethod(typeNode, equalsMethod);
|
||||
|
||||
if (needsCanEqual && canEqualExists == MemberExistsResult.NOT_EXISTS) {
|
||||
|
||||
@@ -21,19 +21,14 @@
|
||||
*/
|
||||
package lombok.javac.handlers;
|
||||
|
||||
import static lombok.core.handlers.HandlerUtil.*;
|
||||
import static lombok.core.handlers.HandlerUtil.handleExperimentalFlagUsage;
|
||||
import static lombok.javac.Javac.CTC_VOID;
|
||||
import static lombok.javac.handlers.JavacHandlerUtil.*;
|
||||
import lombok.ConfigurationKeys;
|
||||
import lombok.core.AST.Kind;
|
||||
import lombok.core.AnnotationValues;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import lombok.javac.JavacAnnotationHandler;
|
||||
import lombok.javac.JavacNode;
|
||||
import lombok.javac.JavacTreeMaker;
|
||||
|
||||
import org.mangosdk.spi.ProviderFor;
|
||||
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBlock;
|
||||
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
|
||||
@@ -46,6 +41,15 @@ import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
|
||||
import lombok.ConfigurationKeys;
|
||||
import lombok.core.AST.Kind;
|
||||
import lombok.core.AnnotationValues;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import lombok.javac.Javac;
|
||||
import lombok.javac.JavacAnnotationHandler;
|
||||
import lombok.javac.JavacNode;
|
||||
import lombok.javac.JavacTreeMaker;
|
||||
|
||||
/**
|
||||
* Handles the {@code @UtilityClass} annotation for javac.
|
||||
*/
|
||||
@@ -141,7 +145,7 @@ public class HandleUtilityClass extends JavacAnnotationHandler<UtilityClass> {
|
||||
JCBlock block = maker.Block(0L, createThrowStatement(typeNode, maker));
|
||||
JCMethodDecl methodDef = maker.MethodDef(mods, name, null, List.<JCTypeParameter>nil(), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), block, null);
|
||||
JCMethodDecl constructor = recursiveSetGeneratedBy(methodDef, typeNode.get(), typeNode.getContext());
|
||||
JavacHandlerUtil.injectMethod(typeNode, constructor);
|
||||
JavacHandlerUtil.injectMethod(typeNode, constructor, List.<Type>nil(), Javac.createVoidType(typeNode.getSymbolTable(), CTC_VOID));
|
||||
}
|
||||
|
||||
private List<JCStatement> createThrowStatement(JavacNode typeNode, JavacTreeMaker maker) {
|
||||
|
||||
@@ -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.Type;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBlock;
|
||||
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
|
||||
@@ -209,7 +211,10 @@ public class HandleWither extends JavacAnnotationHandler<Wither> {
|
||||
long access = toJavacModifier(level);
|
||||
|
||||
JCMethodDecl createdWither = createWither(access, fieldNode, fieldNode.getTreeMaker(), source, onMethod, onParam, makeAbstract);
|
||||
injectMethod(typeNode, createdWither);
|
||||
ClassSymbol sym = ((JCClassDecl) fieldNode.up().get()).sym;
|
||||
Type returnType = sym == null ? null : sym.type;
|
||||
|
||||
injectMethod(typeNode, createdWither, List.<Type>of(getMirrorForFieldType(fieldNode)), returnType);
|
||||
}
|
||||
|
||||
public JCMethodDecl createWither(long access, JavacNode field, JavacTreeMaker maker, JavacNode source, List<JCAnnotation> onMethod, List<JCAnnotation> onParam, boolean makeAbstract) {
|
||||
|
||||
@@ -934,7 +934,7 @@ public class JavacHandlerUtil {
|
||||
int idx = 0;
|
||||
for (JCTree def : type.defs) {
|
||||
if (def instanceof JCMethodDecl) {
|
||||
if ((((JCMethodDecl)def).mods.flags & Flags.GENERATEDCONSTR) != 0) {
|
||||
if ((((JCMethodDecl) def).mods.flags & Flags.GENERATEDCONSTR) != 0) {
|
||||
JavacNode tossMe = typeNode.getNodeFor(def);
|
||||
if (tossMe != null) tossMe.up().removeChild(tossMe);
|
||||
type.defs = addAllButOne(type.defs, idx);
|
||||
|
||||
Reference in new issue
Block a user