-
ASM-13-向后兼容守则
守则
本节介绍了使用核心ASM API时必须遵循的准则,以确保您的代码在将来的任何ASM版本中均保持有效(按照上述合同的意义)。
首先,如果您编写类生成器,则没有任何可遵循的准则。
例如,如果您为ASM 4.0编写了一个类生成器,则它可能会包含一个诸如 visitSource(mySource, myDebug) 之类的调用,当然也不会包含对visitLicense的调用。
如果使用...
2018-07-20 05:43:31 |
Java
-
ASM-12-向后兼容
向后兼容
介绍
过去已经以类文件格式引入了新元素,并且将来将继续添加新元素(例如,用于模块化,Java类型的注释等)。
直到ASM 3.x,每个此类更改都导致ASM API中向后不兼容的更改,这是不好的。
为了解决这些问题,ASM 4.0中引入了一种新的机制。
其目标是确保即使将来在类文件格式中引入了新功能时,所有将来的ASM版本都将保持与任何先前版本(直至ASM 4.0)的向后兼...
2018-07-20 05:43:31 |
Java
-
ASM-11-Metadata Debug 调试
Debug
使用 javac -g 编译的类包含其源文件的名称,源行号和字节码指令之间的映射以及源代码中的本地变量名称和字节码中的本地变量槽之间的映射。
此可选信息在调试器中以及可用时在异常堆栈跟踪中使用。
结构体
类的源文件名存储在专用的类文件结构部分中(请参见图2.1)。
源行号和字节码指令之间的映射存储为方法的已编译代码部分中(行号,标签)对的列表。
例如,如果l1,l2和...
2018-07-20 05:43:31 |
Java
-
ASM-10-Metadata Annotation 注解
注解
如果类,字段,方法和方法参数注解(例如@Deprecated或@Override)存储在已编译的类中,则它们的保留策略不是RetentionPolicy.SOURCE。
该信息在运行时不会由字节码指令使用,但是如果保留策略为RetentionPolicy.RUNTIME,则可以通过反射API进行访问。
编译器也可以使用它。
结构
结构体
源代码中的注解可以采用多种形式,例如...
2018-07-20 05:43:31 |
Java
-
ASM-09-Metadata Generic 泛型
注解
本章说明如何使用核心API生成和转换已编译的Java类元数据,例如注解。
每个部分均以一种类型的元数据开始呈现,然后以一些说明性示例呈现相应的ASM接口,组件和工具以生成和转换这些元数据。
泛型
诸如 List<E> 之类的通用类以及使用它们的类包含有关它们声明或使用的通用类型的信息。
字节码指令在运行时不使用此信息,但是可以通过反射API进行访问。
编译器还使...
2018-07-20 05:43:31 |
Java
-
ASM-08-Method 方法增强实战
Method 回顾
上面几节谈论了大量的 method 方法,感觉 ASM 提供了很多强大的功能。
但是缺少实战有时候就比较没有实感,所以选择一个比较简单的例子进行编码。
一点想法
基本信息
可以基于 asm 获取 class 的基本信息
reflect
可以学习 ReflectASM 的思想,自己基于 ASM 实现 field/method 等较为高效的调用。
aop
直...
2018-07-20 05:43:31 |
Java
-
ASM-07-Method Tools 工具类
Tools
org.objectweb.asm.commons 软件包包含一些预定义的方法适配器,这些适配器可用于定义您自己的适配器。
本节介绍其中的三个,并说明如何将它们与3.2.4节的AddTimerAdapter示例一起使用。
它还显示了如何使用上一章中介绍的工具简化方法的生成或转换。
Basic tools
2.3 节中介绍的工具也可以用于方法。
Type
许多字节码指...
2018-07-20 05:43:31 |
Java
-
ASM-06-Method Interface and Components
介绍
用于生成和转换已编译方法的ASM API基于MethodVisitor抽象类(请参见图3.4),该类由ClassVisitor的visitMethod方法返回。
除了下一章中将介绍的与注释和调试信息有关的一些方法外,此类还基于以下内容为每个字节码指令类别定义了一个方法:
这些指令的参数数量和类型(这些类别与3.1.2节中介绍的类别不对应)。
必须按以下顺序调用这些方法(在Met...
2018-07-20 05:43:31 |
Java