Home | History | Annotate | Download | only in apache-commons-bcel
      1 
      2 $Id$
      3 
      4 "TODO" list for JustIce, the Java Class File Verifier by Enver Haase.
      5 
      6 - JustIce uses object generalization during pass 3b,  as  supposed  by
      7 Sun.  However,  there  are better methods such as the idea proposed by
      8 Staerk et al.: using sets of object types.  JustIce  may  reject  code
      9 that is not rejected by traditional JVM-internal  verifiers  for  this
     10 reason. The corresponding checks all have  some  "TODO"  tag  with  an
     11 explanation; they're all in the 'InstConstraintVisitor.java' file.
     12 Users  encountering  problems  should  simply  comment  them  out  (or
     13 uncomment them) as they like. The default is some setting  that  works
     14 well when using
     15 $ java org.apache.bcel.verifier.TransitiveHull java.lang.String
     16 meaning there are no rejects caused by the above problem in a  lot  of
     17 usual classes.
     18 
     19 - There are a few bugs concerning access rights of referenced  methods
     20 and  probably  fields.  The  tests  for access rights that Sun defines
     21 should happen in pass four (which JustIce performs during pass 3a) are
     22 unintentionally  omitted.  This also happened to Sun and IBM with some
     23 of their version 1.3 JVMs. Thanks Markus Dahm.
     24 
     25 - There are bugs because of an ambiguity in the Java  Virtual  Machine
     26 Specification,  Second  Edition.  These have to do with inheritance: A
     27 method invocation like MyObject::equals(Object) is considered illegal,
     28 if  MyObject  has  no  overriding  definition  of  equals(Object). Sun
     29 clarified this issue via electronic mail:  the  invocation  is  legal,
     30 because  MyObject  inherits  the  member  function equals(Object) from
     31 Object::equals(Object). The search algorithms don't seem to be trivial
     32 because  interfaces  can  not  only  specify methods, but also declare
     33 fields. Also, access modifiers have to be honoured (see above).
     34 
     35 - It is not verified if classes that propose they would  implement  an
     36 interface _really_ implement all the methods.
     37 
     38 - It is not verified that interfaces are actually  tagged  'abstract'.
     39 
     40 - The InstructionContext.getSuccessors() method may return the same
     41 successor more than one time. For performance reasons the ControlFlow-
     42 Graph.InstructionContextImpl class should return an array where the
     43 successors are pairwise disjoint. It should also be cached so that we
     44 don't have to do this calculation every time.
     45 
     46 ***End of File***
     47