- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想同时使用 ASM Core 和 Tree API。目前,系统正在使用一定数量的ClassVisitor链接在一起来分析一个类文件。现在,在此链的末尾,我想添加另一个在 ClassNode 上工作的 Transformer。是否可以将ClassVisitor转换为ClassNode。
...
_cv = new FirstCV(_cv);
_cv = new SecondCV(_cv);
...
_cv = new ClassNodeTransformer((ClassNode) _cv); // Not sure how to achieve this step.
最佳答案
ClassVisitor
表示处理步骤,而 ClassNode
表示特定的类状态。要集成在 ClassNode
上运行的操作,您需要一个访问者,它在访问类时构建树,并在最后开始访问处理后的结果。
public abstract class IntegrateNodeTransformer extends ClassVisitor {
ClassVisitor target;
public IntegrateNodeTransformer(int api, ClassVisitor target) {
super(api, null);
this.target = target;
}
/**
* Initiate the building of a tree when the visit of a class starts.
*/
@Override
public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces) {
super.cv = new ClassNode();
super.visit(version, access, name, signature, superName, interfaces);
}
/**
* On completion of visiting the source class, process the tree and initiate
* visiting of the result by the target visitor, if there is one.
*/
@Override
public void visitEnd() {
super.visitEnd();
ClassNode source = (ClassNode)super.cv;
ClassNode result = process(source);
if(target != null) result.accept(target);
}
/**
* Do the actual work with the Tree API.
* May manipulate {@code source} directly and return it or return an entirely new tree.
*/
protected abstract ClassNode process(ClassNode source);
}
如果您只有一个使用 Tree API 的处理步骤,您可以考虑直接执行它,而不将其改造为 ClassVisitor
:
ClassReader cr = new ClassReader(…);
// steps before using the tree API
// mind that composed visitor process in the opposite order of their construction
ClassNode cn = new ClassNode();
ClassVisitor cv = new SomeClassVisitor(cn); // 3rd step
cv = new AnotherClassVisitor(cv); // 2nd step
cv = new YetAnotherClassVisitor(cv); // 1st step
cr.accept(cv, 0); // perform steps 1 to 3 and build result tree
cn = process(cn); // the Tree API based operation (4th step)
// steps after using the tree API
ClassWriter cw = new ClassWriter(cr, 0); // last generate class
cv = new YourLastClassVisitor(cw); // 7th step
cv = new InCaseYouHaveMoreClassVisitor(cv); // 6th step
cv = new YouKnowWhatIMean(cv); // 5th step
cn.accept(cv); // perform steps 5 to 7 on tree input and generate class
final byte[] code = cw.toByteArray();
关于java - 如何在ASM java中将ClassVisitor转换为ClassNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58509067/
asm的ClassVisitor中的visitCode方法接受一个字符串类型的调试参数 public final void visitSource(final String file, final S
我正在尝试在 Eclipse 中运行一个使用 java RMI 的项目,但是当我运行它时,它给出了以下错误: java.rmi.ServerError: Error occurred in serve
当我使用Jenkins构建springboot(1.4.0版本)项目时,遇到了一个问题,就是找不到类org.springframework.asm.ClassVisitor。构建错误如下: Cause
我正在学习asm,我发现了两个有趣的api 在 org.objectweb.asm.ClassVisitor 中 /** * Visits an annotation on a type in th
我已经使用 spring-mvc 和 mongodb 作为数据库构建了一个 Web 应用程序。我使用 maven3 构建应用程序。 项目构建成功,但是当应用程序启动时,我在日志中收到以下错误,因为我的
我第一次尝试使用 jersey 的 WebService。下面的代码是我从一些博客中得到的。 当我使用 jersey 客户端尝试 Java Web 服务时,出现以下 500 错误 javax.serv
我正在为我的库编写一个 gradle 插件。 https://github.com/shehabic/sherlock ,我需要在编译时在OkHttp Client的字节码中注入(inject)网络拦
我的 POM 中有这两个依赖项,我认为这是造成此问题的原因,但我尝试了许多不同的方法和更新的版本,但没有任何效果。有人可以帮忙吗?POM.XML org.springfram
我刚刚通过 ubuntu 包管理器安装了 tomcat。我打开日志,首先看到的是一个有趣的异常。 java.lang.NoClassDefFoundError: org/springframework
(原帖)将 hibernate 依赖项添加到 pom.xml 时显示错误 2011-10-11 10:36:53.710::WARN: failed guiceFilter java.lang.No
迁移到 Jersey 2 时我不断收到此错误。起初我以为这是一些 Maven 问题,但看起来并非如此。我不断得到:AnnotatedClassVisitor 将接口(interface) jersey
我正在尝试在web-logic 12c中部署我的遗留应用程序,但问题是每次它都会显示异常,例如>“ClassNotFoundException:org.objectweb.asm.ClassVisit
我正在使用 Jasper Reports 并在我的类路径中使用以下库 jasperreports-4.5.1.jar common-digester3-3.2.jar common-digester2
我将 struts2 版本从 2.5.2 更改为 2.5.10.1,但我开始收到此错误。看起来新版本没有读取任何 Action 类。我需要用它更改任何其他库吗?我的应用程序正常启动,但我在控制台中看到
当我在 Spring 3.2.2 旁边添加 Spring-security 3.1.4 时,我在下面遇到了这个丑陋的异常。我在谷歌上搜索了一下,只得到了这个关于同样错误的链接: http://foru
当我试图在 Eclipse 上的 Spring 中运行一个简单的静态切入点示例时,我遇到了这个错误消息:- java.lang.IncompatibleClassChangeError: class
运行 swagger2 时出现以下异常。我在网上看到这通常是由于引用了同一个 jar 的多个不同版本。但是,我只在我的 gradle jar 文件夹中找到了 org.ow2.asm:asm:5.0.3
我是一名优秀的程序员,十分优秀!