Will work in this evening. (GMT-8). 

Chas

> On Sep 9, 2015, at 2:07 AM, sebb <seb...@gmail.com> wrote:
> 
> PING
> 
> I am -1 on the commit as it stands; please revert or fix
> 
>> On 28 August 2015 at 01:43, sebb <seb...@gmail.com> wrote:
>>> On 12 August 2015 at 07:32,  <c...@apache.org> wrote:
>>> Author: chas
>>> Date: Wed Aug 12 06:32:41 2015
>>> New Revision: 1695425
>>> 
>>> URL: http://svn.apache.org/r1695425
>>> Log:
>>> BCEL-236: remove deprecated FieldOrMethod.getClassType(ConConstantPoolGen)
>> 
>> I think this needs to be reverted or amended.
>> 
>> The new method FieldOrMethod.getLoadClassType(ConstantPoolGen cpg) can
>> throw a ClassCastException.
>> See below.
>> 
>>> Modified:
>>>    
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java
>>>    
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java
>>>    
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/InstConstraintVisitor.java
>>> 
>>> Modified: 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java
>>> URL: 
>>> http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java?rev=1695425&r1=1695424&r2=1695425&view=diff
>>> ==============================================================================
>>> --- 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java
>>>  (original)
>>> +++ 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java
>>>  Wed Aug 12 06:32:41 2015
>>> @@ -95,17 +95,6 @@ public abstract class FieldOrMethod exte
>>>     }
>>> 
>>> 
>>> -    /** @return type of the referenced class/interface
>>> -     * @deprecated If the instruction references an array class,
>>> -     *    the ObjectType returned will be invalid.  Use
>>> -     *    getReferenceType() instead.
>>> -     */
>>> -    @Deprecated
>>> -    public ObjectType getClassType( ConstantPoolGen cpg ) {
>>> -        return ObjectType.getInstance(getClassName(cpg));
>>> -    }
>>> -
>>> -
>>>     /**
>>>      * Return the reference type representing the class, interface,
>>>      * or array class referenced by the instruction.
>>> @@ -131,6 +120,6 @@ public abstract class FieldOrMethod exte
>>>     /** @return type of the referenced class/interface
>>>      */
>>>     public ObjectType getLoadClassType( ConstantPoolGen cpg ) {
>>> -        return getClassType(cpg);
>>> +        return (ObjectType)getReferenceType(cpg);
>> 
>> ObjectType is not a subclass of ArrayType
>> 
>> It does not seem right to hide the original reason for the deprecation this 
>> way.
>> 
>> The code should at least check the object type and throw a better
>> exception than CCE
>> And the Javadoc should make the pre-condition clear
>> 
>>>     }
>>> }
>>> 
>>> Modified: 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java
>>> URL: 
>>> http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java?rev=1695425&r1=1695424&r2=1695425&view=diff
>>> ==============================================================================
>>> --- 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java
>>>  (original)
>>> +++ 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/statics/Pass3aVerifier.java
>>>  Wed Aug 12 06:32:41 2015
>>> @@ -85,6 +85,7 @@ import org.apache.commons.bcel6.generic.
>>> import org.apache.commons.bcel6.generic.ObjectType;
>>> import org.apache.commons.bcel6.generic.PUTSTATIC;
>>> import org.apache.commons.bcel6.generic.RET;
>>> +import org.apache.commons.bcel6.generic.ReferenceType;
>>> import org.apache.commons.bcel6.generic.ReturnInstruction;
>>> import org.apache.commons.bcel6.generic.TABLESWITCH;
>>> import org.apache.commons.bcel6.generic.Type;
>>> @@ -543,6 +544,15 @@ public final class Pass3aVerifier extend
>>>             }
>>>         }
>>> 
>>> +        private ObjectType getObjectType(FieldInstruction o) {
>>> +            ReferenceType rt = o.getReferenceType(cpg);
>>> +            if(rt instanceof ObjectType) {
>>> +                return (ObjectType)rt;
>>> +            }
>>> +            constraintViolated(o, "expecting ObjectType but got "+rt);
>>> +            return null;
>>> +        }
>> 
>> Here we see that the code checks the return class, which is fine.
>> 
>>>         /** Checks if the constraints of operands of the said 
>>> instruction(s) are satisfied. */
>>>          //getfield, putfield, getstatic, putstatic
>>>          @Override
>>> @@ -555,8 +565,8 @@ public final class Pass3aVerifier extend
>>>             }
>>> 
>>>             String field_name = o.getFieldName(cpg);
>>> -
>>> -            JavaClass jc = 
>>> Repository.lookupClass(o.getClassType(cpg).getClassName());
>>> +
>>> +            JavaClass jc = 
>>> Repository.lookupClass(getObjectType(o).getClassName());
>>>             Field[] fields = jc.getFields();
>>>             Field f = null;
>>>             for (Field field : fields) {
>>> @@ -997,7 +1007,7 @@ public final class Pass3aVerifier extend
>>>         public void visitPUTSTATIC(PUTSTATIC o){
>>>             try {
>>>             String field_name = o.getFieldName(cpg);
>>> -            JavaClass jc = 
>>> Repository.lookupClass(o.getClassType(cpg).getClassName());
>>> +            JavaClass jc = 
>>> Repository.lookupClass(getObjectType(o).getClassName());
>>>             Field[] fields = jc.getFields();
>>>             Field f = null;
>>>             for (Field field : fields) {
>>> @@ -1011,8 +1021,9 @@ public final class Pass3aVerifier extend
>>>             }
>>> 
>>>             if (f.isFinal()){
>>> -                if 
>>> (!(myOwner.getClassName().equals(o.getClassType(cpg).getClassName()))){
>>> -                    constraintViolated(o, "Referenced field '"+f+"' is 
>>> final and must therefore be declared in the current class 
>>> '"+myOwner.getClassName()+"' which is not the case: it is declared in 
>>> '"+o.getClassType(cpg).getClassName()+"'.");
>>> +                if 
>>> (!(myOwner.getClassName().equals(getObjectType(o).getClassName()))){
>>> +                    constraintViolated(o, "Referenced field '"+f+"' is 
>>> final and must therefore be declared in the current class 
>>> '"+myOwner.getClassName()
>>> +                    +"' which is not the case: it is declared in 
>>> '"+o.getReferenceType(cpg)+"'.");
>>>                 }
>>>             }
>>> 
>>> @@ -1037,7 +1048,7 @@ public final class Pass3aVerifier extend
>>>         public void visitGETSTATIC(GETSTATIC o){
>>>             try {
>>>             String field_name = o.getFieldName(cpg);
>>> -            JavaClass jc = 
>>> Repository.lookupClass(o.getClassType(cpg).getClassName());
>>> +            JavaClass jc = 
>>> Repository.lookupClass(getObjectType(o).getClassName());
>>>             Field[] fields = jc.getFields();
>>>             Field f = null;
>>>             for (Field field : fields) {
>>> 
>>> Modified: 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/InstConstraintVisitor.java
>>> URL: 
>>> http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/InstConstraintVisitor.java?rev=1695425&r1=1695424&r2=1695425&view=diff
>>> ==============================================================================
>>> --- 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/InstConstraintVisitor.java
>>>  (original)
>>> +++ 
>>> commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/structurals/InstConstraintVisitor.java
>>>  Wed Aug 12 06:32:41 2015
>>> @@ -1208,6 +1208,15 @@ public class InstConstraintVisitor exten
>>>         }
>>>     }
>>> 
>>> +    private ObjectType getObjectType(FieldInstruction o) {
>>> +        ReferenceType rt = o.getReferenceType(cpg);
>>> +        if(rt instanceof ObjectType) {
>>> +            return (ObjectType)rt;
>>> +        }
>>> +        constraintViolated(o, "expecting ObjectType but got "+rt);
>>> +        return null;
>>> +    }
>>> +
>>>     /**
>>>      * Ensures the specific preconditions of the said instruction.
>>>      */
>>> @@ -1221,7 +1230,7 @@ public class InstConstraintVisitor exten
>>> 
>>>         String field_name = o.getFieldName(cpg);
>>> 
>>> -        JavaClass jc = 
>>> Repository.lookupClass(o.getClassType(cpg).getClassName());
>>> +        JavaClass jc = 
>>> Repository.lookupClass(getObjectType(o).getClassName());
>>>         Field[] fields = jc.getFields();
>>>         Field f = null;
>>>         for (Field field : fields) {
>>> @@ -1263,7 +1272,7 @@ public class InstConstraintVisitor exten
>>>         }
>>> 
>>>         if (f.isProtected()){
>>> -            ObjectType classtype = o.getClassType(cpg);
>>> +            ObjectType classtype = getObjectType(o);
>>>             ObjectType curr = ObjectType.getInstance(mg.getClassName());
>>> 
>>>             if (    classtype.equals(curr) ||
>>> @@ -2632,7 +2641,7 @@ public class InstConstraintVisitor exten
>>> 
>>>         String field_name = o.getFieldName(cpg);
>>> 
>>> -        JavaClass jc = 
>>> Repository.lookupClass(o.getClassType(cpg).getClassName());
>>> +        JavaClass jc = 
>>> Repository.lookupClass(getObjectType(o).getClassName());
>>>         Field[] fields = jc.getFields();
>>>         Field f = null;
>>>         for (Field field : fields) {
>>> @@ -2684,7 +2693,7 @@ public class InstConstraintVisitor exten
>>>         }
>>> 
>>>         if (f.isProtected()){
>>> -            ObjectType classtype = o.getClassType(cpg);
>>> +            ObjectType classtype = getObjectType(o);
>>>             ObjectType curr = ObjectType.getInstance(mg.getClassName());
>>> 
>>>             if (    classtype.equals(curr) ||
>>> @@ -2722,7 +2731,7 @@ public class InstConstraintVisitor exten
>>>     public void visitPUTSTATIC(PUTSTATIC o){
>>>         try {
>>>         String field_name = o.getFieldName(cpg);
>>> -        JavaClass jc = 
>>> Repository.lookupClass(o.getClassType(cpg).getClassName());
>>> +        JavaClass jc = 
>>> Repository.lookupClass(getObjectType(o).getClassName());
>>>         Field[] fields = jc.getFields();
>>>         Field f = null;
>>>         for (Field field : fields) {
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to