< prev index next >

test/compiler/jvmci/compilerToVM/GetLineNumberTableTest.java

Print this page
rev 9261 : 8138815: improve tests CompilerToVM::getStackTraceElement

@@ -38,29 +38,15 @@
 
 import compiler.jvmci.common.CTVMUtilities;
 import compiler.jvmci.common.testcases.TestCase;
 import jdk.vm.ci.hotspot.CompilerToVMHelper;
 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
-import jdk.internal.org.objectweb.asm.ClassReader;
-import jdk.internal.org.objectweb.asm.ClassVisitor;
-import jdk.internal.org.objectweb.asm.ClassWriter;
-import jdk.internal.org.objectweb.asm.Label;
-import jdk.internal.org.objectweb.asm.MethodVisitor;
-import jdk.internal.org.objectweb.asm.Opcodes;
-import jdk.internal.org.objectweb.asm.tree.ClassNode;
 import jdk.test.lib.Asserts;
-import jdk.test.lib.Utils;
 
-import java.io.IOException;
-import java.lang.reflect.Constructor;
 import java.lang.reflect.Executable;
-import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.Map;
-import java.util.TreeMap;
 
 public class GetLineNumberTableTest {
     public static void main(String[] args) {
         TestCase.getAllExecutables()
                 .forEach(GetLineNumberTableTest::runSanityTest);

@@ -78,81 +64,21 @@
                         Arrays.toString(lineNumbers),
                         Arrays.toString(expectedLineNumbers)));
     }
 
     public static long[] getExpectedLineNumbers(Executable aMethod) {
-        try {
-            ClassReader cr = new ClassReader(aMethod.getDeclaringClass()
-                    .getName());
-            ClassNode cn = new ClassNode();
-            cr.accept(cn, ClassReader.EXPAND_FRAMES);
-
-            Map<Label, Integer> lineNumbers = new HashMap<>();
-            ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
-            ClassVisitor cv = new ClassVisitorForLabels(cw, lineNumbers,
-                    aMethod);
-            cr.accept(cv, ClassReader.EXPAND_FRAMES);
-
+        Map<Integer, Integer> bciToLine = CTVMUtilities
+                .getBciToLineNumber(aMethod);
             long[] result = null;
-            if (!lineNumbers.isEmpty()) {
-                Map<Integer, Integer> labels = new TreeMap<>();
-                lineNumbers.forEach((k, v) -> labels.put(k.getOffset(), v));
-
-                result = new long[2 * labels.size()];
+        if (!bciToLine.isEmpty()) {
+            result = new long[2 * bciToLine.size()];
                 int i = 0;
-                for (Integer key : labels.keySet()) {
+            for (Integer key : bciToLine.keySet()) {
                     result[i++] = key.longValue();
-                    result[i++] = labels.get(key).longValue();
+                result[i++] = bciToLine.get(key).longValue();
                 }
             }
             // compilerToVM::getLineNumberTable returns null in case empty table
             return result;
-        } catch (IOException e) {
-            throw new Error("TEST BUG " + e, e);
-        }
     }
 
-    private static class ClassVisitorForLabels extends ClassVisitor {
-        private final Map<Label, Integer> lineNumbers;
-        private final String targetName;
-        private final String targetDesc;
-
-        public ClassVisitorForLabels(ClassWriter cw, Map<Label, Integer> lines,
-                                     Executable target) {
-            super(Opcodes.ASM5, cw);
-            this.lineNumbers = lines;
-
-            StringBuilder builder = new StringBuilder("(");
-            for (Parameter parameter : target.getParameters()) {
-                builder.append(Utils.toJVMTypeSignature(parameter.getType()));
-            }
-            builder.append(")");
-            if (target instanceof Constructor) {
-                targetName = "<init>";
-                builder.append("V");
-            } else {
-                targetName = target.getName();
-                builder.append(Utils.toJVMTypeSignature(
-                        ((Method) target).getReturnType()));
-            }
-            targetDesc = builder.toString();
-        }
-
-        @Override
-        public final MethodVisitor visitMethod(int access, String name,
-                                               String desc, String signature,
-                                               String[] exceptions) {
-            MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
-                    exceptions);
-            if (targetDesc.equals(desc) && targetName.equals(name)) {
-                return new MethodVisitor(Opcodes.ASM5, mv) {
-                    @Override
-                    public void visitLineNumber(int i, Label label) {
-                        super.visitLineNumber(i, label);
-                        lineNumbers.put(label, i);
-                    }
-                };
-            }
-            return  mv;
-        }
-    }
 }
< prev index next >