src/share/classes/jdk/internal/org/objectweb/asm/tree/analysis/BasicVerifier.java

Print this page

        

@@ -74,21 +74,20 @@
  * @author Bing Ran
  */
 public class BasicVerifier extends BasicInterpreter {
 
     public BasicVerifier() {
-        super(ASM4);
+        super(ASM5);
     }
 
     protected BasicVerifier(final int api) {
         super(api);
     }
 
     @Override
-    public BasicValue copyOperation(final AbstractInsnNode insn, final BasicValue value)
-            throws AnalyzerException
-    {
+    public BasicValue copyOperation(final AbstractInsnNode insn,
+            final BasicValue value) throws AnalyzerException {
         Value expected;
         switch (insn.getOpcode()) {
             case ILOAD:
             case ISTORE:
                 expected = BasicValue.INT_VALUE;

@@ -105,24 +104,19 @@
             case DSTORE:
                 expected = BasicValue.DOUBLE_VALUE;
                 break;
             case ALOAD:
                 if (!value.isReference()) {
-                    throw new AnalyzerException(insn,
-                            null,
-                            "an object reference",
+                throw new AnalyzerException(insn, null, "an object reference",
                             value);
                 }
                 return value;
             case ASTORE:
                 if (!value.isReference()
-                        && !BasicValue.RETURNADDRESS_VALUE.equals(value))
-                {
-                    throw new AnalyzerException(insn,
-                            null,
-                            "an object reference or a return address",
-                            value);
+                    && !BasicValue.RETURNADDRESS_VALUE.equals(value)) {
+                throw new AnalyzerException(insn, null,
+                        "an object reference or a return address", value);
                 }
                 return value;
             default:
                 return value;
         }

@@ -131,13 +125,12 @@
         }
         return value;
     }
 
     @Override
-    public BasicValue unaryOperation(final AbstractInsnNode insn, final BasicValue value)
-            throws AnalyzerException
-    {
+    public BasicValue unaryOperation(final AbstractInsnNode insn,
+            final BasicValue value) throws AnalyzerException {
         BasicValue expected;
         switch (insn.getOpcode()) {
             case INEG:
             case IINC:
             case I2F:

@@ -179,25 +172,22 @@
             case D2L:
             case DRETURN:
                 expected = BasicValue.DOUBLE_VALUE;
                 break;
             case GETFIELD:
-                expected = newValue(Type.getObjectType(((FieldInsnNode) insn).owner));
+            expected = newValue(Type
+                    .getObjectType(((FieldInsnNode) insn).owner));
                 break;
             case CHECKCAST:
                 if (!value.isReference()) {
-                    throw new AnalyzerException(insn,
-                            null,
-                            "an object reference",
+                throw new AnalyzerException(insn, null, "an object reference",
                             value);
                 }
                 return super.unaryOperation(insn, value);
             case ARRAYLENGTH:
                 if (!isArrayValue(value)) {
-                    throw new AnalyzerException(insn,
-                            null,
-                            "an array reference",
+                throw new AnalyzerException(insn, null, "an array reference",
                             value);
                 }
                 return super.unaryOperation(insn, value);
             case ARETURN:
             case ATHROW:

@@ -205,13 +195,11 @@
             case MONITORENTER:
             case MONITOREXIT:
             case IFNULL:
             case IFNONNULL:
                 if (!value.isReference()) {
-                    throw new AnalyzerException(insn,
-                            null,
-                            "an object reference",
+                throw new AnalyzerException(insn, null, "an object reference",
                             value);
                 }
                 return super.unaryOperation(insn, value);
             case PUTSTATIC:
                 expected = newValue(Type.getType(((FieldInsnNode) insn).desc));

@@ -224,15 +212,13 @@
         }
         return super.unaryOperation(insn, value);
     }
 
     @Override
-    public BasicValue binaryOperation(
-        final AbstractInsnNode insn,
-        final BasicValue value1,
-        final BasicValue value2) throws AnalyzerException
-    {
+    public BasicValue binaryOperation(final AbstractInsnNode insn,
+            final BasicValue value1, final BasicValue value2)
+            throws AnalyzerException {
         BasicValue expected1;
         BasicValue expected2;
         switch (insn.getOpcode()) {
             case IALOAD:
                 expected1 = newValue(Type.getType("[I"));

@@ -340,28 +326,27 @@
                 break;
             default:
                 throw new Error("Internal error.");
         }
         if (!isSubTypeOf(value1, expected1)) {
-            throw new AnalyzerException(insn, "First argument", expected1, value1);
+            throw new AnalyzerException(insn, "First argument", expected1,
+                    value1);
         } else if (!isSubTypeOf(value2, expected2)) {
-            throw new AnalyzerException(insn, "Second argument", expected2, value2);
+            throw new AnalyzerException(insn, "Second argument", expected2,
+                    value2);
         }
         if (insn.getOpcode() == AALOAD) {
             return getElementValue(value1);
         } else {
             return super.binaryOperation(insn, value1, value2);
         }
     }
 
     @Override
-    public BasicValue ternaryOperation(
-        final AbstractInsnNode insn,
-        final BasicValue value1,
-        final BasicValue value2,
-        final BasicValue value3) throws AnalyzerException
-    {
+    public BasicValue ternaryOperation(final AbstractInsnNode insn,
+            final BasicValue value1, final BasicValue value2,
+            final BasicValue value3) throws AnalyzerException {
         BasicValue expected1;
         BasicValue expected3;
         switch (insn.getOpcode()) {
             case IASTORE:
                 expected1 = newValue(Type.getType("[I"));

@@ -401,88 +386,77 @@
                 break;
             default:
                 throw new Error("Internal error.");
         }
         if (!isSubTypeOf(value1, expected1)) {
-            throw new AnalyzerException(insn, "First argument", "a " + expected1
-                    + " array reference", value1);
+            throw new AnalyzerException(insn, "First argument", "a "
+                    + expected1 + " array reference", value1);
         } else if (!BasicValue.INT_VALUE.equals(value2)) {
             throw new AnalyzerException(insn, "Second argument",
-                    BasicValue.INT_VALUE,
-                    value2);
+                    BasicValue.INT_VALUE, value2);
         } else if (!isSubTypeOf(value3, expected3)) {
-            throw new AnalyzerException(insn, "Third argument", expected3, value3);
+            throw new AnalyzerException(insn, "Third argument", expected3,
+                    value3);
         }
         return null;
     }
 
     @Override
-    public BasicValue naryOperation(final AbstractInsnNode insn, final List<? extends BasicValue> values)
-            throws AnalyzerException
-    {
+    public BasicValue naryOperation(final AbstractInsnNode insn,
+            final List<? extends BasicValue> values) throws AnalyzerException {
         int opcode = insn.getOpcode();
         if (opcode == MULTIANEWARRAY) {
             for (int i = 0; i < values.size(); ++i) {
                 if (!BasicValue.INT_VALUE.equals(values.get(i))) {
-                    throw new AnalyzerException(insn,
-                            null,
-                            BasicValue.INT_VALUE,
-                            values.get(i));
+                    throw new AnalyzerException(insn, null,
+                            BasicValue.INT_VALUE, values.get(i));
                 }
             }
         } else {
             int i = 0;
             int j = 0;
             if (opcode != INVOKESTATIC && opcode != INVOKEDYNAMIC) {
                 Type owner = Type.getObjectType(((MethodInsnNode) insn).owner);
                 if (!isSubTypeOf(values.get(i++), newValue(owner))) {
                     throw new AnalyzerException(insn, "Method owner",
-                            newValue(owner),
-                            values.get(0));
+                            newValue(owner), values.get(0));
                 }
             }
-            String desc = (opcode == INVOKEDYNAMIC)?
-                    ((InvokeDynamicInsnNode) insn).desc:
-                        ((MethodInsnNode) insn).desc;
+            String desc = (opcode == INVOKEDYNAMIC) ? ((InvokeDynamicInsnNode) insn).desc
+                    : ((MethodInsnNode) insn).desc;
             Type[] args = Type.getArgumentTypes(desc);
             while (i < values.size()) {
                 BasicValue expected = newValue(args[j++]);
                 BasicValue encountered = values.get(i++);
                 if (!isSubTypeOf(encountered, expected)) {
-                    throw new AnalyzerException(insn,
-                            "Argument " + j,
-                            expected,
-                            encountered);
+                    throw new AnalyzerException(insn, "Argument " + j,
+                            expected, encountered);
                 }
             }
         }
         return super.naryOperation(insn, values);
     }
 
     @Override
-    public void returnOperation(
-        final AbstractInsnNode insn,
-        final BasicValue value,
-        final BasicValue expected) throws AnalyzerException
-    {
+    public void returnOperation(final AbstractInsnNode insn,
+            final BasicValue value, final BasicValue expected)
+            throws AnalyzerException {
         if (!isSubTypeOf(value, expected)) {
-            throw new AnalyzerException(insn,
-                    "Incompatible return type",
-                    expected,
-                    value);
+            throw new AnalyzerException(insn, "Incompatible return type",
+                    expected, value);
         }
     }
 
     protected boolean isArrayValue(final BasicValue value) {
         return value.isReference();
     }
 
     protected BasicValue getElementValue(final BasicValue objectArrayValue)
-            throws AnalyzerException
-    {
+            throws AnalyzerException {
         return BasicValue.REFERENCE_VALUE;
     }
 
-    protected boolean isSubTypeOf(final BasicValue value, final BasicValue expected) {
+    protected boolean isSubTypeOf(final BasicValue value,
+            final BasicValue expected) {
         return value.equals(expected);
     }
 }