Skip to content

Commit 2867e4c

Browse files
author
wangshuwen15222
committed
feat:更换路由表的加载方式&&一次性加载
1 parent 6a2bc26 commit 2867e4c

File tree

33 files changed

+213
-216
lines changed

33 files changed

+213
-216
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
/captures
88
.externalNativeBuild
99
.cxx
10+
/repo

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import cn.cheney.mtest.entity.Book;
1717
import cn.cheney.xrouter.core.XRouter;
1818
import cn.cheney.xrouter.core.call.MethodCall;
19-
import cn.cheney.xrouter.core.callback.RouteCallback;
2019
import cn.cheney.xrouter.core.util.Logger;
2120

2221
public class MainActivity extends AppCompatActivity {
@@ -59,14 +58,10 @@ protected void onCreate(Bundle savedInstanceState) {
5958
AlertUtil.showAlert(MainActivity.this, result.toString()));
6059
});
6160

61+
6262
findViewById(R.id.btn4).setOnClickListener(v -> {
6363
Book bookError = XRouter.<Book>method("sssss")
64-
.call(new RouteCallback() {
65-
@Override
66-
public void onResult(Map<String, Object> result) {
67-
AlertUtil.showAlert(MainActivity.this, "错误异步返回结果=" + result);
68-
}
69-
});
64+
.call(result -> AlertUtil.showAlert(MainActivity.this, "错误异步返回结果=" + result));
7065
AlertUtil.showAlert(MainActivity.this, "错误同步返回结果=" + bookError);
7166
});
7267
}

app/src/main/java/cn/cheney/app/XRouter$$Module$$All.java

Lines changed: 0 additions & 14 deletions
This file was deleted.
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
b8f6b17bfb073570ca65275bc8e26c7f
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
6de9d445f57b5e970bad02c00078704a0dbe7bbd
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4+
<modelVersion>4.0.0</modelVersion>
5+
<groupId>cn.cheney.plugin</groupId>
6+
<artifactId>xrouter</artifactId>
7+
<version>1.0.1</version>
8+
<dependencies>
9+
<dependency>
10+
<groupId>com.android.tools.build</groupId>
11+
<artifactId>gradle</artifactId>
12+
<version>3.3.2</version>
13+
<scope>runtime</scope>
14+
</dependency>
15+
<dependency>
16+
<groupId>org.jetbrains</groupId>
17+
<artifactId>annotations</artifactId>
18+
<version>15.0</version>
19+
<scope>runtime</scope>
20+
</dependency>
21+
</dependencies>
22+
</project>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
bd1d4aea195f1f6c92b66881dd17909b
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
42f5f9fe2e7e560c181bcefe364354721b246dfe
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<metadata>
3+
<groupId>cn.cheney.plugin</groupId>
4+
<artifactId>xrouter</artifactId>
5+
<versioning>
6+
<release>1.0.1</release>
7+
<versions>
8+
<version>1.0.1</version>
9+
</versions>
10+
<lastUpdated>20210826031336</lastUpdated>
11+
</versioning>
12+
</metadata>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
68e35268c30d8d9f179524fab5ed29e3
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
b5ab7745b59a0e938646eee5df42306deac5713e

xrouter_annotation/src/main/java/cn/cheney/xrouter/constant/GenerateFileConstant.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
public interface GenerateFileConstant {
44

5-
String MODULE_FILE_PREFIX = "XRoute$$Module$$";
5+
String ROUTER_PACKAGE_NAME = "cn.cheney.xrouter";
66

7-
String PARAM_FILE_PREFIX = "XRoute$$XParam$$";
7+
String MODULE_FILE_PREFIX = "XRouterModule_";
88

9-
String MODULE_CLASS_PREFIX = "cn.cheney.xrouter." + MODULE_FILE_PREFIX;
9+
String PARAM_FILE_PREFIX = "XRouterXParam_";
1010

1111
String WARNING_TIPS = "DO NOT EDIT THIS FILE!!! IT WAS GENERATED BY XROUTER.";
1212

xrouter_compiler/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ java {
1313
}
1414

1515
dependencies {
16-
if(debug == "true"){
16+
if (debug == "true") {
1717
implementation project(":xrouter_annotation")
18-
}else {
18+
} else {
1919
implementation "io.github.wangshuwen1107:xrouter-annotation:$sdkVersion"
2020
}
2121
compileOnly 'com.google.auto.service:auto-service-annotations:1.0-rc7'

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ public class XTypeMirror {
2323
public static final String CONTEXT = "android.content.Context";
2424
//XRouter
2525
public static final String CALLBACK = "cn.cheney.xrouter.core.RouteCallback";
26-
public static final String BASE_MODULE = "cn.cheney.xrouter.core.module.BaseModule";
2726
public static final String INVOKABLE = "cn.cheney.xrouter.core.invok.Invokable";
2827
public static final String ACTIVITY_INVOKE = "cn.cheney.xrouter.core.invok.ActivityInvoke";
2928
public static final String SYRINGE = "cn.cheney.xrouter.core.syringe.Syringe";
3029
public static final String PARAM_INFO = "cn.cheney.xrouter.core.invok.ParamInfo";
31-
3230
//ClassName
3331
public static final ClassName CLASSNAME_TYPE_REFERENCE = ClassName.get("com.alibaba.fastjson",
3432
"TypeReference");

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

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@
3333

3434
public class ModuleClassGenerator {
3535

36-
private String generatorClassName;
36+
private final String generatorClassName;
3737

38-
private String module;
38+
private final String module;
3939

40-
private XRouterProcessor.Holder holder;
40+
private final XRouterProcessor.Holder holder;
4141

42-
private MethodSpec.Builder loadMethodBuilder;
42+
private final MethodSpec.Builder loadMethodBuilder;
4343

4444

4545
public ModuleClassGenerator(String module, XRouterProcessor.Holder holder) {
@@ -53,19 +53,12 @@ public ModuleClassGenerator(String module, XRouterProcessor.Holder holder) {
5353
* 最后生产java文件
5454
*/
5555
public void generateJavaFile() {
56-
TypeMirror baseModuleType = holder.elementUtils
57-
.getTypeElement(XTypeMirror.BASE_MODULE).asType();
58-
5956
TypeSpec typeSpec = TypeSpec.classBuilder(generatorClassName)
60-
.superclass(TypeName.get(baseModuleType))
6157
.addJavadoc(GenerateFileConstant.WARNING_TIPS)
6258
.addModifiers(Modifier.PUBLIC)
6359
.addMethod(loadMethodBuilder.build())
64-
.addMethod(getNameMethodBuilder.addStatement("return $S", module)
65-
.build())
6660
.build();
67-
68-
JavaFile javaFile = JavaFile.builder("cn.cheney.xrouter", typeSpec)
61+
JavaFile javaFile = JavaFile.builder(GenerateFileConstant.ROUTER_PACKAGE_NAME, typeSpec)
6962
.build();
7063
try {
7164
javaFile.writeTo(holder.filer);
@@ -82,23 +75,15 @@ private MethodSpec.Builder loadMethodBuilder() {
8275
get(XTypeMirror.CLASSNAME_INVOKABLE, TypeVariableName.get("?"));
8376
return MethodSpec.methodBuilder("load")
8477
.addModifiers(Modifier.PUBLIC)
78+
.addModifiers(Modifier.STATIC)
8579
.returns(TypeName.VOID)
86-
.addAnnotation(Override.class)
8780
.addParameter(ParameterizedTypeName.get(
8881
ClassName.get(Map.class),
8982
ClassName.get(String.class),
9083
methodInvokableType),
9184
"routeMap");
9285
}
9386

94-
/**
95-
* public String getName() {return "home";}
96-
*/
97-
private MethodSpec.Builder getNameMethodBuilder = MethodSpec.methodBuilder("getName")
98-
.addModifiers(Modifier.PUBLIC)
99-
.returns(String.class)
100-
.addAnnotation(Override.class);
101-
10287

10388
/**
10489
* routeMap.put("/test2",new MethodInvoke() or new ActivityInvoke());
@@ -142,7 +127,7 @@ private void addActivityInvoke(TypeElement activityType, String path) {
142127
paramsInfoSeg.append("$L.put($S,new $T($T.ACTIVITY,$T.class,$S,$S");
143128

144129
paramsInfoSegList.add("routeMap");
145-
paramsInfoSegList.add(path);
130+
paramsInfoSegList.add(module + "/" + path);
146131
paramsInfoSegList.add(typeActivityInvoke);
147132
paramsInfoSegList.add(RouteType.class);
148133
paramsInfoSegList.add(activityType);
@@ -258,7 +243,7 @@ private void addMethodInvoke(TypeElement classType, ExecutableElement methodElem
258243
.addSuperinterface(methodInvokableType)
259244
.addMethod(invokeBuilder.build())
260245
.build();
261-
loadMethodBuilder.addStatement("$L.put($S,$L)", "routeMap", xMethod.name(), methodInvoke);
246+
loadMethodBuilder.addStatement("$L.put($S,$L)", "routeMap", module + "/" + xMethod.name(), methodInvoke);
262247
}
263248

264249

xrouter_core/src/main/java/cn/cheney/xrouter/core/XRouter.java

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
import android.app.Activity;
44
import android.app.Application;
5-
import android.content.Context;
65
import android.net.Uri;
76
import android.text.TextUtils;
87

98
import androidx.annotation.NonNull;
109

1110
import java.lang.ref.WeakReference;
11+
import java.lang.reflect.Method;
1212
import java.util.ArrayList;
13+
import java.util.HashMap;
1314
import java.util.List;
1415
import java.util.Map;
1516

@@ -24,7 +25,6 @@
2425
import cn.cheney.xrouter.core.interceptor.RouterInterceptor;
2526
import cn.cheney.xrouter.core.invok.Invokable;
2627
import cn.cheney.xrouter.core.invok.ParamInfo;
27-
import cn.cheney.xrouter.core.module.RouteModuleManager;
2828
import cn.cheney.xrouter.core.parser.DefaultParser;
2929
import cn.cheney.xrouter.core.parser.ParamParser;
3030
import cn.cheney.xrouter.core.syringe.Syringe;
@@ -36,6 +36,8 @@ public class XRouter {
3636

3737
private static final String DEFAULT_SCHEME = "xrouter";
3838

39+
private static final String ROUTER_LOAD_CLASS = "cn.cheney.xrouter.XRouterModule_Loader";
40+
3941
public static String sScheme = DEFAULT_SCHEME;
4042

4143
private static WeakReference<Activity> sTopActivityRf;
@@ -44,18 +46,17 @@ public class XRouter {
4446

4547
private static boolean hasInit;
4648

47-
private final RouteModuleManager mRouteModules;
49+
private final static Map<String, Invokable<?>> sRouterMap = new HashMap<>();
4850

4951
private final SyringeManager mSyringeManager;
5052

5153
private final List<RouterInterceptor> mInterceptorList;
5254

53-
private final ParamParser paramParser = new DefaultParser();
55+
private final ParamParser mParamParser = new DefaultParser();
5456

5557
private RouterErrorHandler mErrorHandler;
5658

5759
private XRouter() {
58-
mRouteModules = new RouteModuleManager();
5960
mInterceptorList = new ArrayList<>();
6061
mSyringeManager = new SyringeManager();
6162
}
@@ -86,9 +87,20 @@ public void onActivityResumed(@NonNull Activity activity) {
8687
if (!TextUtils.isEmpty(scheme)) {
8788
sScheme = scheme;
8889
}
90+
loadRouters();
8991
hasInit = true;
9092
}
9193

94+
private static void loadRouters() {
95+
try {
96+
Class<?> loadClass = Class.forName(ROUTER_LOAD_CLASS);
97+
Method loadInto = loadClass.getMethod("loadInto", Map.class);
98+
loadInto.invoke(null, sRouterMap);
99+
} catch (Exception e) {
100+
e.printStackTrace();
101+
}
102+
}
103+
92104
public void inject(Activity activity) {
93105
if (null == activity) {
94106
Logger.e("inject activity not null");
@@ -126,10 +138,10 @@ public void setErrorHandler(RouterErrorHandler errorHandler) {
126138
this.mErrorHandler = errorHandler;
127139
}
128140

129-
public Object proceed(Context context, BaseCall<?> call) {
141+
public Object proceed(BaseCall<?> call) {
130142
addInterceptor(new BuildInvokeInterceptor());
131143
RealChain realChain = new RealChain(call, mInterceptorList);
132-
return realChain.proceed(context, call);
144+
return realChain.proceed(call);
133145
}
134146

135147
public void onError(String url, String errorMsg) {
@@ -142,23 +154,22 @@ public Activity getTopActivity() {
142154
return sTopActivityRf.get();
143155
}
144156

145-
public RouteModuleManager getRouteModules() {
146-
return mRouteModules;
157+
158+
public static Map<String, Invokable<?>> getRouterMap() {
159+
return sRouterMap;
147160
}
148161

149162
public Object parse(BaseCall<?> call, String paramName, String paramValue) {
150-
Invokable<?> invokable = XRouter.getInstance().getRouteModules().getInvokable(call.getModule(),
151-
call.getPath());
152-
if (null == invokable
153-
|| TextUtils.isEmpty(paramName)) {
163+
Invokable<?> invokable = sRouterMap.get(call.getModule() + "/" + call.getPath());
164+
if (null == invokable || TextUtils.isEmpty(paramName)) {
154165
return paramValue;
155166
}
156167
List<ParamInfo> params = invokable.getParams();
157168
for (ParamInfo param : params) {
158169
if (paramName.equals(param.getName())) {
159170
Object parseObject = null;
160171
try {
161-
parseObject = paramParser.parse(paramName, paramValue, param.getType());
172+
parseObject = mParamParser.parse(paramName, paramValue, param.getType());
162173
} catch (Exception e) {
163174
e.printStackTrace();
164175
}

xrouter_core/src/main/java/cn/cheney/xrouter/core/call/BaseCall.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public abstract class BaseCall<R> {
1616
private String module;
1717
private String path;
1818
private Uri uri;
19+
protected Context context;
1920
Map<String, Object> paramsMap = new HashMap<>();
2021

2122
BaseCall(String uriStr) {
@@ -58,6 +59,9 @@ private void parseUri(String uriStr) {
5859
rebuild();
5960
}
6061

62+
public Context getContext() {
63+
return context;
64+
}
6165

6266
private void rebuild() {
6367
this.module = uri.getHost();

xrouter_core/src/main/java/cn/cheney/xrouter/core/call/MethodCall.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,14 @@ public R call(Context context, RouteCallback callback) {
3131
if (context == null) {
3232
context = XRouter.getInstance().getTopActivity();
3333
}
34+
this.context = context;
3435
this.paramsMap.put(XParam.Context, context);
3536
if (null != callback) {
3637
String requestId = RequestManager.getInstance().generateRequestId();
3738
this.paramsMap.put(XParam.RequestId, requestId);
3839
RequestManager.getInstance().addCallback(requestId, callback);
3940
}
40-
R result = (R) XRouter.getInstance().proceed(context, this);
41+
R result = (R) XRouter.getInstance().proceed(this);
4142
if (null == result) {
4243
if (null != callback) {
4344
callback.onResult(null);

xrouter_core/src/main/java/cn/cheney/xrouter/core/call/PageCall.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ public Integer call() {
6060
}
6161

6262
public Integer call(Context context) {
63-
return (Integer) XRouter.getInstance().proceed(context, this);
63+
this.context = context;
64+
return (Integer) XRouter.getInstance().proceed(this);
6465
}
6566

6667
}

0 commit comments

Comments
 (0)