Hi Jia,

Actually, the Javadoc for java.lang.Comparable says that java.
  "Note that null is not an instance of any class, and e.compareTo(null)
  should throw a NullPointerException even though e.equals(null)
  returns false."

So, equals(null) should return false and compareTo(null) should throw
an NPE.

See
http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html
for details about natural ordering


There were no unit tests for ptolemy.actor.util.Time.

I created a unit test for this bug and fixed Time.java.

One way around this is to do an instanceof check because null is not
an instance of a class.  So, you'll see equals implemented like:

    public boolean equals(Object time) {
        if (time instanceof Time) {
            return this.compareTo(time) == 0;
        }
        return false;
    }

In Ptolemy, the classes have equals() methods.  I checked the classes
upto DEEvent, could you take a look at the classes below DEEvent?

doc/tutorial/LeftRightDirector.java
com/JLex/Main.java
com/jgoodies/forms/layout/ConstantSize.java
com/jgoodies/forms/layout/BoundedSize.java
ptolemy/kernel/attributes/VersionAttribute.java
ptolemy/backtrack/eclipse/ast/Type.java

# No need to check these, they are used for back tracking
ptolemy/backtrack/util/java/util/AbstractList.java
ptolemy/backtrack/util/java/util/AbstractMap.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/Collections.java
ptolemy/backtrack/util/java/util/AbstractSet.java
ptolemy/backtrack/util/java/util/WeakHashMap.java
ptolemy/backtrack/util/java/util/WeakHashMap.java
ptolemy/backtrack/util/java/util/Hashtable.java

# I checked these
ptolemy/math/FixPoint.java
ptolemy/math/Overflow.java
ptolemy/math/Fraction.java
ptolemy/math/FixPointQuantization.java
ptolemy/math/Quantization.java
ptolemy/math/Precision.java
ptolemy/math/Rounding.java
ptolemy/domains/fsm/kernel/ia/StatePair.java
ptolemy/domains/csp/demo/DiningPhilosophers/Coordinate.java
ptolemy/domains/de/kernel/DEEvent.java

# Start checking here
ptolemy/domains/gr/kernel/SceneGraphToken.java
ptolemy/domains/gr/kernel/Scene2DToken.java
ptolemy/graph/mapping/MapMapping.java
ptolemy/graph/Graph.java
ptolemy/graph/Inequality.java
ptolemy/graph/LabeledList.java
ptolemy/component/data/type/TupleType.java
ptolemy/component/data/TupleToken.java
ptolemy/apps/cacheAwareScheduler/kernel/MemoryAddress.java
ptolemy/codegen/kernel/CodeGeneratorHelper.java
ptolemy/codegen/kernel/CodeStream.java
ptolemy/caltrop/ddi/util/DataflowActorInterpreter.java
ptolemy/caltrop/ddi/DataflowWithRates.java
ptolemy/moml/unit/Unit.java
ptolemy/actor/gt/GraphAnalyzer.java
ptolemy/actor/gt/GraphAnalyzer.java
ptolemy/actor/util/Time.java
ptolemy/data/type/MatrixType.java
ptolemy/data/type/ObjectType.java
ptolemy/data/type/BaseType.java
ptolemy/data/type/RecordType.java
ptolemy/data/type/ArrayType.java
ptolemy/data/type/Type.java
ptolemy/data/type/FunctionType.java
ptolemy/data/type/FixType.java
ptolemy/data/type/UnionType.java
ptolemy/data/type/TypeConstant.java
ptolemy/data/expr/CachedMethod.java
ptolemy/data/properties/token/PropertyToken.java
ptolemy/data/properties/PropertyHelper.java
ptolemy/data/ShortToken.java
ptolemy/data/LongToken.java
ptolemy/data/UnsignedByteToken.java
ptolemy/data/FloatToken.java
ptolemy/data/StringToken.java
ptolemy/data/ObjectToken.java
ptolemy/data/ComplexToken.java
ptolemy/data/ArrayToken.java
ptolemy/data/IntMatrixToken.java
ptolemy/data/UnionToken.java
ptolemy/data/PetiteToken.java
ptolemy/data/IntToken.java
ptolemy/data/DoubleMatrixToken.java
ptolemy/data/BooleanMatrixToken.java
ptolemy/data/ActorToken.java
ptolemy/data/DoubleToken.java
ptolemy/data/FixMatrixToken.java
ptolemy/data/RecordToken.java
ptolemy/data/BooleanToken.java
ptolemy/data/EventToken.java
ptolemy/data/LongMatrixToken.java
ptolemy/data/FixToken.java
ptolemy/data/ComplexMatrixToken.java
ptolemy/copernicus/kernel/SideEffectAnalysis.java

_Christopher

--------

    
    It's because when you are comparing one time object with another, both of
    them have to be actual objects, and null is not an object. You should
    probably have a:
    if (a != null && b !=null) when you are using the equals method.
    
    Jia
    
    On Sun, Jul 6, 2008 at 3:54 PM, Richard Ware <[EMAIL PROTECTED]> wrote:
    
    >  When I do this,
    >
    >    Time a = ourDirector.getModelTime();
    >    Time b = null;
    >    boolean comparison = a.equals( b );
    >
    > I get a NullPointerException.
    >
    >  That isn't what the equals() method of a Java object is supposed to do.
    >  If
    > given null as the argument, it's supposed to calmly return the boolean
    > value "false".
    >
    >
    >
    >
    > -------------------------------------------------------------------------
   ---
    > Posted to the ptolemy-hackers mailing list.  Please send administrative
    > mail for this list to: [EMAIL PROTECTED]
    >

----------------------------------------------------------------------------
Posted to the ptolemy-hackers mailing list.  Please send administrative
mail for this list to: [EMAIL PROTECTED]

Reply via email to