mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 14:16:11 +00:00
Issue2262.
Added ability to process JCField as type parameter for HandleSuperBuilder. javac.
This commit is contained in:
1 parent
a81df33c10
commit
da9cc7b6b2
1 file changed
+28
@@ -26,6 +26,7 @@ import static lombok.javac.Javac.*;
|
||||
import static lombok.javac.handlers.JavacHandlerUtil.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import javax.lang.model.element.Modifier;
|
||||
|
||||
@@ -1007,8 +1008,35 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> {
|
||||
typeParamsForBuilderParameter.add(maker.Ident(((JCTypeParameter)typeParam).getName()));
|
||||
} else if (typeParam instanceof JCIdent) {
|
||||
typeParamsForBuilderParameter.add(maker.Ident(((JCIdent)typeParam).getName()));
|
||||
} else if (typeParam instanceof JCFieldAccess) {
|
||||
typeParamsForBuilderParameter.add(copySelect(maker, (JCFieldAccess) typeParam));
|
||||
}
|
||||
}
|
||||
return typeParamsForBuilderParameter;
|
||||
}
|
||||
|
||||
private JCExpression copySelect(JavacTreeMaker maker, JCFieldAccess typeParam) {
|
||||
java.util.List<Name> chainNames = new ArrayList<Name>();
|
||||
JCExpression expression = typeParam;
|
||||
while (expression != null) {
|
||||
if (expression instanceof JCFieldAccess) {
|
||||
chainNames.add(((JCFieldAccess) expression).getIdentifier());
|
||||
expression = ((JCFieldAccess) expression).getExpression();
|
||||
} else if (expression instanceof JCIdent) {
|
||||
chainNames.add(((JCIdent) expression).getName());
|
||||
expression = null;
|
||||
}
|
||||
}
|
||||
|
||||
Collections.reverse(chainNames);
|
||||
JCExpression typeParameter = null;
|
||||
for (Name name : chainNames) {
|
||||
if (typeParameter == null) {
|
||||
typeParameter = maker.Ident(name);
|
||||
} else {
|
||||
typeParameter = maker.Select(typeParameter, name);
|
||||
}
|
||||
}
|
||||
return typeParameter;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user