You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-dev@jakarta.apache.org by en...@apache.org on 2003/12/18 18:22:58 UTC

cvs commit: jakarta-bcel/src/java/org/apache/bcel/verifier/statics Pass1Verifier.java Pass2Verifier.java StringRepresentation.java

enver       2003/12/18 09:22:58

  Modified:    src/java/org/apache/bcel/verifier/statics Pass1Verifier.java
                        Pass2Verifier.java StringRepresentation.java
  Log:
  Reflect the fact that BCEL throws ClassFormatException rather than
  ClassFormatError in exceptional situations; so catch the Exc, and
  no longer the Err in the verifier part [save JustIce from bit rot :) ].
  
  Revision  Changes    Path
  1.4       +2 -3      jakarta-bcel/src/java/org/apache/bcel/verifier/statics/Pass1Verifier.java
  
  Index: Pass1Verifier.java
  ===================================================================
  RCS file: /home/cvs/jakarta-bcel/src/java/org/apache/bcel/verifier/statics/Pass1Verifier.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Pass1Verifier.java	23 May 2003 07:55:34 -0000	1.3
  +++ Pass1Verifier.java	18 Dec 2003 17:22:58 -0000	1.4
  @@ -182,8 +182,7 @@
   		catch(LoadingException e){
   			return new VerificationResult(VerificationResult.VERIFIED_REJECTED, e.getMessage());
   		}
  -		catch(ClassFormatError e){
  -			// BCEL sometimes is a little harsh describing exceptual situations.
  +		catch(ClassFormatException e){
   			return new VerificationResult(VerificationResult.VERIFIED_REJECTED, e.getMessage());
   		}
   		catch(RuntimeException e){
  
  
  
  1.4       +9 -13     jakarta-bcel/src/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
  
  Index: Pass2Verifier.java
  ===================================================================
  RCS file: /home/cvs/jakarta-bcel/src/java/org/apache/bcel/verifier/statics/Pass2Verifier.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Pass2Verifier.java	23 May 2003 07:55:34 -0000	1.3
  +++ Pass2Verifier.java	18 Dec 2003 17:22:58 -0000	1.4
  @@ -525,8 +525,8 @@
   			try{
   				Type.getType(sig);  /* Don't need the return value */
   			}
  -			catch (ClassFormatError cfe){ // sometimes BCEL is a little harsh describing exceptional situations.
  -				throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.");
  +			catch (ClassFormatException cfe){
  +                throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.");
   			}
   
   			String nameanddesc = (name+sig);
  @@ -574,9 +574,8 @@
   				t  = Type.getReturnType(sig);
   				ts = Type.getArgumentTypes(sig);
   			}
  -			catch (ClassFormatError cfe){
  -				// Well, BCEL sometimes is a little harsh describing exceptional situations.
  -				throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by Method '"+tostring(obj)+"'.");
  +			catch (ClassFormatException cfe){
  +                throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by Method '"+tostring(obj)+"'.");
   			}
   
   			// Check if referenced objects exist.
  @@ -948,7 +947,7 @@
   						try{
   							t = Type.getType(localsig);
   						}
  -						catch (ClassFormatError cfe){ // sometimes BCEL is a little harsh describing exceptional situations.
  +						catch (ClassFormatException cfe){
   							throw new ClassConstraintException("Illegal descriptor (==signature) '"+localsig+"' used by LocalVariable '"+tostring(localvariables[i])+"' referenced by '"+tostring(lvt)+"'.");
   						}
   						int localindex = localvariables[i].getIndex();
  @@ -1159,8 +1158,7 @@
   			try{
   				Type.getType(sig); /* Don't need the return value */
   			}
  -			catch (ClassFormatError cfe){
  -				// Well, BCEL sometimes is a little harsh describing exceptional situations.
  +			catch (ClassFormatException cfe){
   				throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.");
   			}
   		}
  @@ -1191,8 +1189,7 @@
   					throw new ClassConstraintException("Instance initialization method must have VOID return type.");
   				}
   			}
  -			catch (ClassFormatError cfe){
  -				// Well, BCEL sometimes is a little harsh describing exceptional situations.
  +			catch (ClassFormatException cfe){
   				throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.");
   			}
   		}
  @@ -1223,8 +1220,7 @@
   					addMessage("Class or interface initialization method '"+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 (ClassFormatError cfe){
  -				// Well, BCEL sometimes is a little harsh describing exceptional situations.
  +			catch (ClassFormatException cfe){
   				throw new ClassConstraintException("Illegal descriptor (==signature) '"+sig+"' used by '"+tostring(obj)+"'.");
   			}
   
  
  
  
  1.6       +179 -150  jakarta-bcel/src/java/org/apache/bcel/verifier/statics/StringRepresentation.java
  
  Index: StringRepresentation.java
  ===================================================================
  RCS file: /home/cvs/jakarta-bcel/src/java/org/apache/bcel/verifier/statics/StringRepresentation.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- StringRepresentation.java	5 Aug 2002 17:31:32 -0000	1.5
  +++ StringRepresentation.java	18 Dec 2003 17:22:58 -0000	1.6
  @@ -68,156 +68,185 @@
    * A (new StringRepresentation(Node n)).toString() never throws any exception.
    * Note that this class also serves as a placeholder for more sophisticated message
    * handling in future versions of JustIce.
  - * 
  + *
    * @version $Id$
    * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
    */
  -public class StringRepresentation extends org.apache.bcel.classfile.EmptyVisitor implements Visitor{
  -	/** The string representation, created by a visitXXX() method, output by toString(). */
  -	private String tostring;
  -  /** The node we ask for its string representation. Not really needed; only for debug output. */
  -  private Node n;
  -	/**
  -	 * Creates a new StringRepresentation object which is the representation of n.
  -	 *
  -	 * @see #toString()
  -	 */
  -	public StringRepresentation(Node n){
  -		this.n = n;
  -		n.accept(this); // assign a string representation to field 'tostring' if we know n's class.
  -	}
  -	/**
  -	 * Returns the String representation.
  -	 */
  -	public String toString(){
  -    // The run-time check below is needed because we don't want to omit inheritance
  -    // of "EmptyVisitor" and provide a thousand empty methods.
  -    // However, in terms of performance this would be a better idea.
  -    // If some new "Node" is defined in BCEL (such as some concrete "Attribute"), we
  -    // want to know that this class has also to be adapted.
  -    if (tostring == null) throw new AssertionViolatedException("Please adapt '"+getClass()+"' to deal with objects of class '"+n.getClass()+"'.");
  -		return tostring;
  -	}
  -	/**
  -	 * Returns the String representation of the Node object obj;
  -	 * this is obj.toString() if it does not throw any RuntimeException,
  -	 * or else it is a string derived only from obj's class name.
  -	 */
  -	private String toString(Node obj){
  -		String ret;
  -		try{
  -			ret = obj.toString();
  -		}
  -		catch(RuntimeException e){
  -			String s = obj.getClass().getName();
  -			s = s.substring(s.lastIndexOf(".")+1);
  -			ret = "<<"+s+">>";
  -    }
  -    catch(ClassFormatError e){ /* BCEL can be harsh e.g. trying to convert the "signature" of a ReturnaddressType LocalVariable (shouldn't occur, but people do crazy things) */
  -      String s = obj.getClass().getName();
  -      s = s.substring(s.lastIndexOf(".")+1);
  -      ret = "<<"+s+">>";
  -		}
  -		return ret;
  -	}
  -	////////////////////////////////
  -	// Visitor methods start here //
  -	////////////////////////////////
  -	// We don't of course need to call some default implementation:
  -	// e.g. we could also simply output "Code" instead of a possibly
  -	// lengthy Code attribute's toString().
  -	public void visitCode(Code obj){
  -		//tostring = toString(obj);
  -		tostring = "<CODE>"; // We don't need real code outputs.
  -	}
  -	public void visitCodeException(CodeException obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantClass(ConstantClass obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantDouble(ConstantDouble obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantFieldref(ConstantFieldref obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantFloat(ConstantFloat obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantInteger(ConstantInteger obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantLong(ConstantLong obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantMethodref(ConstantMethodref obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantNameAndType(ConstantNameAndType obj){
  -		tostring = toString(obj);
  -	}
  - 	public void visitConstantPool(ConstantPool obj){
  -		tostring = toString(obj);
  - 	}
  -	public void visitConstantString(ConstantString obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantUtf8(ConstantUtf8 obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitConstantValue(ConstantValue obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitDeprecated(Deprecated obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitExceptionTable(ExceptionTable obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitField(Field obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitInnerClass(InnerClass obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitInnerClasses(InnerClasses obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitJavaClass(JavaClass obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitLineNumber(LineNumber obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitLineNumberTable(LineNumberTable obj){
  -		tostring = "<LineNumberTable: "+toString(obj)+">";
  -	}
  -	public void visitLocalVariable(LocalVariable obj){
  -		tostring = toString(obj);
  -	}
  -	public void visitLocalVariableTable(LocalVariableTable obj){
  -		tostring = "<LocalVariableTable: "+toString(obj)+">";
  -	}
  -	public void visitMethod(Method obj){
  -		tostring = toString(obj);
  -	}
  -  public void visitSignature(Signature obj){
  -    tostring = toString(obj);
  -  }
  -	public void visitSourceFile(SourceFile obj){
  -		tostring = toString(obj);
  -	} 
  -  public void visitStackMap(StackMap obj){
  -    tostring = toString(obj);
  -  }
  -	public void visitSynthetic(Synthetic obj){
  -		tostring = toString(obj);
  -	} 
  -	public void visitUnknown(Unknown obj){
  -		tostring = toString(obj);
  -	}
  +public class StringRepresentation extends org.apache.bcel.classfile.EmptyVisitor implements Visitor {
  +    /** The string representation, created by a visitXXX() method, output by toString(). */
  +    private String tostring;
  +    /** The node we ask for its string representation. Not really needed; only for debug output. */
  +    private Node n;
  +
  +    /**
  +     * Creates a new StringRepresentation object which is the representation of n.
  +     *
  +     * @see #toString()
  +     */
  +    public StringRepresentation(Node n) {
  +        this.n = n;
  +        n.accept(this); // assign a string representation to field 'tostring' if we know n's class.
  +    }
  +
  +    /**
  +     * Returns the String representation.
  +     */
  +    public String toString() {
  +// The run-time check below is needed because we don't want to omit inheritance
  +// of "EmptyVisitor" and provide a thousand empty methods.
  +// However, in terms of performance this would be a better idea.
  +// If some new "Node" is defined in BCEL (such as some concrete "Attribute"), we
  +// want to know that this class has also to be adapted.
  +        if (tostring == null) throw new AssertionViolatedException("Please adapt '" + getClass() + "' to deal with objects of class '" + n.getClass() + "'.");
  +        return tostring;
  +    }
  +
  +    /**
  +     * Returns the String representation of the Node object obj;
  +     * this is obj.toString() if it does not throw any RuntimeException,
  +     * or else it is a string derived only from obj's class name.
  +     */
  +    private String toString(Node obj) {
  +        String ret;
  +        try {
  +            ret = obj.toString();
  +        }
  +        catch (RuntimeException e) { // including ClassFormatException, trying to convert the "signature" of a ReturnaddressType LocalVariable (shouldn't occur, but people do crazy things)
  +            String s = obj.getClass().getName();
  +            s = s.substring(s.lastIndexOf(".") + 1);
  +            ret = "<<" + s + ">>";
  +        }
  +        return ret;
  +    }
  +
  +    ////////////////////////////////
  +    // Visitor methods start here //
  +    ////////////////////////////////
  +    // We don't of course need to call some default implementation:
  +    // e.g. we could also simply output "Code" instead of a possibly
  +    // lengthy Code attribute's toString().
  +    public void visitCode(Code obj) {
  +        //tostring = toString(obj);
  +        tostring = "<CODE>"; // We don't need real code outputs.
  +    }
  +
  +    public void visitCodeException(CodeException obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantClass(ConstantClass obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantDouble(ConstantDouble obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantFieldref(ConstantFieldref obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantFloat(ConstantFloat obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantInteger(ConstantInteger obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantLong(ConstantLong obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantMethodref(ConstantMethodref obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantNameAndType(ConstantNameAndType obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantPool(ConstantPool obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantString(ConstantString obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantUtf8(ConstantUtf8 obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitConstantValue(ConstantValue obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitDeprecated(Deprecated obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitExceptionTable(ExceptionTable obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitField(Field obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitInnerClass(InnerClass obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitInnerClasses(InnerClasses obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitJavaClass(JavaClass obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitLineNumber(LineNumber obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitLineNumberTable(LineNumberTable obj) {
  +        tostring = "<LineNumberTable: " + toString(obj) + ">";
  +    }
  +
  +    public void visitLocalVariable(LocalVariable obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitLocalVariableTable(LocalVariableTable obj) {
  +        tostring = "<LocalVariableTable: " + toString(obj) + ">";
  +    }
  +
  +    public void visitMethod(Method obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitSignature(Signature obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitSourceFile(SourceFile obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitStackMap(StackMap obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitSynthetic(Synthetic obj) {
  +        tostring = toString(obj);
  +    }
  +
  +    public void visitUnknown(Unknown obj) {
  +        tostring = toString(obj);
  +    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-dev-help@jakarta.apache.org