Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/IntList.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/IntList.java?rev=1749603&r1=1749602&r2=1749603&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/IntList.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/IntList.java Tue Jun 21 20:50:19 2016 @@ -39,9 +39,9 @@ public class IntList{ } /** Checks if the specified int is already in the list. */ boolean contains(final int i) { - Integer[] ints = new Integer[theList.size()]; + final Integer[] ints = new Integer[theList.size()]; theList.toArray(ints); - for (Integer k : ints) { + for (final Integer k : ints) { if (i == k.intValue()) { return true; }
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java?rev=1749603&r1=1749602&r2=1749603&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java Tue Jun 21 20:50:19 2016 @@ -56,7 +56,7 @@ public final class Pass1Verifier extends if (jc == null) { try { jc = Repository.lookupClass(myOwner.getClassName()); - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: currently, Pass1Verifier treats jc == null as a special // case, so we don't need to do anything here. A better solution // would be to simply throw the ClassNotFoundException @@ -160,13 +160,13 @@ public final class Pass1Verifier extends } } - catch(LoadingException e) { + catch(final LoadingException e) { return new VerificationResult(VerificationResult.VERIFIED_REJECTED, e.getMessage()); } - catch(ClassFormatException e) { + catch(final ClassFormatException e) { return new VerificationResult(VerificationResult.VERIFIED_REJECTED, e.getMessage()); } - catch(RuntimeException e) { + catch(final RuntimeException e) { // BCEL does not catch every possible RuntimeException; e.g. if // a constant pool index is referenced that does not exist. return new VerificationResult(VerificationResult.VERIFIED_REJECTED, "Parsing via BCEL did not succeed. "+ 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=1749603&r1=1749602&r2=1749603&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 Tue Jun 21 20:50:19 2016 @@ -149,7 +149,7 @@ public final class Pass2Verifier extends @Override public VerificationResult do_verify() { try { - VerificationResult vr1 = myOwner.doPass1(); + final VerificationResult vr1 = myOwner.doPass1(); if (vr1.equals(VerificationResult.VR_OK)) { // For every method, we could have information about the local variables out of LocalVariableTable attributes of @@ -163,14 +163,14 @@ public final class Pass2Verifier extends every_class_has_an_accessible_superclass(); final_methods_are_not_overridden(); } - catch (ClassConstraintException cce) { + catch (final ClassConstraintException cce) { vr = new VerificationResult(VerificationResult.VERIFIED_REJECTED, cce.getMessage()); } return vr; } return VerificationResult.VR_NOTYET; - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: this might not be the best way to handle missing classes. throw new AssertionViolatedException("Missing class: " + e, e); } @@ -191,7 +191,7 @@ public final class Pass2Verifier extends */ private void every_class_has_an_accessible_superclass() { try { - Set<String> hs = new HashSet<>(); // save class names to detect circular inheritance + final Set<String> hs = new HashSet<>(); // save class names to detect circular inheritance JavaClass jc = Repository.lookupClass(myOwner.getClassName()); int supidx = -1; @@ -205,12 +205,12 @@ public final class Pass2Verifier extends } } else{ - String supername = jc.getSuperclassName(); + final String supername = jc.getSuperclassName(); if (! hs.add(supername)) { // If supername already is in the list throw new ClassConstraintException("Circular superclass hierarchy detected."); } - Verifier v = VerifierFactory.getVerifier(supername); - VerificationResult vr = v.doPass1(); + final Verifier v = VerifierFactory.getVerifier(supername); + final VerificationResult vr = v.doPass1(); if (vr != VerificationResult.VR_OK) { throw new ClassConstraintException("Could not load in ancestor class '"+supername+"'."); @@ -224,7 +224,7 @@ public final class Pass2Verifier extends } } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: this might not be the best way to handle missing classes. throw new AssertionViolatedException("Missing class: " + e, e); } @@ -243,16 +243,16 @@ public final class Pass2Verifier extends */ private void final_methods_are_not_overridden() { try { - Map<String, String> hashmap = new HashMap<>(); + final Map<String, String> hashmap = new HashMap<>(); JavaClass jc = Repository.lookupClass(myOwner.getClassName()); int supidx = -1; while (supidx != 0) { supidx = jc.getSuperclassNameIndex(); - Method[] methods = jc.getMethods(); - for (Method method : methods) { - String nameAndSig = method.getName() + method.getSignature(); + final Method[] methods = jc.getMethods(); + for (final Method method : methods) { + final String nameAndSig = method.getName() + method.getSignature(); if (hashmap.containsKey(nameAndSig)) { if (method.isFinal()) { @@ -280,7 +280,7 @@ public final class Pass2Verifier extends // Well, for OBJECT this returns OBJECT so it works (could return anything but must not throw an Exception). } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: this might not be the best way to handle missing classes. throw new AssertionViolatedException("Missing class: " + e, e); } @@ -298,10 +298,10 @@ public final class Pass2Verifier extends // Most of the consistency is handled internally by BCEL; here // we only have to verify if the indices of the constants point // to constants of the appropriate type and such. - JavaClass jc = Repository.lookupClass(myOwner.getClassName()); + final JavaClass jc = Repository.lookupClass(myOwner.getClassName()); new CPESSC_Visitor(jc); // constructor implicitly traverses jc - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: this might not be the best way to handle missing classes. throw new AssertionViolatedException("Missing class: " + e, e); } @@ -365,7 +365,7 @@ public final class Pass2Verifier extends if ((index < 0) || (index >= cplen)) { throw new ClassConstraintException("Invalid index '"+index+"' used by '"+tostring(referrer)+"'."); } - Constant c = cp.getConstant(index); + final Constant c = cp.getConstant(index); if (! shouldbe.isInstance(c)) { /* String isnot = shouldbe.toString().substring(shouldbe.toString().lastIndexOf(".")+1); //Cut all before last "." */ throw new ClassCastException("Illegal constant '"+tostring(c)+"' at index '"+ @@ -377,15 +377,15 @@ public final class Pass2Verifier extends /////////////////////////////////////// @Override public void visitJavaClass(final JavaClass obj) { - Attribute[] atts = obj.getAttributes(); + final Attribute[] atts = obj.getAttributes(); boolean foundSourceFile = false; boolean foundInnerClasses = false; // Is there an InnerClass referenced? // This is a costly check; existing verifiers don't do it! - boolean hasInnerClass = new InnerClassDetector(jc).innerClassReferenced(); + final boolean hasInnerClass = new InnerClassDetector(jc).innerClassReferenced(); - for (Attribute att : atts) { + for (final Attribute att : atts) { if ((!(att instanceof SourceFile)) && (!(att instanceof Deprecated)) && (!(att instanceof InnerClasses)) && @@ -570,7 +570,7 @@ public final class Pass2Verifier extends checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = obj.getName(); + final String name = obj.getName(); if (! validFieldName(name)) { throw new ClassConstraintException("Field '"+tostring(obj)+"' has illegal name '"+obj.getName()+"'."); } @@ -578,16 +578,16 @@ public final class Pass2Verifier extends // A descriptor is often named signature in BCEL checkIndex(obj, obj.getSignatureIndex(), CONST_Utf8); - String sig = ((ConstantUtf8) (cp.getConstant(obj.getSignatureIndex()))).getBytes(); // Field or Method sig.(=descriptor) + final String sig = ((ConstantUtf8) (cp.getConstant(obj.getSignatureIndex()))).getBytes(); // Field or Method sig.(=descriptor) try{ Type.getType(sig); /* Don't need the return value */ } - catch (ClassFormatException cfe) { + catch (final ClassFormatException cfe) { throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.", cfe); } - String nameanddesc = name+sig; + final String nameanddesc = name+sig; if (field_names_and_desc.contains(nameanddesc)) { throw new ClassConstraintException("No two fields (like '"+tostring(obj)+ "') are allowed have same names and descriptors!"); @@ -599,8 +599,8 @@ public final class Pass2Verifier extends field_names_and_desc.add(nameanddesc); field_names.add(name); - Attribute[] atts = obj.getAttributes(); - for (Attribute att : atts) { + final Attribute[] atts = obj.getAttributes(); + for (final Attribute att : atts) { if ((!(att instanceof ConstantValue)) && (!(att instanceof Synthetic)) && (!(att instanceof Deprecated))) { @@ -621,7 +621,7 @@ public final class Pass2Verifier extends checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = obj.getName(); + final String name = obj.getName(); if (! validMethodName(name, true)) { throw new ClassConstraintException("Method '"+tostring(obj)+"' has illegal name '"+name+"'."); } @@ -629,7 +629,7 @@ public final class Pass2Verifier extends // A descriptor is often named signature in BCEL checkIndex(obj, obj.getSignatureIndex(), CONST_Utf8); - String sig = ((ConstantUtf8) (cp.getConstant(obj.getSignatureIndex()))).getBytes(); // Method's signature(=descriptor) + final String sig = ((ConstantUtf8) (cp.getConstant(obj.getSignatureIndex()))).getBytes(); // Method's signature(=descriptor) Type t; Type[] ts; // needed below the try block. @@ -637,7 +637,7 @@ public final class Pass2Verifier extends t = Type.getReturnType(sig); ts = Type.getArgumentTypes(sig); } - catch (ClassFormatException cfe) { + catch (final ClassFormatException cfe) { throw new ClassConstraintException( "Illegal descriptor (==signature) '"+sig+"' used by Method '"+tostring(obj)+"'.", cfe); } @@ -648,22 +648,22 @@ public final class Pass2Verifier extends act = ((ArrayType) act).getBasicType(); } if (act instanceof ObjectType) { - Verifier v = VerifierFactory.getVerifier( ((ObjectType) act).getClassName() ); - VerificationResult vr = v.doPass1(); + final Verifier v = VerifierFactory.getVerifier( ((ObjectType) act).getClassName() ); + final VerificationResult vr = v.doPass1(); if (vr != VerificationResult.VR_OK) { throw new ClassConstraintException( "Method '"+tostring(obj)+"' has a return type that does not pass verification pass 1: '"+vr+"'."); } } - for (Type element : ts) { + for (final Type element : ts) { act = element; if (act instanceof ArrayType) { act = ((ArrayType) act).getBasicType(); } if (act instanceof ObjectType) { - Verifier v = VerifierFactory.getVerifier( ((ObjectType) act).getClassName() ); - VerificationResult vr = v.doPass1(); + final Verifier v = VerifierFactory.getVerifier( ((ObjectType) act).getClassName() ); + final VerificationResult vr = v.doPass1(); if (vr != VerificationResult.VR_OK) { throw new ClassConstraintException( "Method '"+tostring(obj)+"' has an argument type that does not pass verification pass 1: '"+vr+"'."); @@ -783,16 +783,16 @@ public final class Pass2Verifier extends " ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT, ACC_STRICT set (ignored)."); } - String nameanddesc = name+sig; + final String nameanddesc = name+sig; if (method_names_and_desc.contains(nameanddesc)) { throw new ClassConstraintException( "No two methods (like '"+tostring(obj)+"') are allowed have same names and desciptors!"); } method_names_and_desc.add(nameanddesc); - Attribute[] atts = obj.getAttributes(); + final Attribute[] atts = obj.getAttributes(); int num_code_atts = 0; - for (Attribute att : atts) { + for (final Attribute att : atts) { if ((!(att instanceof Code)) && (!(att instanceof ExceptionTable)) && (!(att instanceof Synthetic)) && @@ -828,7 +828,7 @@ public final class Pass2Verifier extends checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); + final String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); if (! name.equals("SourceFile")) { throw new ClassConstraintException( "The SourceFile attribute '"+tostring(obj)+"' is not correctly named 'SourceFile' but '"+name+"'."); @@ -836,8 +836,8 @@ public final class Pass2Verifier extends checkIndex(obj, obj.getSourceFileIndex(), CONST_Utf8); - String sourcefilename = ((ConstantUtf8) cp.getConstant(obj.getSourceFileIndex())).getBytes(); //==obj.getSourceFileName() ? - String sourcefilenamelc = sourcefilename.toLowerCase(Locale.ENGLISH); + final String sourcefilename = ((ConstantUtf8) cp.getConstant(obj.getSourceFileIndex())).getBytes(); //==obj.getSourceFileName() ? + final String sourcefilenamelc = sourcefilename.toLowerCase(Locale.ENGLISH); if ( (sourcefilename.indexOf('/') != -1) || (sourcefilename.indexOf('\\') != -1) || @@ -852,7 +852,7 @@ public final class Pass2Verifier extends public void visitDeprecated(final Deprecated obj) {//vmspec2 4.7.10 checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); + final String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); if (! name.equals("Deprecated")) { throw new ClassConstraintException("The Deprecated attribute '"+tostring(obj)+ "' is not correctly named 'Deprecated' but '"+name+"'."); @@ -861,7 +861,7 @@ public final class Pass2Verifier extends @Override public void visitSynthetic(final Synthetic obj) {//vmspec2 4.7.6 checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); + final String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); if (! name.equals("Synthetic")) { throw new ClassConstraintException( "The Synthetic attribute '"+tostring(obj)+"' is not correctly named 'Synthetic' but '"+name+"'."); @@ -874,21 +874,21 @@ public final class Pass2Verifier extends checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); + final String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); if (! name.equals("InnerClasses")) { throw new ClassConstraintException( "The InnerClasses attribute '"+tostring(obj)+"' is not correctly named 'InnerClasses' but '"+name+"'."); } - InnerClass[] ics = obj.getInnerClasses(); + final InnerClass[] ics = obj.getInnerClasses(); - for (InnerClass ic : ics) { + for (final InnerClass ic : ics) { checkIndex(obj, ic.getInnerClassIndex(), CONST_Class); - int outer_idx = ic.getOuterClassIndex(); + final int outer_idx = ic.getOuterClassIndex(); if (outer_idx != 0) { checkIndex(obj, outer_idx, CONST_Class); } - int innername_idx = ic.getInnerNameIndex(); + final int innername_idx = ic.getInnerNameIndex(); if (innername_idx != 0) { checkIndex(obj, innername_idx, CONST_Utf8); } @@ -912,23 +912,23 @@ public final class Pass2Verifier extends // not a constant! checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); + final String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); if (! name.equals("ConstantValue")) { throw new ClassConstraintException( "The ConstantValue attribute '"+tostring(obj)+"' is not correctly named 'ConstantValue' but '"+name+"'."); } - Object pred = carrier.predecessor(); + final Object pred = carrier.predecessor(); if (pred instanceof Field) { //ConstantValue attributes are quite senseless if the predecessor is not a field. - Field f = (Field) pred; + final Field f = (Field) pred; // Field constraints have been checked before -- so we are safe using their type information. - Type field_type = Type.getType(((ConstantUtf8) (cp.getConstant(f.getSignatureIndex()))).getBytes()); + final Type field_type = Type.getType(((ConstantUtf8) (cp.getConstant(f.getSignatureIndex()))).getBytes()); - int index = obj.getConstantValueIndex(); + final int index = obj.getConstantValueIndex(); if ((index < 0) || (index >= cplen)) { throw new ClassConstraintException("Invalid index '"+index+"' used by '"+tostring(obj)+"'."); } - Constant c = cp.getConstant(index); + final Constant c = cp.getConstant(index); if (CONST_Long.isInstance(c) && field_type.equals(Type.LONG)) { return; @@ -964,7 +964,7 @@ public final class Pass2Verifier extends checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); + final String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); if (! name.equals("Code")) { throw new ClassConstraintException( "The Code attribute '"+tostring(obj)+"' is not correctly named 'Code' but '"+name+"'."); @@ -985,15 +985,15 @@ public final class Pass2Verifier extends } //In JustIce, the check for correct offsets into the code array is delayed to Pass 3a. - CodeException[] exc_table = obj.getExceptionTable(); - for (CodeException element : exc_table) { - int exc_index = element.getCatchType(); + final CodeException[] exc_table = obj.getExceptionTable(); + for (final CodeException element : exc_table) { + final int exc_index = element.getCatchType(); if (exc_index != 0) { // if 0, it catches all Throwables checkIndex(obj, exc_index, CONST_Class); - ConstantClass cc = (ConstantClass) (cp.getConstant(exc_index)); + final ConstantClass cc = (ConstantClass) (cp.getConstant(exc_index)); // cannot be sure this ConstantClass has already been visited (checked)! checkIndex(cc, cc.getNameIndex(), CONST_Utf8); - String cname = ((ConstantUtf8) cp.getConstant(cc.getNameIndex())).getBytes().replace('/','.'); + final String cname = ((ConstantUtf8) cp.getConstant(cc.getNameIndex())).getBytes().replace('/','.'); Verifier v = VerifierFactory.getVerifier(cname); VerificationResult vr = v.doPass1(); @@ -1006,8 +1006,8 @@ public final class Pass2Verifier extends // We cannot safely trust any other "instanceof" mechanism. We need to transitively verify // the ancestor hierarchy. JavaClass e = Repository.lookupClass(cname); - JavaClass t = Repository.lookupClass(Type.THROWABLE.getClassName()); - JavaClass o = Repository.lookupClass(Type.OBJECT.getClassName()); + final JavaClass t = Repository.lookupClass(Type.THROWABLE.getClassName()); + final JavaClass o = Repository.lookupClass(Type.OBJECT.getClassName()); while (e != o) { if (e == t) { break; // It's a subclass of Throwable, OKAY, leave. @@ -1035,7 +1035,7 @@ public final class Pass2Verifier extends // This is highly unelegant due to usage of the Visitor pattern. // TODO: rework it. int method_number = -1; - Method[] ms = Repository.lookupClass(myOwner.getClassName()).getMethods(); + final Method[] ms = Repository.lookupClass(myOwner.getClassName()).getMethods(); for (int mn=0; mn<ms.length; mn++) { if (m == ms[mn]) { method_number = mn; @@ -1050,7 +1050,7 @@ public final class Pass2Verifier extends int num_of_lvt_attribs = 0; // Now iterate through the attributes the Code attribute has. - Attribute[] atts = obj.getAttributes(); + final Attribute[] atts = obj.getAttributes(); for (int a=0; a<atts.length; a++) { if ((! (atts[a] instanceof LineNumberTable)) && (! (atts[a] instanceof LocalVariableTable))) { @@ -1068,41 +1068,41 @@ public final class Pass2Verifier extends //one certain Code attribute. if (atts[a] instanceof LocalVariableTable) { // checks conforming to vmspec2 4.7.9 - LocalVariableTable lvt = (LocalVariableTable) atts[a]; + final LocalVariableTable lvt = (LocalVariableTable) atts[a]; checkIndex(lvt, lvt.getNameIndex(), CONST_Utf8); - String lvtname = ((ConstantUtf8) cp.getConstant(lvt.getNameIndex())).getBytes(); + final String lvtname = ((ConstantUtf8) cp.getConstant(lvt.getNameIndex())).getBytes(); if (! lvtname.equals("LocalVariableTable")) { throw new ClassConstraintException("The LocalVariableTable attribute '"+tostring(lvt)+ "' is not correctly named 'LocalVariableTable' but '"+lvtname+"'."); } - Code code = obj; + final Code code = obj; //In JustIce, the check for correct offsets into the code array is delayed to Pass 3a. - LocalVariable[] localvariables = lvt.getLocalVariableTable(); + final LocalVariable[] localvariables = lvt.getLocalVariableTable(); - for (LocalVariable localvariable : localvariables) { + for (final LocalVariable localvariable : localvariables) { checkIndex(lvt, localvariable.getNameIndex(), CONST_Utf8); - String localname = ((ConstantUtf8) cp.getConstant(localvariable.getNameIndex())).getBytes(); + final String localname = ((ConstantUtf8) cp.getConstant(localvariable.getNameIndex())).getBytes(); if (!validJavaIdentifier(localname)) { throw new ClassConstraintException("LocalVariableTable '"+tostring(lvt)+ "' references a local variable by the name '"+localname+"' which is not a legal Java simple name."); } checkIndex(lvt, localvariable.getSignatureIndex(), CONST_Utf8); - String localsig = + final String localsig = ((ConstantUtf8) (cp.getConstant(localvariable.getSignatureIndex()))).getBytes(); // Local sig.(=descriptor) Type t; try{ t = Type.getType(localsig); } - catch (ClassFormatException cfe) { + catch (final ClassFormatException cfe) { throw new ClassConstraintException("Illegal descriptor (==signature) '"+localsig+ "' used by LocalVariable '"+tostring(localvariable)+"' referenced by '"+tostring(lvt)+"'.", cfe); } - int localindex = localvariable.getIndex(); + final int localindex = localvariable.getIndex(); if ( ( (t==Type.LONG || t==Type.DOUBLE)? localindex+1:localindex) >= code.getMaxLocals()) { throw new ClassConstraintException("LocalVariableTable attribute '"+tostring(lvt)+ "' references a LocalVariable '"+tostring(localvariable)+ @@ -1114,7 +1114,7 @@ public final class Pass2Verifier extends localVariablesInfos[method_number].add(localindex, localname, localvariable.getStartPC(), localvariable.getLength(), t); } - catch(LocalVariableInfoInconsistentException lviie) { + catch(final LocalVariableInfoInconsistentException lviie) { throw new ClassConstraintException("Conflicting information in LocalVariableTable '"+tostring(lvt)+ "' found in Code attribute '"+tostring(obj)+ "' (method '"+tostring(m)+"'). "+lviie.getMessage(), lviie); @@ -1130,7 +1130,7 @@ public final class Pass2Verifier extends }// if atts[a] instanceof LocalVariableTable END }// for all attributes atts[a] END - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: this might not be the best way to handle missing classes. throw new AssertionViolatedException("Missing class: " + e, e); } @@ -1143,21 +1143,21 @@ public final class Pass2Verifier extends // incorrectly named, it's the Exceptions attribute (vmspec2 4.7.4) checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); + final String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); if (! name.equals("Exceptions")) { throw new ClassConstraintException( "The Exceptions attribute '"+tostring(obj)+"' is not correctly named 'Exceptions' but '"+name+"'."); } - int[] exc_indices = obj.getExceptionIndexTable(); + final int[] exc_indices = obj.getExceptionIndexTable(); - for (int exc_indice : exc_indices) { + for (final int exc_indice : exc_indices) { checkIndex(obj, exc_indice, CONST_Class); - ConstantClass cc = (ConstantClass) (cp.getConstant(exc_indice)); + final ConstantClass cc = (ConstantClass) (cp.getConstant(exc_indice)); checkIndex(cc, cc.getNameIndex(), CONST_Utf8); // can't be sure this ConstantClass has already been visited (checked)! //convert internal notation on-the-fly to external notation: - String cname = ((ConstantUtf8) cp.getConstant(cc.getNameIndex())).getBytes().replace('/','.'); + final String cname = ((ConstantUtf8) cp.getConstant(cc.getNameIndex())).getBytes().replace('/','.'); Verifier v = VerifierFactory.getVerifier(cname); VerificationResult vr = v.doPass1(); @@ -1169,8 +1169,8 @@ public final class Pass2Verifier extends // We cannot safely trust any other "instanceof" mechanism. We need to transitively verify // the ancestor hierarchy. JavaClass e = Repository.lookupClass(cname); - JavaClass t = Repository.lookupClass(Type.THROWABLE.getClassName()); - JavaClass o = Repository.lookupClass(Type.OBJECT.getClassName()); + final JavaClass t = Repository.lookupClass(Type.THROWABLE.getClassName()); + final JavaClass o = Repository.lookupClass(Type.OBJECT.getClassName()); while (e != o) { if (e == t) { break; // It's a subclass of Throwable, OKAY, leave. @@ -1191,7 +1191,7 @@ public final class Pass2Verifier extends } } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: this might not be the best way to handle missing classes. throw new AssertionViolatedException("Missing class: " + e, e); } @@ -1205,7 +1205,7 @@ public final class Pass2Verifier extends public void visitLineNumberTable(final LineNumberTable obj) {//vmspec2 4.7.8 checkIndex(obj, obj.getNameIndex(), CONST_Utf8); - String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); + final String name = ((ConstantUtf8) cp.getConstant(obj.getNameIndex())).getBytes(); if (! name.equals("LineNumberTable")) { throw new ClassConstraintException("The LineNumberTable attribute '"+tostring(obj)+ "' is not correctly named 'LineNumberTable' but '"+name+"'."); @@ -1286,11 +1286,11 @@ public final class Pass2Verifier extends */ private void field_and_method_refs_are_valid() { try { - JavaClass jc = Repository.lookupClass(myOwner.getClassName()); - DescendingVisitor v = new DescendingVisitor(jc, new FAMRAV_Visitor(jc)); + final JavaClass jc = Repository.lookupClass(myOwner.getClassName()); + final DescendingVisitor v = new DescendingVisitor(jc, new FAMRAV_Visitor(jc)); v.visit(); - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: this might not be the best way to handle missing classes. throw new AssertionViolatedException("Missing class: " + e, e); } @@ -1316,26 +1316,26 @@ public final class Pass2Verifier extends if (obj.getTag() != Const.CONSTANT_Fieldref) { throw new ClassConstraintException("ConstantFieldref '"+tostring(obj)+"' has wrong tag!"); } - int name_and_type_index = obj.getNameAndTypeIndex(); - ConstantNameAndType cnat = (ConstantNameAndType) (cp.getConstant(name_and_type_index)); - String name = ((ConstantUtf8) (cp.getConstant(cnat.getNameIndex()))).getBytes(); // Field or Method name + final int name_and_type_index = obj.getNameAndTypeIndex(); + final ConstantNameAndType cnat = (ConstantNameAndType) (cp.getConstant(name_and_type_index)); + final String name = ((ConstantUtf8) (cp.getConstant(cnat.getNameIndex()))).getBytes(); // Field or Method name if (!validFieldName(name)) { throw new ClassConstraintException("Invalid field name '"+name+"' referenced by '"+tostring(obj)+"'."); } - int class_index = obj.getClassIndex(); - ConstantClass cc = (ConstantClass) (cp.getConstant(class_index)); - String className = ((ConstantUtf8) (cp.getConstant(cc.getNameIndex()))).getBytes(); // Class Name in internal form + final int class_index = obj.getClassIndex(); + final ConstantClass cc = (ConstantClass) (cp.getConstant(class_index)); + final String className = ((ConstantUtf8) (cp.getConstant(cc.getNameIndex()))).getBytes(); // Class Name in internal form if (! validClassName(className)) { throw new ClassConstraintException("Illegal class name '"+className+"' used by '"+tostring(obj)+"'."); } - String sig = ((ConstantUtf8) (cp.getConstant(cnat.getSignatureIndex()))).getBytes(); // Field or Method sig.(=descriptor) + final String sig = ((ConstantUtf8) (cp.getConstant(cnat.getSignatureIndex()))).getBytes(); // Field or Method sig.(=descriptor) try{ Type.getType(sig); /* Don't need the return value */ } - catch (ClassFormatException cfe) { + catch (final ClassFormatException cfe) { throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.", cfe); } } @@ -1345,30 +1345,30 @@ public final class Pass2Verifier extends if (obj.getTag() != Const.CONSTANT_Methodref) { throw new ClassConstraintException("ConstantMethodref '"+tostring(obj)+"' has wrong tag!"); } - int name_and_type_index = obj.getNameAndTypeIndex(); - ConstantNameAndType cnat = (ConstantNameAndType) (cp.getConstant(name_and_type_index)); - String name = ((ConstantUtf8) (cp.getConstant(cnat.getNameIndex()))).getBytes(); // Field or Method name + final int name_and_type_index = obj.getNameAndTypeIndex(); + final ConstantNameAndType cnat = (ConstantNameAndType) (cp.getConstant(name_and_type_index)); + final String name = ((ConstantUtf8) (cp.getConstant(cnat.getNameIndex()))).getBytes(); // Field or Method name if (!validClassMethodName(name)) { throw new ClassConstraintException( "Invalid (non-interface) method name '"+name+"' referenced by '"+tostring(obj)+"'."); } - int class_index = obj.getClassIndex(); - ConstantClass cc = (ConstantClass) (cp.getConstant(class_index)); - String className = ((ConstantUtf8) (cp.getConstant(cc.getNameIndex()))).getBytes(); // Class Name in internal form + final int class_index = obj.getClassIndex(); + final ConstantClass cc = (ConstantClass) (cp.getConstant(class_index)); + final String className = ((ConstantUtf8) (cp.getConstant(cc.getNameIndex()))).getBytes(); // Class Name in internal form if (! validClassName(className)) { throw new ClassConstraintException("Illegal class name '"+className+"' used by '"+tostring(obj)+"'."); } - String sig = ((ConstantUtf8) (cp.getConstant(cnat.getSignatureIndex()))).getBytes(); // Field or Method sig.(=descriptor) + final String sig = ((ConstantUtf8) (cp.getConstant(cnat.getSignatureIndex()))).getBytes(); // Field or Method sig.(=descriptor) try{ - Type t = Type.getReturnType(sig); + final Type t = Type.getReturnType(sig); if ( name.equals(Const.CONSTRUCTOR_NAME) && (t != Type.VOID) ) { throw new ClassConstraintException("Instance initialization method must have VOID return type."); } } - catch (ClassFormatException cfe) { + catch (final ClassFormatException cfe) { throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.", cfe); } } @@ -1378,31 +1378,31 @@ public final class Pass2Verifier extends if (obj.getTag() != Const.CONSTANT_InterfaceMethodref) { throw new ClassConstraintException("ConstantInterfaceMethodref '"+tostring(obj)+"' has wrong tag!"); } - int name_and_type_index = obj.getNameAndTypeIndex(); - ConstantNameAndType cnat = (ConstantNameAndType) (cp.getConstant(name_and_type_index)); - String name = ((ConstantUtf8) (cp.getConstant(cnat.getNameIndex()))).getBytes(); // Field or Method name + final int name_and_type_index = obj.getNameAndTypeIndex(); + final ConstantNameAndType cnat = (ConstantNameAndType) (cp.getConstant(name_and_type_index)); + final String name = ((ConstantUtf8) (cp.getConstant(cnat.getNameIndex()))).getBytes(); // Field or Method name if (!validInterfaceMethodName(name)) { throw new ClassConstraintException("Invalid (interface) method name '"+name+"' referenced by '"+tostring(obj)+"'."); } - int class_index = obj.getClassIndex(); - ConstantClass cc = (ConstantClass) (cp.getConstant(class_index)); - String className = ((ConstantUtf8) (cp.getConstant(cc.getNameIndex()))).getBytes(); // Class Name in internal form + final int class_index = obj.getClassIndex(); + final ConstantClass cc = (ConstantClass) (cp.getConstant(class_index)); + final String className = ((ConstantUtf8) (cp.getConstant(cc.getNameIndex()))).getBytes(); // Class Name in internal form if (! validClassName(className)) { throw new ClassConstraintException("Illegal class name '"+className+"' used by '"+tostring(obj)+"'."); } - String sig = ((ConstantUtf8) (cp.getConstant(cnat.getSignatureIndex()))).getBytes(); // Field or Method sig.(=descriptor) + final String sig = ((ConstantUtf8) (cp.getConstant(cnat.getSignatureIndex()))).getBytes(); // Field or Method sig.(=descriptor) try{ - Type t = Type.getReturnType(sig); + final Type t = Type.getReturnType(sig); if ( name.equals(Const.STATIC_INITIALIZER_NAME) && (t != Type.VOID) ) { addMessage("Class or interface initialization method '"+Const.STATIC_INITIALIZER_NAME+ "' usually has VOID return type instead of '"+t+ "'. Note this is really not a requirement of The Java Virtual Machine Specification, Second Edition."); } } - catch (ClassFormatException cfe) { + catch (final ClassFormatException cfe) { throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.", cfe); } @@ -1552,9 +1552,9 @@ public final class Pass2Verifier extends /** This method casually visits ConstantClass references. */ @Override public void visitConstantClass(final ConstantClass obj) { - Constant c = cp.getConstant(obj.getNameIndex()); + final Constant c = cp.getConstant(obj.getNameIndex()); if (c instanceof ConstantUtf8) { //Ignore the case where it's not a ConstantUtf8 here, we'll find out later. - String classname = ((ConstantUtf8) c).getBytes(); + final String classname = ((ConstantUtf8) c).getBytes(); if (classname.startsWith(jc.getClassName().replace('.','/')+"$")) { hasInnerClass = true; } Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java?rev=1749603&r1=1749602&r2=1749603&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java Tue Jun 21 20:50:19 2016 @@ -162,12 +162,12 @@ public final class Pass3aVerifier extend if (myOwner.doPass2().equals(VerificationResult.VR_OK)) { // Okay, class file was loaded correctly by Pass 1 // and satisfies static constraints of Pass 2. - JavaClass jc = Repository.lookupClass(myOwner.getClassName()); - Method[] methods = jc.getMethods(); + final JavaClass jc = Repository.lookupClass(myOwner.getClassName()); + final Method[] methods = jc.getMethods(); if (method_no >= methods.length) { throw new InvalidMethodException("METHOD DOES NOT EXIST!"); } - Method method = methods[method_no]; + final Method method = methods[method_no]; code = method.getCode(); // No Code? Nothing to verify! @@ -187,7 +187,7 @@ public final class Pass3aVerifier extend try{ instructionList = new InstructionList(method.getCode().getCode()); } - catch(RuntimeException re) { + catch(final RuntimeException re) { return new VerificationResult(VerificationResult.VERIFIED_REJECTED, "Bad bytecode in the code array of the Code attribute of method '"+method+"'."); } @@ -199,7 +199,7 @@ public final class Pass3aVerifier extend try{ delayedPass2Checks(); } - catch(ClassConstraintException cce) { + catch(final ClassConstraintException cce) { vr = new VerificationResult(VerificationResult.VERIFIED_REJECTED, cce.getMessage()); return vr; } @@ -207,17 +207,17 @@ public final class Pass3aVerifier extend pass3StaticInstructionChecks(); pass3StaticInstructionOperandsChecks(); } - catch(StaticCodeConstraintException scce) { + catch(final StaticCodeConstraintException scce) { vr = new VerificationResult(VerificationResult.VERIFIED_REJECTED, scce.getMessage()); } - catch(ClassCastException cce) { + catch(final ClassCastException cce) { vr = new VerificationResult(VerificationResult.VERIFIED_REJECTED, "Class Cast Exception: " + cce.getMessage()); } return vr; } //did not pass Pass 2. return VerificationResult.VR_NOTYET; - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -234,21 +234,21 @@ public final class Pass3aVerifier extend */ private void delayedPass2Checks() { - int[] instructionPositions = instructionList.getInstructionPositions(); - int codeLength = code.getCode().length; + final int[] instructionPositions = instructionList.getInstructionPositions(); + final int codeLength = code.getCode().length; ///////////////////// // LineNumberTable // ///////////////////// - LineNumberTable lnt = code.getLineNumberTable(); + final LineNumberTable lnt = code.getLineNumberTable(); if (lnt != null) { - LineNumber[] lineNumbers = lnt.getLineNumberTable(); - IntList offsets = new IntList(); + final LineNumber[] lineNumbers = lnt.getLineNumberTable(); + final IntList offsets = new IntList(); lineNumber_loop: - for (LineNumber lineNumber : lineNumbers) { // may appear in any order. - for (int instructionPosition : instructionPositions) { + for (final LineNumber lineNumber : lineNumbers) { // may appear in any order. + for (final int instructionPosition : instructionPositions) { // TODO: Make this a binary search! The instructionPositions array is naturally ordered! - int offset = lineNumber.getStartPC(); + final int offset = lineNumber.getStartPC(); if (instructionPosition == offset) { if (offsets.contains(offset)) { addMessage("LineNumberTable attribute '" + code.getLineNumberTable() + @@ -271,14 +271,14 @@ public final class Pass3aVerifier extend /////////////////////////// /* We cannot use code.getLocalVariableTable() because there could be more than only one. This is a bug in BCEL. */ - Attribute[] atts = code.getAttributes(); - for (Attribute att : atts) { + final Attribute[] atts = code.getAttributes(); + for (final Attribute att : atts) { if (att instanceof LocalVariableTable) { - LocalVariableTable lvt = (LocalVariableTable) att; - LocalVariable[] localVariables = lvt.getLocalVariableTable(); - for (LocalVariable localVariable : localVariables) { - int startpc = localVariable.getStartPC(); - int length = localVariable.getLength(); + final LocalVariableTable lvt = (LocalVariableTable) att; + final LocalVariable[] localVariables = lvt.getLocalVariableTable(); + for (final LocalVariable localVariable : localVariables) { + final int startpc = localVariable.getStartPC(); + final int length = localVariable.getLength(); if (!contains(instructionPositions, startpc)) { throw new ClassConstraintException("Code attribute '" + code @@ -301,11 +301,11 @@ public final class Pass3aVerifier extend // In BCEL's "classfile" API, the startPC/endPC-notation is // inclusive/exclusive as in the Java Virtual Machine Specification. // WARNING: This is not true for BCEL's "generic" API. - CodeException[] exceptionTable = code.getExceptionTable(); - for (CodeException element : exceptionTable) { - int startpc = element.getStartPC(); - int endpc = element.getEndPC(); - int handlerpc = element.getHandlerPC(); + final CodeException[] exceptionTable = code.getExceptionTable(); + for (final CodeException element : exceptionTable) { + final int startpc = element.getStartPC(); + final int endpc = element.getEndPC(); + final int handlerpc = element.getHandlerPC(); if (startpc >= endpc) { throw new ClassConstraintException("Code attribute '"+code+"' has an exception_table entry '"+element+ "' that has its start_pc ('"+startpc+"') not smaller than its end_pc ('"+endpc+"')."); @@ -362,7 +362,7 @@ public final class Pass3aVerifier extend // We currently go the safe way here. InstructionHandle ih = instructionList.getStart(); while (ih != null) { - Instruction i = ih.getInstruction(); + final Instruction i = ih.getInstruction(); if (i instanceof IMPDEP1) { throw new StaticCodeInstructionConstraintException( "IMPDEP1 must not be in the code, it is an illegal instruction for _internal_ JVM use!"); @@ -382,7 +382,7 @@ public final class Pass3aVerifier extend // An unreachable last instruction may also not fall through the // end of the code, which is stupid -- but with the original // verifier's subroutine semantics one cannot predict reachability. - Instruction last = instructionList.getEnd().getInstruction(); + final Instruction last = instructionList.getEnd().getInstruction(); if (! ((last instanceof ReturnInstruction) || (last instanceof RET) || (last instanceof GotoInstruction) || @@ -416,17 +416,17 @@ public final class Pass3aVerifier extend // TODO: Implement as much as possible here. BCEL does _not_ check everything. - ConstantPoolGen cpg = new ConstantPoolGen(Repository.lookupClass(myOwner.getClassName()).getConstantPool()); - InstOperandConstraintVisitor v = new InstOperandConstraintVisitor(cpg); + final ConstantPoolGen cpg = new ConstantPoolGen(Repository.lookupClass(myOwner.getClassName()).getConstantPool()); + final InstOperandConstraintVisitor v = new InstOperandConstraintVisitor(cpg); // Checks for the things BCEL does _not_ handle itself. InstructionHandle ih = instructionList.getStart(); while (ih != null) { - Instruction i = ih.getInstruction(); + final Instruction i = ih.getInstruction(); // An "own" constraint, due to JustIce's new definition of what "subroutine" means. if (i instanceof JsrInstruction) { - InstructionHandle target = ((JsrInstruction) i).getTarget(); + final InstructionHandle target = ((JsrInstruction) i).getTarget(); if (target == instructionList.getStart()) { throw new StaticCodeInstructionOperandConstraintException( "Due to JustIce's clear definition of subroutines, no JSR or JSR_W may have a top-level instruction"+ @@ -445,7 +445,7 @@ public final class Pass3aVerifier extend ih = ih.getNext(); } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -453,7 +453,7 @@ public final class Pass3aVerifier extend /** A small utility method returning if a given int i is in the given int[] ints. */ private static boolean contains(final int[] ints, final int i) { - for (int k : ints) { + for (final int k : ints) { if (k==i) { return true; } @@ -486,7 +486,7 @@ public final class Pass3aVerifier extend private int max_locals() { try { return Repository.lookupClass(myOwner.getClassName()).getMethods()[method_no].getCode().getMaxLocals(); - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -518,10 +518,10 @@ public final class Pass3aVerifier extend */ @Override public void visitLoadClass(final LoadClass o) { - ObjectType t = o.getLoadClassType(cpg); + final ObjectType t = o.getLoadClassType(cpg); if (t != null) {// null means "no class is loaded" - Verifier v = VerifierFactory.getVerifier(t.getClassName()); - VerificationResult vr = v.doPass1(); + final Verifier v = VerifierFactory.getVerifier(t.getClassName()); + final VerificationResult vr = v.doPass1(); if (vr.getStatus() != VerificationResult.VERIFIED_OK) { constraintViolated((Instruction) o, "Class '"+o.getLoadClassType(cpg).getClassName()+"' is referenced, but cannot be loaded: '"+vr+"'."); @@ -541,7 +541,7 @@ public final class Pass3aVerifier extend @Override public void visitLDC(final LDC o) { indexValid(o, o.getIndex()); - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (c instanceof ConstantClass) { addMessage("Operand of LDC or LDC_W is CONSTANT_Class '"+c+"' - this is only supported in JDK 1.5 and higher."); } @@ -560,7 +560,7 @@ public final class Pass3aVerifier extend @Override public void visitLDC2_W(final LDC2_W o) { indexValid(o, o.getIndex()); - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! ( (c instanceof ConstantLong) || (c instanceof ConstantDouble) ) ) { constraintViolated(o, "Operand of LDC2_W must be CONSTANT_Long or CONSTANT_Double, but is '"+c+"'."); @@ -568,13 +568,13 @@ public final class Pass3aVerifier extend try{ indexValid(o, o.getIndex()+1); } - catch(StaticCodeInstructionOperandConstraintException e) { + catch(final StaticCodeInstructionOperandConstraintException e) { throw new AssertionViolatedException("OOPS: Does not BCEL handle that? LDC2_W operand has a problem.", e); } } private ObjectType getObjectType(final FieldInstruction o) { - ReferenceType rt = o.getReferenceType(cpg); + final ReferenceType rt = o.getReferenceType(cpg); if(rt instanceof ObjectType) { return (ObjectType)rt; } @@ -588,20 +588,20 @@ public final class Pass3aVerifier extend public void visitFieldInstruction(final FieldInstruction o) { try { indexValid(o, o.getIndex()); - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantFieldref)) { constraintViolated(o, "Indexing a constant that's not a CONSTANT_Fieldref but a '"+c+"'."); } - String field_name = o.getFieldName(cpg); + final String field_name = o.getFieldName(cpg); - JavaClass jc = Repository.lookupClass(getObjectType(o).getClassName()); + final JavaClass jc = Repository.lookupClass(getObjectType(o).getClassName()); Field[] fields = jc.getFields(); Field f = null; - for (Field field : fields) { + for (final Field field : fields) { if (field.getName().equals(field_name)) { - Type f_type = Type.getType(field.getSignature()); - Type o_type = o.getType(cpg); + final Type f_type = Type.getType(field.getSignature()); + final Type o_type = o.getType(cpg); /* TODO: Check if assignment compatibility is sufficient. * What does Sun do? */ @@ -612,14 +612,14 @@ public final class Pass3aVerifier extend } } if (f == null) { - JavaClass[] superclasses = jc.getSuperClasses(); + final JavaClass[] superclasses = jc.getSuperClasses(); outer: - for (JavaClass superclass : superclasses) { + for (final JavaClass superclass : superclasses) { fields = superclass.getFields(); - for (Field field : fields) { + for (final Field field : fields) { if (field.getName().equals(field_name)) { - Type f_type = Type.getType(field.getSignature()); - Type o_type = o.getType(cpg); + final Type f_type = Type.getType(field.getSignature()); + final Type o_type = o.getType(cpg); if (f_type.equals(o_type)) { f = field; if ((f.getAccessFlags() & (Const.ACC_PUBLIC | Const.ACC_PROTECTED)) == 0) { @@ -651,7 +651,7 @@ public final class Pass3aVerifier extend /* TODO: Check for access modifiers here. */ } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -664,14 +664,14 @@ public final class Pass3aVerifier extend if ( (o instanceof INVOKEVIRTUAL) || (o instanceof INVOKESPECIAL) || (o instanceof INVOKESTATIC) ) { - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantMethodref)) { constraintViolated(o, "Indexing a constant that's not a CONSTANT_Methodref but a '"+c+"'."); } else{ // Constants are okay due to pass2. - ConstantNameAndType cnat = (ConstantNameAndType) (cpg.getConstant(((ConstantMethodref) c).getNameAndTypeIndex())); - ConstantUtf8 cutf8 = (ConstantUtf8) (cpg.getConstant(cnat.getNameIndex())); + final ConstantNameAndType cnat = (ConstantNameAndType) (cpg.getConstant(((ConstantMethodref) c).getNameAndTypeIndex())); + final ConstantUtf8 cutf8 = (ConstantUtf8) (cpg.getConstant(cnat.getNameIndex())); if (cutf8.getBytes().equals(Const.CONSTRUCTOR_NAME) && (!(o instanceof INVOKESPECIAL)) ) { constraintViolated(o, "Only INVOKESPECIAL is allowed to invoke instance initialization methods."); } @@ -683,7 +683,7 @@ public final class Pass3aVerifier extend } } else{ //if (o instanceof INVOKEINTERFACE) { - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantInterfaceMethodref)) { constraintViolated(o, "Indexing a constant that's not a CONSTANT_InterfaceMethodref but a '"+c+"'."); } @@ -693,9 +693,9 @@ public final class Pass3aVerifier extend // By now, BCEL hides those two operands because they're superfluous. // Invoked method must not be <init> or <clinit> - ConstantNameAndType cnat = + final ConstantNameAndType cnat = (ConstantNameAndType) (cpg.getConstant(((ConstantInterfaceMethodref)c).getNameAndTypeIndex())); - String name = ((ConstantUtf8) (cpg.getConstant(cnat.getNameIndex()))).getBytes(); + final String name = ((ConstantUtf8) (cpg.getConstant(cnat.getNameIndex()))).getBytes(); if (name.equals(Const.CONSTRUCTOR_NAME)) { constraintViolated(o, "Method to invoke must not be '"+Const.CONSTRUCTOR_NAME+"'."); } @@ -711,22 +711,22 @@ public final class Pass3aVerifier extend t = ((ArrayType) t).getBasicType(); } if (t instanceof ObjectType) { - Verifier v = VerifierFactory.getVerifier(((ObjectType) t).getClassName()); - VerificationResult vr = v.doPass2(); + final Verifier v = VerifierFactory.getVerifier(((ObjectType) t).getClassName()); + final VerificationResult vr = v.doPass2(); if (vr.getStatus() != VerificationResult.VERIFIED_OK) { constraintViolated(o, "Return type class/interface could not be verified successfully: '"+vr.getMessage()+"'."); } } - Type[] ts = o.getArgumentTypes(cpg); - for (Type element : ts) { + final Type[] ts = o.getArgumentTypes(cpg); + for (final Type element : ts) { t = element; if (t instanceof ArrayType) { t = ((ArrayType) t).getBasicType(); } if (t instanceof ObjectType) { - Verifier v = VerifierFactory.getVerifier(((ObjectType) t).getClassName()); - VerificationResult vr = v.doPass2(); + final Verifier v = VerifierFactory.getVerifier(((ObjectType) t).getClassName()); + final VerificationResult vr = v.doPass2(); if (vr.getStatus() != VerificationResult.VERIFIED_OK) { constraintViolated(o, "Argument type class/interface could not be verified successfully: '"+vr.getMessage()+"'."); @@ -740,7 +740,7 @@ public final class Pass3aVerifier extend @Override public void visitINSTANCEOF(final INSTANCEOF o) { indexValid(o, o.getIndex()); - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)) { constraintViolated(o, "Expecting a CONSTANT_Class operand, but found a '"+c+"'."); } @@ -750,7 +750,7 @@ public final class Pass3aVerifier extend @Override public void visitCHECKCAST(final CHECKCAST o) { indexValid(o, o.getIndex()); - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)) { constraintViolated(o, "Expecting a CONSTANT_Class operand, but found a '"+c+"'."); } @@ -760,13 +760,13 @@ public final class Pass3aVerifier extend @Override public void visitNEW(final NEW o) { indexValid(o, o.getIndex()); - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)) { constraintViolated(o, "Expecting a CONSTANT_Class operand, but found a '"+c+"'."); } else{ - ConstantUtf8 cutf8 = (ConstantUtf8) (cpg.getConstant( ((ConstantClass) c).getNameIndex() )); - Type t = Type.getType("L"+cutf8.getBytes()+";"); + final ConstantUtf8 cutf8 = (ConstantUtf8) (cpg.getConstant( ((ConstantClass) c).getNameIndex() )); + final Type t = Type.getType("L"+cutf8.getBytes()+";"); if (t instanceof ArrayType) { constraintViolated(o, "NEW must not be used to create an array."); } @@ -778,17 +778,17 @@ public final class Pass3aVerifier extend @Override public void visitMULTIANEWARRAY(final MULTIANEWARRAY o) { indexValid(o, o.getIndex()); - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)) { constraintViolated(o, "Expecting a CONSTANT_Class operand, but found a '"+c+"'."); } - int dimensions2create = o.getDimensions(); + final int dimensions2create = o.getDimensions(); if (dimensions2create < 1) { constraintViolated(o, "Number of dimensions to create must be greater than zero."); } - Type t = o.getType(cpg); + final Type t = o.getType(cpg); if (t instanceof ArrayType) { - int dimensions = ((ArrayType) t).getDimensions(); + final int dimensions = ((ArrayType) t).getDimensions(); if (dimensions < dimensions2create) { constraintViolated(o, "Not allowed to create array with more dimensions ('"+dimensions2create+ @@ -805,13 +805,13 @@ public final class Pass3aVerifier extend @Override public void visitANEWARRAY(final ANEWARRAY o) { indexValid(o, o.getIndex()); - Constant c = cpg.getConstant(o.getIndex()); + final Constant c = cpg.getConstant(o.getIndex()); if (! (c instanceof ConstantClass)) { constraintViolated(o, "Expecting a CONSTANT_Class operand, but found a '"+c+"'."); } - Type t = o.getType(cpg); + final Type t = o.getType(cpg); if (t instanceof ArrayType) { - int dimensions = ((ArrayType) t).getDimensions(); + final int dimensions = ((ArrayType) t).getDimensions(); if (dimensions > Const.MAX_ARRAY_DIMENSIONS) { constraintViolated(o, "Not allowed to create an array with more than "+ Const.MAX_ARRAY_DIMENSIONS + " dimensions;"+ @@ -823,7 +823,7 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitNEWARRAY(final NEWARRAY o) { - byte t = o.getTypecode(); + final byte t = o.getTypecode(); if (! ( (t == Const.T_BOOLEAN) || (t == Const.T_CHAR) || (t == Const.T_FLOAT) || @@ -839,12 +839,12 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitILOAD(final ILOAD o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ - int maxminus1 = max_locals()-1; + final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } @@ -854,12 +854,12 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitFLOAD(final FLOAD o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ - int maxminus1 = max_locals()-1; + final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } @@ -869,12 +869,12 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitALOAD(final ALOAD o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ - int maxminus1 = max_locals()-1; + final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } @@ -884,12 +884,12 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitISTORE(final ISTORE o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ - int maxminus1 = max_locals()-1; + final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } @@ -899,12 +899,12 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitFSTORE(final FSTORE o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ - int maxminus1 = max_locals()-1; + final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } @@ -914,12 +914,12 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitASTORE(final ASTORE o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ - int maxminus1 = max_locals()-1; + final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } @@ -929,12 +929,12 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitIINC(final IINC o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ - int maxminus1 = max_locals()-1; + final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } @@ -944,12 +944,12 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitRET(final RET o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."); } else{ - int maxminus1 = max_locals()-1; + final int maxminus1 = max_locals()-1; if (idx > maxminus1) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-1 '"+maxminus1+"'."); } @@ -959,13 +959,13 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitLLOAD(final LLOAD o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."+ " [Constraint by JustIce as an analogon to the single-slot xLOAD/xSTORE instructions; may not happen anyway.]"); } else{ - int maxminus2 = max_locals()-2; + final int maxminus2 = max_locals()-2; if (idx > maxminus2) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-2 '"+maxminus2+"'."); } @@ -975,13 +975,13 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitDLOAD(final DLOAD o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."+ " [Constraint by JustIce as an analogon to the single-slot xLOAD/xSTORE instructions; may not happen anyway.]"); } else{ - int maxminus2 = max_locals()-2; + final int maxminus2 = max_locals()-2; if (idx > maxminus2) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-2 '"+maxminus2+"'."); } @@ -991,13 +991,13 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitLSTORE(final LSTORE o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."+ " [Constraint by JustIce as an analogon to the single-slot xLOAD/xSTORE instructions; may not happen anyway.]"); } else{ - int maxminus2 = max_locals()-2; + final int maxminus2 = max_locals()-2; if (idx > maxminus2) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-2 '"+maxminus2+"'."); } @@ -1007,13 +1007,13 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitDSTORE(final DSTORE o) { - int idx = o.getIndex(); + final int idx = o.getIndex(); if (idx < 0) { constraintViolated(o, "Index '"+idx+"' must be non-negative."+ " [Constraint by JustIce as an analogon to the single-slot xLOAD/xSTORE instructions; may not happen anyway.]"); } else{ - int maxminus2 = max_locals()-2; + final int maxminus2 = max_locals()-2; if (idx > maxminus2) { constraintViolated(o, "Index '"+idx+"' must not be greater than max_locals-2 '"+maxminus2+"'."); } @@ -1023,7 +1023,7 @@ public final class Pass3aVerifier extend /** Checks if the constraints of operands of the said instruction(s) are satisfied. */ @Override public void visitLOOKUPSWITCH(final LOOKUPSWITCH o) { - int[] matchs = o.getMatchs(); + final int[] matchs = o.getMatchs(); int max = Integer.MIN_VALUE; for (int i=0; i<matchs.length; i++) { if (matchs[i] == max && i != 0) { @@ -1049,11 +1049,11 @@ public final class Pass3aVerifier extend @Override public void visitPUTSTATIC(final PUTSTATIC o) { try { - String field_name = o.getFieldName(cpg); - JavaClass jc = Repository.lookupClass(getObjectType(o).getClassName()); - Field[] fields = jc.getFields(); + final String field_name = o.getFieldName(cpg); + final JavaClass jc = Repository.lookupClass(getObjectType(o).getClassName()); + final Field[] fields = jc.getFields(); Field f = null; - for (Field field : fields) { + for (final Field field : fields) { if (field.getName().equals(field_name)) { f = field; break; @@ -1075,13 +1075,13 @@ public final class Pass3aVerifier extend constraintViolated(o, "Referenced field '"+f+"' is not static which it should be."); } - String meth_name = Repository.lookupClass(myOwner.getClassName()).getMethods()[method_no].getName(); + final String meth_name = Repository.lookupClass(myOwner.getClassName()).getMethods()[method_no].getName(); // If it's an interface, it can be set only in <clinit>. if ((!(jc.isClass())) && (!(meth_name.equals(Const.STATIC_INITIALIZER_NAME)))) { constraintViolated(o, "Interface field '"+f+"' must be set in a '"+Const.STATIC_INITIALIZER_NAME+"' method."); } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -1091,11 +1091,11 @@ public final class Pass3aVerifier extend @Override public void visitGETSTATIC(final GETSTATIC o) { try { - String field_name = o.getFieldName(cpg); - JavaClass jc = Repository.lookupClass(getObjectType(o).getClassName()); - Field[] fields = jc.getFields(); + final String field_name = o.getFieldName(cpg); + final JavaClass jc = Repository.lookupClass(getObjectType(o).getClassName()); + final Field[] fields = jc.getFields(); Field f = null; - for (Field field : fields) { + for (final Field field : fields) { if (field.getName().equals(field_name)) { f = field; break; @@ -1108,7 +1108,7 @@ public final class Pass3aVerifier extend if (! (f.isStatic())) { constraintViolated(o, "Referenced field '"+f+"' is not static which it should be."); } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -1138,9 +1138,9 @@ public final class Pass3aVerifier extend // is therefore resolved/verified. // INVOKEINTERFACE is an InvokeInstruction, the argument and return types are resolved/verified, // too. So are the allowed method names. - String classname = o.getClassName(cpg); - JavaClass jc = Repository.lookupClass(classname); - Method m = getMethodRecursive(jc, o); + final String classname = o.getClassName(cpg); + final JavaClass jc = Repository.lookupClass(classname); + final Method m = getMethodRecursive(jc, o); if (m == null) { constraintViolated(o, "Referenced method '"+o.getMethodName(cpg)+"' with expected signature '"+o.getSignature(cpg)+ "' not found in class '"+jc.getClassName()+"'."); @@ -1148,7 +1148,7 @@ public final class Pass3aVerifier extend if (jc.isClass()) { constraintViolated(o, "Referenced class '"+jc.getClassName()+"' is a class, but not an interface as expected."); } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -1170,7 +1170,7 @@ public final class Pass3aVerifier extend return m; } //method not found, look in super classes - for (JavaClass superclass : jc.getSuperClasses()) { + for (final JavaClass superclass : jc.getSuperClasses()) { m = getMethod(superclass, invoke); if(m != null) { //method found in super class @@ -1178,7 +1178,7 @@ public final class Pass3aVerifier extend } } //method not found, look in super interfaces - for (JavaClass superclass : jc.getInterfaces()) { + for (final JavaClass superclass : jc.getInterfaces()) { m = getMethod(superclass, invoke); if(m != null) { //method found in super interface @@ -1195,8 +1195,8 @@ public final class Pass3aVerifier extend * @return the referenced method or null if not found. */ private Method getMethod(final JavaClass jc, final InvokeInstruction invoke) { - Method[] ms = jc.getMethods(); - for (Method element : ms) { + final Method[] ms = jc.getMethods(); + for (final Method element : ms) { if ( (element.getName().equals(invoke.getMethodName(cpg))) && (Type.getReturnType(element.getSignature()).equals(invoke.getReturnType(cpg))) && (objarrayequals(Type.getArgumentTypes(element.getSignature()), invoke.getArgumentTypes(cpg))) ) { @@ -1215,9 +1215,9 @@ public final class Pass3aVerifier extend // is therefore resolved/verified. // INVOKESPECIAL is an InvokeInstruction, the argument and return types are resolved/verified, // too. So are the allowed method names. - String classname = o.getClassName(cpg); - JavaClass jc = Repository.lookupClass(classname); - Method m = getMethodRecursive(jc, o); + final String classname = o.getClassName(cpg); + final JavaClass jc = Repository.lookupClass(classname); + final Method m = getMethodRecursive(jc, o); if (m == null) { constraintViolated(o, "Referenced method '"+o.getMethodName(cpg)+"' with expected signature '"+o.getSignature(cpg) +"' not found in class '"+jc.getClassName()+"'."); @@ -1238,8 +1238,8 @@ public final class Pass3aVerifier extend supidx = current.getSuperclassNameIndex(); current = Repository.lookupClass(current.getSuperclassName()); - Method[] meths = current.getMethods(); - for (Method meth2 : meths) { + final Method[] meths = current.getMethods(); + for (final Method meth2 : meths) { if ( (meth2.getName().equals(o.getMethodName(cpg))) && (Type.getReturnType(meth2.getSignature()).equals(o.getReturnType(cpg))) && (objarrayequals(Type.getArgumentTypes(meth2.getSignature()), o.getArgumentTypes(cpg))) ) { @@ -1259,7 +1259,7 @@ public final class Pass3aVerifier extend } } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -1274,9 +1274,9 @@ public final class Pass3aVerifier extend // is therefore resolved/verified. // INVOKESTATIC is an InvokeInstruction, the argument and return types are resolved/verified, // too. So are the allowed method names. - String classname = o.getClassName(cpg); - JavaClass jc = Repository.lookupClass(classname); - Method m = getMethodRecursive(jc, o); + final String classname = o.getClassName(cpg); + final JavaClass jc = Repository.lookupClass(classname); + final Method m = getMethodRecursive(jc, o); if (m == null) { constraintViolated(o, "Referenced method '"+o.getMethodName(cpg)+"' with expected signature '"+ o.getSignature(cpg) +"' not found in class '"+jc.getClassName()+"'."); @@ -1284,7 +1284,7 @@ public final class Pass3aVerifier extend constraintViolated(o, "Referenced method '"+o.getMethodName(cpg)+"' has ACC_STATIC unset."); } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); } @@ -1299,9 +1299,9 @@ public final class Pass3aVerifier extend // is therefore resolved/verified. // INVOKEVIRTUAL is an InvokeInstruction, the argument and return types are resolved/verified, // too. So are the allowed method names. - String classname = o.getClassName(cpg); - JavaClass jc = Repository.lookupClass(classname); - Method m = getMethodRecursive(jc, o); + final String classname = o.getClassName(cpg); + final JavaClass jc = Repository.lookupClass(classname); + final Method m = getMethodRecursive(jc, o); if (m == null) { constraintViolated(o, "Referenced method '"+o.getMethodName(cpg)+"' with expected signature '"+ o.getSignature(cpg)+"' not found in class '"+jc.getClassName()+"'."); @@ -1310,7 +1310,7 @@ public final class Pass3aVerifier extend constraintViolated(o, "Referenced class '"+jc.getClassName()+"' is an interface, but not a class as expected."); } - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { // FIXME: maybe not the best way to handle this throw new AssertionViolatedException("Missing class: " + e, e); }