Open lancexin opened 3 years ago
@Execute("package:test/app/modules/test1_module/test1_controller.dart","Test1Controller","-onReady") @pragma("vm:entry-point") void onReady(PointCut pointcut) { Log.d('Test1Controller onReady',tag: LOG_TAG_INJECT); pointcut.proceed(); }
@Execute("package:test/app/modules/test2_module/test2_controller.dart","Test2Controller","-onReady") @pragma("vm:entry-point") void onReady2(PointCut pointcut) { Log.d('Test2Controller onReady',tag: LOG_TAG_INJECT); pointcut.proceed(); } }
发现注入了相同的方法,两个类中都有onReady方法,但是本来应该触发下面的,却出发了上面的.
修改了一下源码,解决了这个问题,在调用visitProcedure的时候添加了clsName的检测
@override void visitProcedure(Procedure node) { String procedureName = node.name.name; bool needCompareClass = false; Class originalClass = null; if(node.parent is Class){ needCompareClass = true; originalClass = node.parent; } String clsName = null; if(needCompareClass){ clsName = originalClass.name; }
AopItemInfo matchedAopItemInfo;
int aopItemInfoListLen = _aopItemInfoList.length;
for (int i = 0; i < aopItemInfoListLen && matchedAopItemInfo == null; i++) {
AopItemInfo aopItemInfo = _aopItemInfoList[i];
if ((aopItemInfo.isRegex &&
RegExp(aopItemInfo.methodName).hasMatch(procedureName)) ||
(!aopItemInfo.isRegex && procedureName == aopItemInfo.methodName )) {
if(needCompareClass){
if(aopItemInfo.clsName == clsName){
matchedAopItemInfo = aopItemInfo;
break;
}
}else{
matchedAopItemInfo = aopItemInfo;
break;
}
}
}
if (matchedAopItemInfo == null) {
return;
}
比如 文件 a.dart 里面有 TestClassA 类里面有loadSuccess方法 文件b.dart里面有 TestClassB 类里面也有loadSuccess方法
我注入了a.dart 里面的loadSuccess方法,但是b.dart里面的方法却会触发