Skip to content

Commit 93377e4

Browse files
author
wangshuwen
committed
chore:整理compiler
1 parent 8253c5e commit 93377e4

File tree

6 files changed

+114
-10
lines changed

6 files changed

+114
-10
lines changed

app/src/main/java/cn/cheney/app/HomeActivity.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import androidx.appcompat.app.AppCompatActivity;
77

88
import java.util.List;
9+
import java.util.Map;
910

1011
import cn.cheney.xrouter.annotation.XMethod;
1112
import cn.cheney.xrouter.annotation.XParam;
@@ -23,17 +24,21 @@ public class HomeActivity extends AppCompatActivity {
2324
@XParam()
2425
List<String> infoList;
2526

27+
@XParam()
28+
Map<String, String> infoMap;
29+
2630
@Override
2731
protected void onCreate(Bundle savedInstanceState) {
2832
super.onCreate(savedInstanceState);
2933
setContentView(R.layout.activity_test1);
3034
XRouter.getInstance().inject(this);
31-
3235
Log.i(TAG, "onCreate book=" + book);
36+
Log.i(TAG, "onCreate infoList=" + infoList);
37+
Log.i(TAG, "onCreate infoMap=" + infoMap);
3338
}
3439

3540
@XMethod(name = "activityMethod")
36-
public static void activityMethod(){
41+
public static void activityMethod() {
3742

3843
}
3944

app/src/main/java/cn/cheney/app/HomeMethod.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ public static void getAsyncBookName(@XParam(name = XParam.RequestId) String requ
3636
}
3737

3838
@XMethod(name = "setBookInfo")
39-
public static List<String> setBookInfo(@XParam(name = "info") Map<String, Book> info) {
40-
for (Map.Entry<String, Book> entry : info.entrySet()) {
41-
Book book = entry.getValue();
39+
public static List<String> setBookInfo(@XParam(name = "info") Map<String, Object> info) {
40+
for (Map.Entry<String, Object> entry : info.entrySet()) {
41+
Object book = entry.getValue();
4242
Log.i(TAG, "setBookInfo KEY:" + entry.getKey() + "|VALUE:" + book);
4343
}
4444
return new ArrayList<>();

app/src/main/java/cn/cheney/app/MainActivity.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import androidx.annotation.Nullable;
99
import androidx.appcompat.app.AppCompatActivity;
1010

11+
import java.util.ArrayList;
12+
import java.util.HashMap;
13+
import java.util.List;
1114
import java.util.Map;
1215

1316
import cn.cheney.xrouter.core.callback.RouteCallback;
@@ -24,7 +27,15 @@ protected void onCreate(Bundle savedInstanceState) {
2427
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
2528
@Override
2629
public void onClick(View v) {
27-
Integer requestCode = XRouter.page("home/page?book={\"name\":\"Kotlin\"}")
30+
List<String> infoList = new ArrayList<>();
31+
infoList.add("value");
32+
33+
Map<String,String> map = new HashMap<>();
34+
map.put("key","value");
35+
36+
Integer requestCode = XRouter.page("home/page")
37+
.put("infoList", infoList)
38+
.put("infoMap", map)
2839
.action("cn.cheney.xrouter")
2940
.anim(R.anim.enter_bottom, R.anim.exit_bottom)
3041
.requestCode(1000)

xrouter_compiler/src/main/java/cn/cheney/xrouter/compiler/contant/XTypeMirror.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public class XTypeMirror {
1313
public static final String CHAR = LANG + ".Character";
1414
public static final String STRING = LANG + ".String";
1515
public static final String SERIALIZABLE = "java.io.Serializable";
16+
public static final String LIST = "java.util.List";
17+
public static final String MAP = "java.util.Map";
1618
//android
1719
public static final String PARCELABLE = "android.os.Parcelable";
1820
public static final String ACTIVITY = "android.app.Activity";

xrouter_compiler/src/main/java/cn/cheney/xrouter/compiler/generator/ModuleClassGenerator.java

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.squareup.javapoet.ParameterizedTypeName;
77
import com.squareup.javapoet.TypeName;
88
import com.squareup.javapoet.TypeSpec;
9+
import com.sun.tools.javac.util.Pair;
910

1011
import java.io.IOException;
1112
import java.util.ArrayList;
@@ -214,6 +215,8 @@ private void addMethodInvoke(XRouterProcessor.Holder holder,
214215
boolean isReturnVoid = TypeKind.VOID.equals(returnType.getKind());
215216

216217
List<? extends VariableElement> parameters = methodElement.getParameters();
218+
219+
//TestModule.testMethod()
217220
List<Object> paramsSegList = new ArrayList<>();
218221
paramsSegList.add(classType);
219222
paramsSegList.add(methodElement.getSimpleName().toString());
@@ -226,20 +229,23 @@ private void addMethodInvoke(XRouterProcessor.Holder holder,
226229
}
227230

228231
StringBuilder paramsInfoSeg = new StringBuilder();
232+
//整体构造MethodInvokable的value
229233
List<Object> allInfoSegList = new ArrayList<>();
234+
//构造paramInfo的value
230235
List<Object> paramsInfoSegList = new ArrayList<>();
231236

232237
boolean hasRequestId = false;
233238
boolean hasContext = false;
234239
if (null != parameters && !parameters.isEmpty()) {
235240
for (VariableElement variableElement : parameters) {
241+
boolean isNeedConvert = false;
236242
javax.lang.model.type.TypeMirror methodParamType = variableElement.asType();
237243
//擦除泛型[因为Map<String>.class 不允许]
238244
if (methodParamType instanceof DeclaredType) {
239245
DeclaredType methodParamDeclaredType = (DeclaredType) methodParamType;
240246
if (!methodParamDeclaredType.getTypeArguments().isEmpty()) {
241-
methodParamType = holder.types.erasure(methodParamType);
242-
Logger.d("erasure " + methodParamType.toString());
247+
isNeedConvert = true;
248+
Logger.d("泛型 " + methodParamType.toString());
243249
}
244250
}
245251
XParam xParam = variableElement.getAnnotation(XParam.class);
@@ -333,4 +339,74 @@ private void addMethodInvoke(XRouterProcessor.Holder holder,
333339
loadMethodBuilder.addStatement("$L.put($S,$L)", "routeMap", xMethod.name(), methodInvoke);
334340
}
335341

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+
336412
}

xrouter_compiler/src/main/java/cn/cheney/xrouter/compiler/util/TypeUtils.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.DOUBLE;
1414
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.FLOAT;
1515
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.INTEGER;
16+
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.LIST;
1617
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.LONG;
18+
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.MAP;
1719
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.PARCELABLE;
1820
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.SERIALIZABLE;
1921
import static cn.cheney.xrouter.compiler.contant.XTypeMirror.SHORT;
@@ -43,8 +45,14 @@ public int typeExchange(Element element) {
4345
if (typeMirror.getKind().isPrimitive()) {
4446
return element.asType().getKind().ordinal();
4547
}
46-
Logger.d("typeExchange =" + typeMirror.toString());
47-
switch (typeMirror.toString()) {
48+
String typeStr = typeMirror.toString();
49+
Logger.d("页面入参 " + element.getSimpleName() + "->" + typeStr);
50+
if (typeStr.startsWith(LIST)) {
51+
typeStr = SERIALIZABLE;
52+
} else if (typeStr.startsWith(MAP)) {
53+
typeStr = SERIALIZABLE;
54+
}
55+
switch (typeStr) {
4856
case BYTE:
4957
return TypeKind.BYTE.ordinal();
5058
case SHORT:
@@ -63,6 +71,8 @@ public int typeExchange(Element element) {
6371
return TypeKind.CHAR.ordinal();
6472
case STRING:
6573
return TypeKind.STRING.ordinal();
74+
case SERIALIZABLE:
75+
return TypeKind.SERIALIZABLE.ordinal();
6676
default:
6777
if (types.isSubtype(typeMirror, parcelableType)) {
6878
return TypeKind.PARCELABLE.ordinal();

0 commit comments

Comments
 (0)