Correct byte code generation: calculate max frames and locals by hand (they're constant anyway) to avoid altering the existing byte code; fix putfield operation.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@572587 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
index 12510f8..7e4016d 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
@@ -247,7 +247,7 @@
final ClassReader reader = new ClassReader(new FileInputStream(fileName));
reader.accept(cn, 0);
- final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
+ final ClassWriter writer = new ClassWriter(0);
cn.accept(writer);
if ( createBind ) {
this.createMethod(writer, propertyName, className, true);
@@ -274,9 +274,9 @@
} else {
mv.visitInsn(Opcodes.ACONST_NULL);
}
- mv.visitFieldInsn(Opcodes.PUTFIELD, this.getName(), propertyName, type.toString());
+ mv.visitFieldInsn(Opcodes.PUTFIELD, this.getName().replace('.', '/'), propertyName, type.toString());
mv.visitInsn(Opcodes.RETURN);
- mv.visitMaxs(0, 0);
+ mv.visitMaxs(2, 2);
// add to qdox
final JavaParameter param = new JavaParameter(new Type(typeName), "param");
final JavaParameter[] params = new JavaParameter[] {param};