6
6
import com .squareup .javapoet .ParameterizedTypeName ;
7
7
import com .squareup .javapoet .TypeName ;
8
8
import com .squareup .javapoet .TypeSpec ;
9
+ import com .sun .tools .javac .util .Pair ;
9
10
10
11
import java .io .IOException ;
11
12
import java .util .ArrayList ;
@@ -214,6 +215,8 @@ private void addMethodInvoke(XRouterProcessor.Holder holder,
214
215
boolean isReturnVoid = TypeKind .VOID .equals (returnType .getKind ());
215
216
216
217
List <? extends VariableElement > parameters = methodElement .getParameters ();
218
+
219
+ //TestModule.testMethod()
217
220
List <Object > paramsSegList = new ArrayList <>();
218
221
paramsSegList .add (classType );
219
222
paramsSegList .add (methodElement .getSimpleName ().toString ());
@@ -226,20 +229,23 @@ private void addMethodInvoke(XRouterProcessor.Holder holder,
226
229
}
227
230
228
231
StringBuilder paramsInfoSeg = new StringBuilder ();
232
+ //整体构造MethodInvokable的value
229
233
List <Object > allInfoSegList = new ArrayList <>();
234
+ //构造paramInfo的value
230
235
List <Object > paramsInfoSegList = new ArrayList <>();
231
236
232
237
boolean hasRequestId = false ;
233
238
boolean hasContext = false ;
234
239
if (null != parameters && !parameters .isEmpty ()) {
235
240
for (VariableElement variableElement : parameters ) {
241
+ boolean isNeedConvert = false ;
236
242
javax .lang .model .type .TypeMirror methodParamType = variableElement .asType ();
237
243
//擦除泛型[因为Map<String>.class 不允许]
238
244
if (methodParamType instanceof DeclaredType ) {
239
245
DeclaredType methodParamDeclaredType = (DeclaredType ) methodParamType ;
240
246
if (!methodParamDeclaredType .getTypeArguments ().isEmpty ()) {
241
- methodParamType = holder . types . erasure ( methodParamType ) ;
242
- Logger .d ("erasure " + methodParamType .toString ());
247
+ isNeedConvert = true ;
248
+ Logger .d ("泛型 " + methodParamType .toString ());
243
249
}
244
250
}
245
251
XParam xParam = variableElement .getAnnotation (XParam .class );
@@ -333,4 +339,74 @@ private void addMethodInvoke(XRouterProcessor.Holder holder,
333
339
loadMethodBuilder .addStatement ("$L.put($S,$L)" , "routeMap" , xMethod .name (), methodInvoke );
334
340
}
335
341
342
+
343
+ private Pair <Pair <String , List <Object >>,
344
+ Pair <String , List <Object >>> newParamInfo (String className ,
345
+ String methodName ,
346
+ List <? extends VariableElement > parameters ) {
347
+ TypeMirror paramInfoType = holder .elementUtils
348
+ .getTypeElement (XTypeMirror .PARAM_INFO ).asType ();
349
+ //new ParamInfo()描述
350
+ StringBuilder paramsInfoDesc = new StringBuilder ();
351
+ //new ParamInfo() value
352
+ List <Object > paramsInfoValueList = new ArrayList <>();
353
+
354
+ boolean hasRequestId = false ;
355
+ boolean hasContext = false ;
356
+ if (null == parameters || parameters .isEmpty ()) {
357
+ // return Pair.of(paramsInfoDesc.toString(), paramsInfoValueList);
358
+ }
359
+ for (VariableElement variableElement : parameters ) {
360
+ boolean isNeedConvert = false ;
361
+ javax .lang .model .type .TypeMirror methodParamType = variableElement .asType ();
362
+ //擦除泛型[因为Map<String>.class 不允许]
363
+ if (methodParamType instanceof DeclaredType ) {
364
+ DeclaredType methodParamDeclaredType = (DeclaredType ) methodParamType ;
365
+ if (!methodParamDeclaredType .getTypeArguments ().isEmpty ()) {
366
+ isNeedConvert = true ;
367
+ Logger .d ("泛型 " + methodParamType .toString ());
368
+ }
369
+ }
370
+ XParam xParam = variableElement .getAnnotation (XParam .class );
371
+ String key = getParamName (xParam , variableElement .getSimpleName ().toString ());
372
+ //如果是context类型 key=XParam.Context
373
+ if (variableElement .asType ().toString ().equals (XTypeMirror .CONTEXT )) {
374
+ key = XParam .Context ;
375
+ }
376
+ if (key .equals (XParam .RequestId )) {
377
+ if (hasRequestId ) {
378
+ Logger .e (String .format ("[%s] [%s] have repeat key requestId" , className ,
379
+ methodName ));
380
+ return null ;
381
+ }
382
+ hasRequestId = true ;
383
+ }
384
+ if (key .equals (XParam .Context )) {
385
+ if (hasContext ) {
386
+ // Logger.e(String.format("[%s] [%s] have repeat key context",
387
+ // classType.getQualifiedName(),
388
+ // methodElement.getSimpleName()));
389
+ Logger .e (String .format ("[%s] [%s] have repeat key context" , className ,
390
+ methodName ));
391
+ return null ;
392
+ }
393
+ hasContext = true ;
394
+ }
395
+ if (parameters .indexOf (variableElement ) == parameters .size () - 1 ) {
396
+ //paramSeg.append("($T)params.get($S)");
397
+ paramsInfoDesc .append ("new $T($S,$T.class)" );
398
+ } else {
399
+ //paramSeg.append("($T)params.get($S),");
400
+ paramsInfoDesc .append ("new $T($S,$T.class)," );
401
+ }
402
+ // paramsSegList.add(methodParamType);
403
+ // paramsSegList.add(key);
404
+ paramsInfoValueList .add (paramInfoType );
405
+ paramsInfoValueList .add (getParamName (xParam , variableElement .getSimpleName ().toString ()));
406
+ paramsInfoValueList .add (methodParamType );
407
+ }
408
+ // return Pair.of(paramsInfoDesc.toString(), paramsInfoValueList);
409
+ return null ;
410
+ }
411
+
336
412
}
0 commit comments