Don't copy the HTML/Java synthetic fields - they will be generated at method visitEnd time. Eliminates class format errors after incremental compilations.
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 21 Nov 2015 18:05:03 +0100
changeset 1019e66e962fed13
parent 1018 82ec9872793a
child 1020 b5d5cbb44ce0
Don't copy the HTML/Java synthetic fields - they will be generated at method visitEnd time. Eliminates class format errors after incremental compilations.
boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java
     1.1 --- a/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java	Thu Nov 05 23:53:34 2015 +0100
     1.2 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java	Sat Nov 21 18:05:03 2015 +0100
     1.3 @@ -58,6 +58,7 @@
     1.4  import org.objectweb.asm.ClassReader;
     1.5  import org.objectweb.asm.ClassVisitor;
     1.6  import org.objectweb.asm.ClassWriter;
     1.7 +import org.objectweb.asm.FieldVisitor;
     1.8  import org.objectweb.asm.Label;
     1.9  import org.objectweb.asm.MethodVisitor;
    1.10  import org.objectweb.asm.Opcodes;
    1.11 @@ -169,6 +170,18 @@
    1.12              );
    1.13          }
    1.14  
    1.15 +        @Override
    1.16 +        public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
    1.17 +            if (name.startsWith("$$fn$$")) {
    1.18 +                return null;
    1.19 +            }
    1.20 +            return superField(access, name, desc, signature, value);
    1.21 +        }
    1.22 +
    1.23 +        final FieldVisitor superField(int access, String name, String desc, String signature, Object value) {
    1.24 +            return super.visitField(access, name, desc, signature, value);
    1.25 +        }
    1.26 +
    1.27          private final class FindInMethod extends MethodVisitor {
    1.28  
    1.29              private final String name;
    1.30 @@ -457,7 +470,7 @@
    1.31                  }
    1.32                  return true;
    1.33              }
    1.34 -
    1.35 +            
    1.36              @Override
    1.37              public void visitEnd() {
    1.38                  super.visitEnd();
    1.39 @@ -466,7 +479,7 @@
    1.40                          // native method
    1.41                          super.visitMaxs(1, 0);
    1.42                      }
    1.43 -                    FindInClass.this.visitField(
    1.44 +                    FindInClass.this.superField(
    1.45                              Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC,
    1.46                              "$$fn$$" + name + "_" + found,
    1.47                              "Lorg/netbeans/html/boot/spi/Fn;",