diff options
-rw-r--r-- | src/lombok/eclipse/Eclipse.java | 42 | ||||
-rw-r--r-- | src/lombok/eclipse/handlers/HandleData.java | 12 |
2 files changed, 37 insertions, 17 deletions
diff --git a/src/lombok/eclipse/Eclipse.java b/src/lombok/eclipse/Eclipse.java index e717e491..67622e47 100644 --- a/src/lombok/eclipse/Eclipse.java +++ b/src/lombok/eclipse/Eclipse.java @@ -106,17 +106,17 @@ public class Eclipse { return out; } - public static TypeReference copyType(TypeReference ref) { - if ( ref instanceof QualifiedTypeReference ) { - QualifiedTypeReference iRef = (QualifiedTypeReference) ref; - return new QualifiedTypeReference(iRef.tokens, iRef.sourcePositions); - } - - if ( ref instanceof ArrayQualifiedTypeReference ) { - ArrayQualifiedTypeReference iRef = (ArrayQualifiedTypeReference) ref; - return new ArrayQualifiedTypeReference(iRef.tokens, iRef.dimensions(), iRef.sourcePositions); + public static TypeReference[] copyTypes(TypeReference[] refs) { + if ( refs == null ) return null; + TypeReference[] outs = new TypeReference[refs.length]; + int idx = 0; + for ( TypeReference ref : refs ) { + outs[idx++] = copyType(ref); } - + return outs; + } + + public static TypeReference copyType(TypeReference ref) { if ( ref instanceof ParameterizedQualifiedTypeReference ) { ParameterizedQualifiedTypeReference iRef = (ParameterizedQualifiedTypeReference) ref; TypeReference[][] args = null; @@ -138,14 +138,14 @@ public class Eclipse { return new ParameterizedQualifiedTypeReference(iRef.tokens, args, iRef.dimensions(), iRef.sourcePositions); } - if ( ref instanceof SingleTypeReference ) { - SingleTypeReference iRef = (SingleTypeReference) ref; - return new SingleTypeReference(iRef.token, (long)iRef.sourceStart << 32 | iRef.sourceEnd); + if ( ref instanceof ArrayQualifiedTypeReference ) { + ArrayQualifiedTypeReference iRef = (ArrayQualifiedTypeReference) ref; + return new ArrayQualifiedTypeReference(iRef.tokens, iRef.dimensions(), iRef.sourcePositions); } - if ( ref instanceof ArrayTypeReference ) { - ArrayTypeReference iRef = (ArrayTypeReference) ref; - return new ArrayTypeReference(iRef.token, iRef.dimensions(), (long)iRef.sourceStart << 32 | iRef.sourceEnd); + if ( ref instanceof QualifiedTypeReference ) { + QualifiedTypeReference iRef = (QualifiedTypeReference) ref; + return new QualifiedTypeReference(iRef.tokens, iRef.sourcePositions); } if ( ref instanceof ParameterizedSingleTypeReference ) { @@ -162,10 +162,20 @@ public class Eclipse { return new ParameterizedSingleTypeReference(iRef.token, args, iRef.dimensions(), (long)iRef.sourceStart << 32 | iRef.sourceEnd); } + if ( ref instanceof ArrayTypeReference ) { + ArrayTypeReference iRef = (ArrayTypeReference) ref; + return new ArrayTypeReference(iRef.token, iRef.dimensions(), (long)iRef.sourceStart << 32 | iRef.sourceEnd); + } + if ( ref instanceof Wildcard ) { return new Wildcard(((Wildcard)ref).kind); } + if ( ref instanceof SingleTypeReference ) { + SingleTypeReference iRef = (SingleTypeReference) ref; + return new SingleTypeReference(iRef.token, (long)iRef.sourceStart << 32 | iRef.sourceEnd); + } + return ref; } diff --git a/src/lombok/eclipse/handlers/HandleData.java b/src/lombok/eclipse/handlers/HandleData.java index 27757e7d..65072ab1 100644 --- a/src/lombok/eclipse/handlers/HandleData.java +++ b/src/lombok/eclipse/handlers/HandleData.java @@ -38,6 +38,7 @@ import org.eclipse.jdt.internal.compiler.ast.MessageSend; import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration; import org.eclipse.jdt.internal.compiler.ast.NullLiteral; import org.eclipse.jdt.internal.compiler.ast.OperatorIds; +import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference; import org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference; import org.eclipse.jdt.internal.compiler.ast.ReturnStatement; import org.eclipse.jdt.internal.compiler.ast.SingleNameReference; @@ -47,6 +48,7 @@ import org.eclipse.jdt.internal.compiler.ast.StringLiteral; import org.eclipse.jdt.internal.compiler.ast.ThisReference; import org.eclipse.jdt.internal.compiler.ast.TrueLiteral; import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration; +import org.eclipse.jdt.internal.compiler.ast.TypeParameter; import org.eclipse.jdt.internal.compiler.ast.TypeReference; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; import org.eclipse.jdt.internal.compiler.lookup.TypeConstants; @@ -188,7 +190,15 @@ public class HandleData implements EclipseAnnotationHandler<Data> { ((CompilationUnitDeclaration) type.top().get()).compilationResult); constructor.modifiers = PKG.toModifier(AccessLevel.PUBLIC) | Modifier.STATIC; - constructor.returnType = new SingleTypeReference(((TypeDeclaration)type.get()).name, p); + TypeDeclaration typeDecl = (TypeDeclaration) type.get(); + if ( typeDecl.typeParameters != null && typeDecl.typeParameters.length > 0 ) { + TypeReference[] refs = new TypeReference[typeDecl.typeParameters.length]; + int idx = 0; + for ( TypeParameter param : typeDecl.typeParameters ) { + refs[idx++] = new SingleTypeReference(param.name, 0); + } + constructor.returnType = new ParameterizedSingleTypeReference(typeDecl.name, refs, 0, p); + } else constructor.returnType = new SingleTypeReference(((TypeDeclaration)type.get()).name, p); constructor.annotations = null; constructor.selector = name.toCharArray(); constructor.thrownExceptions = null; |