Skip to content

Cannot modify ASM api level without reflection #12

Description

@jpenilla

When attempting to transform a jar compiled with JDK 17, I get java.lang.UnsupportedOperationException: PermittedSubclasses requires ASM9.

This is due to Atlas using the constructor for ClassProviderInheritanceProvider without an API version:

new ClassProviderInheritanceProvider(new CompositeClassProvider(classpath))
, which defaults to ASM7: https://github.com/CadixDev/Bombe/blob/446e809ffce194eb70ae3f3f9bb7db4af63bf3de/bombe/src/main/java/org/cadixdev/bombe/analysis/asm/ClassProviderInheritanceProvider.java#L71

My temporary solution has been some ugly reflection:

atlas.install {
  // Replace the inheritance provider start
  val inheritanceProvider = AtlasTransformerContext::class.java.getDeclaredField("inheritanceProvider")
  inheritanceProvider.isAccessible = true
  val classProvider = ClassProviderInheritanceProvider::class.java.getDeclaredField("provider")
  classProvider.isAccessible = true
  inheritanceProvider.set(
    it,
    ClassProviderInheritanceProvider(
      Opcodes.ASM9,
      classProvider.get(inheritanceProvider.get(it)) as ClassProvider
    )
  )
  // Replace the inheritance provider end
  
  // return transformer to install...
}

Not sure if this should be fixed in Atlas or Bombe, so I am opening this issue. Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions