From a58e457fd5b3221bf9c9caf8edf260eaf1586fe1 Mon Sep 17 00:00:00 2001 From: tianxiangyu <96164429+FlyJingFish@users.noreply.github.com> Date: Sun, 7 Apr 2024 15:52:39 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=87=8F=E5=B0=91=E5=8F=8D=E5=B0=84?= =?UTF-8?q?=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AndroidAopJoinPoint.java | 21 +++++-------------- .../utils/AndroidAopBeanUtils.kt | 15 ------------- .../scanner_visitor/WovenIntoCode.kt | 6 +----- 3 files changed, 6 insertions(+), 36 deletions(-) diff --git a/android-aop-annotation/src/main/java/com/flyjingfish/android_aop_annotation/AndroidAopJoinPoint.java b/android-aop-annotation/src/main/java/com/flyjingfish/android_aop_annotation/AndroidAopJoinPoint.java index f7a92f95..f16ba4d3 100644 --- a/android-aop-annotation/src/main/java/com/flyjingfish/android_aop_annotation/AndroidAopJoinPoint.java +++ b/android-aop-annotation/src/main/java/com/flyjingfish/android_aop_annotation/AndroidAopJoinPoint.java @@ -15,7 +15,6 @@ public final class AndroidAopJoinPoint { private final Object target; private final Class targetClass; -// private final String targetClassName; private Object[] mArgs; private String[] mArgClassNames; private final String targetMethodName; @@ -25,24 +24,14 @@ public final class AndroidAopJoinPoint { private String cutMatchClassName; private String paramsKey; private String methodKey; - private String targetClassName; + private final String targetClassName; - public AndroidAopJoinPoint(String targetClassName, Object target, String originalMethodName, String targetMethodName) { - this.targetClassName = targetClassName; + public AndroidAopJoinPoint(Class clazz, Object target, String originalMethodName, String targetMethodName) { + this.targetClassName = clazz.getName(); this.target = target; this.originalMethodName = originalMethodName; this.targetMethodName = targetMethodName; - String key = targetClassName + "-" + target; - Class clazz = AndroidAopBeanUtils.INSTANCE.getClassCache(key); - if (clazz == null){ - try { - clazz = Class.forName(targetClassName); - AndroidAopBeanUtils.INSTANCE.putClassCache(key,clazz,target); - } catch (ClassNotFoundException e) { - throw new RuntimeException(targetClassName + "的类名不可被混淆"); - } - } - targetClass = clazz; + this.targetClass = clazz; } @@ -206,7 +195,7 @@ private void getTargetMethod(){ originalMethod.setAccessible(true); methodMap = new MethodMap(originalMethod,targetMethod); AndroidAopBeanUtils.INSTANCE.putMethodMapCache(key,methodMap,target); - } catch (Exception e) { + } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } diff --git a/android-aop-annotation/src/main/java/com/flyjingfish/android_aop_annotation/utils/AndroidAopBeanUtils.kt b/android-aop-annotation/src/main/java/com/flyjingfish/android_aop_annotation/utils/AndroidAopBeanUtils.kt index 99d54407..1fd03b43 100644 --- a/android-aop-annotation/src/main/java/com/flyjingfish/android_aop_annotation/utils/AndroidAopBeanUtils.kt +++ b/android-aop-annotation/src/main/java/com/flyjingfish/android_aop_annotation/utils/AndroidAopBeanUtils.kt @@ -13,7 +13,6 @@ internal object AndroidAopBeanUtils { private val mMatchClassMethodMap = ConcurrentHashMap() private val mTargetReferenceMap = ConcurrentHashMap>() private val mTargetMethodMap = ConcurrentHashMap() - private val mTargetClassMap = ConcurrentHashMap>() private val mTargetKeyReferenceQueue = ReferenceQueue() private val mSingleIO: ExecutorService = Executors.newSingleThreadExecutor() @@ -94,19 +93,6 @@ internal object AndroidAopBeanUtils { observeTarget(target,key) } - fun getClassCache(key: String): Class<*>? { - val clazz = mTargetClassMap[key] - if (clazz != null){ - removeWeaklyReachableObjectsOnIOThread() - } - return clazz - } - - fun putClassCache(key: String, clazz:Class<*>, target:Any?) { - mTargetClassMap[key] = clazz - observeTarget(target,key) - } - private fun observeTarget(target : Any?,key :String){ mSingleIO.execute{ if (target != null){ @@ -132,7 +118,6 @@ internal object AndroidAopBeanUtils { mBasePointCutMap.remove(ref.key) mMatchClassMethodMap.remove(ref.key) mTargetMethodMap.remove(ref.key) - mTargetClassMap.remove(ref.key) } } while (ref != null) } diff --git a/android-aop-plugin/src/main/kotlin/com/flyjingfish/android_aop_plugin/scanner_visitor/WovenIntoCode.kt b/android-aop-plugin/src/main/kotlin/com/flyjingfish/android_aop_plugin/scanner_visitor/WovenIntoCode.kt index 3c024f60..aaf5e10f 100644 --- a/android-aop-plugin/src/main/kotlin/com/flyjingfish/android_aop_plugin/scanner_visitor/WovenIntoCode.kt +++ b/android-aop-plugin/src/main/kotlin/com/flyjingfish/android_aop_plugin/scanner_visitor/WovenIntoCode.kt @@ -197,7 +197,7 @@ object WovenIntoCode { ClassNameToConversions.getReturnXObject(returnType.name), "pointCut.joinPointExecute()" ) - val constructor = "\"$targetClassName\",${if(isStaticMethod)"null" else "\$0"},\"$oldMethodName\",\"$targetMethodName\""; + val constructor = "$targetClassName.class,${if(isStaticMethod)"null" else "\$0"},\"$oldMethodName\",\"$targetMethodName\""; val body = """ {AndroidAopJoinPoint pointCut = new AndroidAopJoinPoint($constructor);"""+ (if (cutClassName != null) " pointCut.setCutMatchClassName(\"$cutClassName\");\n" else "") + @@ -206,10 +206,6 @@ object WovenIntoCode { (if (isHasArgs) " Object[] args = new Object[]{$argsBuffer};\n" else "") + (if (isHasArgs) " pointCut.setArgs(args);\n" else " pointCut.setArgs(null);\n") + " "+returnStr+";}" -// val allSignature = ctMethod.signature -// printLog("returnType = ${returnType.name}") -// printLog("allSignature = $allSignature") -// printLog(body) ctMethod.setBody(body) InitConfig.putCutInfo(value) } catch (e: NotFoundException) {