diff --git a/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/ClassProviderInheritanceProvider.java b/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/ClassProviderInheritanceProvider.java index ceee144..b178a31 100644 --- a/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/ClassProviderInheritanceProvider.java +++ b/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/ClassProviderInheritanceProvider.java @@ -33,6 +33,7 @@ import org.cadixdev.bombe.analysis.InheritanceProvider; import org.cadixdev.bombe.jar.ClassProvider; import org.objectweb.asm.ClassReader; +import org.objectweb.asm.Opcodes; import java.util.Optional; @@ -45,19 +46,38 @@ */ public class ClassProviderInheritanceProvider implements InheritanceProvider { + private final int api; private final ClassProvider provider; - public ClassProviderInheritanceProvider(final ClassProvider provider) { + /** + * Creates a new inheritance provider backed by a class provider. + * + * @param api The ASM API version to use + * @param provider The class provider + * @since 0.3.3 + */ + public ClassProviderInheritanceProvider(final int api, final ClassProvider provider) { + this.api = api; this.provider = provider; } + /** + * Creates a new inheritance provider backed by a class provider, defaulting to + * {@link Opcodes#ASM7}. + * + * @param provider The class provider + */ + public ClassProviderInheritanceProvider(final ClassProvider provider) { + this(Opcodes.ASM7, provider); + } + @Override public Optional provide(final String klass) { final byte[] classBytes = this.provider.get(klass); if (classBytes == null) return Optional.empty(); final ClassReader reader = new ClassReader(classBytes); - final InheritanceClassInfoVisitor classInfoVisitor = new InheritanceClassInfoVisitor(); + final InheritanceClassInfoVisitor classInfoVisitor = new InheritanceClassInfoVisitor(this.api); reader.accept(classInfoVisitor, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); return Optional.of(classInfoVisitor.create()); } diff --git a/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/InheritanceClassInfoVisitor.java b/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/InheritanceClassInfoVisitor.java index eeb5fc9..f5efa3f 100644 --- a/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/InheritanceClassInfoVisitor.java +++ b/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/InheritanceClassInfoVisitor.java @@ -56,8 +56,8 @@ class InheritanceClassInfoVisitor extends ClassVisitor { private final Map fieldsByName = new HashMap<>(); private final Map methods = new HashMap<>(); - InheritanceClassInfoVisitor() { - super(Opcodes.ASM6); + InheritanceClassInfoVisitor(final int api) { + super(api); } InheritanceProvider.ClassInfo create() { diff --git a/build.gradle b/build.gradle index 7fd4245..ffa6679 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ subprojects { group = 'org.cadixdev' archivesBaseName = project.name.toLowerCase() - version = '0.4.1' + version = '0.4.2' repositories { mavenCentral() diff --git a/changelogs/0.3.3.md b/changelogs/0.3.3.md new file mode 100644 index 0000000..970cd5b --- /dev/null +++ b/changelogs/0.3.3.md @@ -0,0 +1,11 @@ +Bombe 0.3.3 +=========== + +Bombe 0.3.3 resolves an oversight when bumping to ASM 7, notably that our +`ClassProviderInheritanceProvider` was still using `ASM6` - this has now been +resolved to use `ASM7`, in addition to a new constructor to allow for +third-parties to specify which ASM API version they wish to use. + +*As Bombe 0.3.x is still in use by the latest version of Lorenz and Atlas, and +used in software running today - this is why a further release to 0.3 is being +made*. diff --git a/changelogs/0.4.2.md b/changelogs/0.4.2.md new file mode 100644 index 0000000..a4e7982 --- /dev/null +++ b/changelogs/0.4.2.md @@ -0,0 +1,9 @@ +Bombe 0.4.2 +=========== + +Bombe 0.4.2 resolves an oversight when bumping to ASM 7, notably that our +`ClassProviderInheritanceProvider` was still using `ASM6` - this has now been +resolved to use `ASM7`, in addition to a new constructor to allow for +third-parties to specify which ASM API version they wish to use. + +An equivalent change was made in Bombe 0.3.3.