buildtools/nasgen/src/jdk/nashorn/internal/tools/nasgen/ScriptClassInstrumentor.java

Print this page
rev 736 : 8029031: "ant clean jar" on nashorn repo results in number of ASM deprecated warnings
Reviewed-by: lagergren, jlaskey, hannesw


 129     @Override
 130     public MethodVisitor visitMethod(final int methodAccess, final String methodName,
 131             final String methodDesc, final String signature, final String[] exceptions) {
 132 
 133         final boolean isConstructor = INIT.equals(methodName);
 134         final boolean isStaticInit  = CLINIT.equals(methodName);
 135 
 136         if (isStaticInit) {
 137             staticInitFound = true;
 138         }
 139 
 140         final MethodGenerator delegateMV = new MethodGenerator(super.visitMethod(methodAccess, methodName, methodDesc,
 141                 signature, exceptions), methodAccess, methodName, methodDesc);
 142 
 143         return new MethodVisitor(Opcodes.ASM4, delegateMV) {
 144             @Override
 145             public void visitInsn(final int opcode) {
 146                 // call $clinit$ just before return from <clinit>
 147                 if (isStaticInit && opcode == RETURN) {
 148                     super.visitMethodInsn(INVOKESTATIC, scriptClassInfo.getJavaName(),
 149                             $CLINIT$, DEFAULT_INIT_DESC);
 150                 }
 151                 super.visitInsn(opcode);
 152             }
 153 
 154             @Override
 155             public void visitMethodInsn(final int opcode, final String owner, final String name, final String desc) {
 156                 if (isConstructor && opcode == INVOKESPECIAL &&
 157                         INIT.equals(name) && SCRIPTOBJECT_TYPE.equals(owner)) {
 158                     super.visitMethodInsn(opcode, owner, name, desc);
 159 
 160                     if (memberCount > 0) {
 161                         // initialize @Property fields if needed
 162                         for (final MemberInfo memInfo : scriptClassInfo.getMembers()) {
 163                             if (memInfo.isInstanceProperty() && !memInfo.getInitClass().isEmpty()) {
 164                                 final String clazz = memInfo.getInitClass();
 165                                 super.visitVarInsn(ALOAD, 0);
 166                                 super.visitTypeInsn(NEW, clazz);
 167                                 super.visitInsn(DUP);
 168                                 super.visitMethodInsn(INVOKESPECIAL, clazz,
 169                                     INIT, DEFAULT_INIT_DESC);
 170                                 super.visitFieldInsn(PUTFIELD, scriptClassInfo.getJavaName(),
 171                                     memInfo.getJavaName(), memInfo.getJavaDesc());
 172                             }
 173 
 174                             if (memInfo.isInstanceFunction()) {
 175                                 super.visitVarInsn(ALOAD, 0);
 176                                 ClassGenerator.newFunction(delegateMV, scriptClassInfo.getJavaName(), memInfo, scriptClassInfo.findSpecializations(memInfo.getJavaName()));
 177                                 super.visitFieldInsn(PUTFIELD, scriptClassInfo.getJavaName(),
 178                                     memInfo.getJavaName(), OBJECT_DESC);
 179                             }
 180                         }
 181                     }
 182                 } else {
 183                     super.visitMethodInsn(opcode, owner, name, desc);
 184                 }
 185             }
 186 
 187             @Override
 188             public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
 189                 if (ScriptClassInfo.annotations.containsKey(desc)) {
 190                     // ignore script method annotations
 191                     return null;
 192                 }
 193                 return super.visitAnnotation(desc, visible);
 194             }
 195         };
 196     }
 197 
 198     @Override
 199     public void visitEnd() {
 200         emitFields();
 201         emitStaticInitializer();
 202         emitGettersSetters();
 203         super.visitEnd();




 129     @Override
 130     public MethodVisitor visitMethod(final int methodAccess, final String methodName,
 131             final String methodDesc, final String signature, final String[] exceptions) {
 132 
 133         final boolean isConstructor = INIT.equals(methodName);
 134         final boolean isStaticInit  = CLINIT.equals(methodName);
 135 
 136         if (isStaticInit) {
 137             staticInitFound = true;
 138         }
 139 
 140         final MethodGenerator delegateMV = new MethodGenerator(super.visitMethod(methodAccess, methodName, methodDesc,
 141                 signature, exceptions), methodAccess, methodName, methodDesc);
 142 
 143         return new MethodVisitor(Opcodes.ASM4, delegateMV) {
 144             @Override
 145             public void visitInsn(final int opcode) {
 146                 // call $clinit$ just before return from <clinit>
 147                 if (isStaticInit && opcode == RETURN) {
 148                     super.visitMethodInsn(INVOKESTATIC, scriptClassInfo.getJavaName(),
 149                             $CLINIT$, DEFAULT_INIT_DESC, false);
 150                 }
 151                 super.visitInsn(opcode);
 152             }
 153 
 154             @Override
 155             public void visitMethodInsn(final int opcode, final String owner, final String name, final String desc, final boolean itf) {
 156                 if (isConstructor && opcode == INVOKESPECIAL &&
 157                         INIT.equals(name) && SCRIPTOBJECT_TYPE.equals(owner)) {
 158                     super.visitMethodInsn(opcode, owner, name, desc, false);
 159 
 160                     if (memberCount > 0) {
 161                         // initialize @Property fields if needed
 162                         for (final MemberInfo memInfo : scriptClassInfo.getMembers()) {
 163                             if (memInfo.isInstanceProperty() && !memInfo.getInitClass().isEmpty()) {
 164                                 final String clazz = memInfo.getInitClass();
 165                                 super.visitVarInsn(ALOAD, 0);
 166                                 super.visitTypeInsn(NEW, clazz);
 167                                 super.visitInsn(DUP);
 168                                 super.visitMethodInsn(INVOKESPECIAL, clazz,
 169                                     INIT, DEFAULT_INIT_DESC, false);
 170                                 super.visitFieldInsn(PUTFIELD, scriptClassInfo.getJavaName(),
 171                                     memInfo.getJavaName(), memInfo.getJavaDesc());
 172                             }
 173 
 174                             if (memInfo.isInstanceFunction()) {
 175                                 super.visitVarInsn(ALOAD, 0);
 176                                 ClassGenerator.newFunction(delegateMV, scriptClassInfo.getJavaName(), memInfo, scriptClassInfo.findSpecializations(memInfo.getJavaName()));
 177                                 super.visitFieldInsn(PUTFIELD, scriptClassInfo.getJavaName(),
 178                                     memInfo.getJavaName(), OBJECT_DESC);
 179                             }
 180                         }
 181                     }
 182                 } else {
 183                     super.visitMethodInsn(opcode, owner, name, desc, itf);
 184                 }
 185             }
 186 
 187             @Override
 188             public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
 189                 if (ScriptClassInfo.annotations.containsKey(desc)) {
 190                     // ignore script method annotations
 191                     return null;
 192                 }
 193                 return super.visitAnnotation(desc, visible);
 194             }
 195         };
 196     }
 197 
 198     @Override
 199     public void visitEnd() {
 200         emitFields();
 201         emitStaticInitializer();
 202         emitGettersSetters();
 203         super.visitEnd();