|
23 | 23 | import javax.lang.model.element.Element; |
24 | 24 | import javax.lang.model.element.ExecutableElement; |
25 | 25 | import javax.lang.model.element.TypeElement; |
| 26 | +import javax.lang.model.element.TypeParameterElement; |
26 | 27 | import javax.lang.model.element.VariableElement; |
27 | 28 | import javax.lang.model.type.ArrayType; |
28 | 29 | import javax.lang.model.type.DeclaredType; |
@@ -109,7 +110,6 @@ public Parameter(String name, JClass jClass) { |
109 | 110 | public JMethod overrideAnnotatedMethod(ExecutableElement executableElement, GeneratedClassHolder holder) { |
110 | 111 |
|
111 | 112 | String methodName = executableElement.getSimpleName().toString(); |
112 | | - |
113 | 113 | JClass returnType = typeMirrorToJClass(executableElement.getReturnType(), holder); |
114 | 114 |
|
115 | 115 | List<Parameter> parameters = new ArrayList<Parameter>(); |
@@ -139,6 +139,21 @@ public JMethod overrideAnnotatedMethod(ExecutableElement executableElement, Gene |
139 | 139 | method._throws(thrownType); |
140 | 140 | } |
141 | 141 |
|
| 142 | + for (TypeParameterElement typeParameter : executableElement.getTypeParameters()) { |
| 143 | + List<? extends TypeMirror> bounds = typeParameter.getBounds(); |
| 144 | + |
| 145 | + JClass jClassBounds; |
| 146 | + if (bounds.isEmpty()) { |
| 147 | + jClassBounds = holder.classes().OBJECT; |
| 148 | + } else { |
| 149 | + // Currently Codemodel can't generate generics with multiple |
| 150 | + // classes like this <T extends Number & Serializable>. |
| 151 | + // So we only take the first class |
| 152 | + jClassBounds = typeMirrorToJClass(bounds.get(0), holder); |
| 153 | + } |
| 154 | + method.generify(typeParameter.toString(), jClassBounds); |
| 155 | + } |
| 156 | + |
142 | 157 | callSuperMethod(method, holder, method.body()); |
143 | 158 |
|
144 | 159 | return method; |
|
0 commit comments