001 // Copyright 2006-07 Regents of the University of California. May be used
002 // under the terms of the revised BSD license. See LICENSING for details.
003 /**
004 * @author Adrian Mettler
005 */
006 package org.joe_e;
007
008 /**
009 * Marker interface for annotating classes that are indistinguishable from
010 * a shallow copy of themselves.
011 * <p>
012 * Joe-E requires that classes that implement this interface must
013 * meet all of the following obligations:
014 * <ol>
015 * <li> All instance fields must be final.
016 * <li> The class cannot be equatable.
017 * <li> The object identity of instances of the class is not visible This can
018 * be satisfied by either of:
019 * <ol>
020 * <li> The superclass implements Selfless; or,
021 * <li> The class's superclass is java.lang.Object, the class overrides
022 * <code>equals()</code>, and doesn't call <code>super.equals()</code>.
023 * </ol>
024 * <li> The object provides a hash code that does not reveal object identity.
025 * This requirement is enforced by including hashCode() in the interface.
026 * </ol>
027 * <p>
028 * The Joe-E verifier ensures that Joe-E code cannot distinguish a
029 * shallow copy of a Selfless object from the original object.
030 *
031 * @see Equatable
032 */
033 public interface Selfless {
034 int hashCode();
035 /*
036 boolean equals(Object obj);
037 */
038 }