我星空 2021-12-28 16:51 采纳率: 0%
浏览 22
已结题

aspect织入lambda失败

现有表达式应切入所有参数为android.view.View 的lambda方法,事实也确实如此

    //切点
    @Around("execution(void *.lambda$*$*(android.view.View))")
    public void onLambdaClick(ProceedingJoinPoint joinPoint) throws Throwable {
        Log.e(TAG, "lambda click拦截 ");
      //  if (!NoDoubleClickUtils.isDoubleClick()) {
        //    joinPoint.proceed();
       // }
    }

// 实现代码
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.bt1).setOnClickListener(o -> {
            Log.e("aspect", "执行");
        });

        findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Test().set(j -> {

                });
            }
        });
    }
}


```java
// 自定义测试切点
public class Test {
    public interface IFunctionTest {
        void print(View x);
    }

    public void set(Test.IFunctionTest iFunctionTest) {
        Log.e("TAG", "set: ");
    }

}


//  织入后代码
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.example.test1;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.runtime.reflect.Factory;

public class MainActivity extends Activity {
    public MainActivity() {
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(2131427356);
        this.findViewById(2131230808).setOnClickListener((o) -> {
            JoinPoint var2 = Factory.makeJP(ajc$tjp_0, (Object)null, (Object)null, o);
            lambda$onCreate$0_aroundBody1$advice(o, var2, OnClick.aspectOf(), (ProceedingJoinPoint)var2);
        });
        this.findViewById(2131230807).setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                (new Test()).set((j) -> {
                    JoinPoint var2 = Factory.makeJP(ajc$tjp_0, (Object)null, (Object)null, j);
                    lambda$onClick$0_aroundBody1$advice(j, var2, OnClick.aspectOf(), (ProceedingJoinPoint)var2);
                });
            }

            static {
                ajc$preClinit();
            }
        });
    }

    static {
        ajc$preClinit();
    }
}



new Test().set()方法确实被识别并织入成功,但点击织入代码没有生效。求解答

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-12-29 18:11
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 创建了问题 12月28日

悬赏问题

  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强