Skip to content

Instantly share code, notes, and snippets.

@jimbaker
Created July 30, 2013 07:02
Show Gist options
  • Save jimbaker/6110872 to your computer and use it in GitHub Desktop.
Save jimbaker/6110872 to your computer and use it in GitHub Desktop.
Expose annotation processor, in Jython
import os
import os.path
import sys
from org.objectweb.asm import ClassWriter
from org.python.expose.generate import ExposedTypeProcessor
def generate(exposer):
writer = ClassWriter(ClassWriter.COMPUTE_FRAMES)
exposer.generate(writer)
write(exposer.getClassName(), writer.toByteArray())
def write(class_name, bytecode):
dest_dir = "test"
dest = os.path.join(dest_dir, class_name.replace(".", "/") + ".class")
try:
os.makedirs(os.path.dirname(dest))
except OSError:
pass
with open(dest, "wb") as out:
out.write(bytecode)
def main():
for path in sys.argv[1:]:
with open(path) as f:
etp = ExposedTypeProcessor(f)
for exposer in etp.getMethodExposers():
generate(exposer)
for exposer in etp.getDescriptorExposers():
generate(exposer)
if etp.getNewExposer():
generate(etp.getNewExposer())
generate(etp.getTypeExposer())
write(etp.getExposedClassName(), etp.getBytecode())
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment