You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2014/12/17 15:28:08 UTC

svn commit: r1646254 - /commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java

Author: ebourg
Date: Wed Dec 17 14:28:08 2014
New Revision: 1646254

URL: http://svn.apache.org/r1646254
Log:
Check the flags on the instance initialization methods only when inspecting a class

Modified:
    commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java

Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java?rev=1646254&r1=1646253&r2=1646254&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java Wed Dec 17 14:28:08 2014
@@ -677,6 +677,19 @@ public final class Pass2Verifier extends
                         throw new ClassConstraintException("Abstract method '"+tostring(obj)+"' must not have the ACC_SYNCHRONIZED modifier set.");
                     }
                 }
+
+                // A specific instance initialization method... (vmspec2,Page 116).
+                if (name.equals(CONSTRUCTOR_NAME)) {
+                    //..may have at most one of ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC set: is checked above.
+                    //..may also have ACC_STRICT set, but none of the other flags in table 4.5 (vmspec2, page 115)
+                    if (obj.isStatic() ||
+                            obj.isFinal() ||
+                            obj.isSynchronized() ||
+                            obj.isNative() ||
+                            obj.isAbstract()) {
+                        throw new ClassConstraintException("Instance initialization method '" + tostring(obj) + "' must not have any of the ACC_STATIC, ACC_FINAL, ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT modifiers set.");
+                    }
+                }
             }
             else{ // isInterface!
                 if (!name.equals(STATIC_INITIALIZER_NAME)){//vmspec2, p.116, 2nd paragraph
@@ -711,19 +724,6 @@ public final class Pass2Verifier extends
                 }
             }
 
-            // A specific instance initialization method... (vmspec2,Page 116).
-            if (name.equals(CONSTRUCTOR_NAME)){
-                //..may have at most one of ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC set: is checked above.
-                //..may also have ACC_STRICT set, but none of the other flags in table 4.5 (vmspec2, page 115)
-                if (    obj.isStatic() ||
-                            obj.isFinal() ||
-                            obj.isSynchronized() ||
-                            obj.isNative() ||
-                            obj.isAbstract() ){
-                    throw new ClassConstraintException("Instance initialization method '"+tostring(obj)+"' must not have any of the ACC_STATIC, ACC_FINAL, ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT modifiers set.");
-                }
-            }
-
             // Class and interface initialization methods...
             if (name.equals(STATIC_INITIALIZER_NAME)){
                 if ((obj.getAccessFlags() & (~ACC_STRICT)) > 0){