| package jdiff; | |
| import java.io.*; | |
| import java.util.*; | |
| /** | |
| * Class to represent a field, analogous to FieldDoc in the | |
| * Javadoc doclet API. | |
| * | |
| * The method used for Collection comparison (compareTo) must make its | |
| * comparison based upon everything that is known about this field. | |
| * | |
| * See the file LICENSE.txt for copyright details. | |
| * @author Matthew Doar, mdoar@pobox.com | |
| */ | |
| class FieldAPI implements Comparable<FieldAPI> { | |
| /** Name of the field. */ | |
| public String name_; | |
| /** Type of the field. */ | |
| public String type_; | |
| /** | |
| * The fully qualified name of the class or interface this field is | |
| * inherited from. If this is null, then the field is defined locally | |
| * in this class or interface. | |
| */ | |
| public String inheritedFrom_ = null; | |
| /** Set if this field is transient. */ | |
| public boolean isTransient_ = false; | |
| /** Set if this field is volatile. */ | |
| public boolean isVolatile_ = false; | |
| /** If non-null, this is the value of this field. */ | |
| public String value_ = null; | |
| /** Modifiers for this class. */ | |
| public Modifiers modifiers_; | |
| /** The doc block, default is null. */ | |
| public String doc_ = null; | |
| /** Constructor. */ | |
| public FieldAPI(String name, String type, | |
| boolean isTransient, boolean isVolatile, | |
| String value, Modifiers modifiers) { | |
| name_ = name; | |
| type_ = type; | |
| isTransient_ = isTransient; | |
| isVolatile_ = isVolatile; | |
| value_ = value; | |
| modifiers_ = modifiers; | |
| } | |
| /** Copy constructor. */ | |
| public FieldAPI(FieldAPI f) { | |
| name_ = f.name_; | |
| type_ = f.type_; | |
| inheritedFrom_ = f.inheritedFrom_; | |
| isTransient_ = f.isTransient_; | |
| isVolatile_ = f.isVolatile_; | |
| value_ = f.value_; | |
| modifiers_ = f.modifiers_; // Note: shallow copy | |
| doc_ = f.doc_; | |
| } | |
| /** Compare two FieldAPI objects, including name, type and modifiers. */ | |
| public int compareTo(FieldAPI o) { | |
| FieldAPI oFieldAPI = (FieldAPI)o; | |
| int comp = name_.compareTo(oFieldAPI.name_); | |
| if (comp != 0) | |
| return comp; | |
| comp = type_.compareTo(oFieldAPI.type_); | |
| if (comp != 0) | |
| return comp; | |
| if (APIComparator.changedInheritance(inheritedFrom_, oFieldAPI.inheritedFrom_) != 0) | |
| return -1; | |
| if (isTransient_ != oFieldAPI.isTransient_) { | |
| return -1; | |
| } | |
| if (isVolatile_ != oFieldAPI.isVolatile_) { | |
| return -1; | |
| } | |
| if (value_ != null && oFieldAPI.value_ != null) { | |
| comp = value_.compareTo(oFieldAPI.value_); | |
| if (comp != 0) | |
| return comp; | |
| } | |
| comp = modifiers_.compareTo(oFieldAPI.modifiers_); | |
| if (comp != 0) | |
| return comp; | |
| if (APIComparator.docChanged(doc_, oFieldAPI.doc_)) | |
| return -1; | |
| return 0; | |
| } | |
| /** | |
| * Tests two fields, using just the field name, used by indexOf(). | |
| */ | |
| public boolean equals(Object o) { | |
| if (name_.compareTo(((FieldAPI)o).name_) == 0) | |
| return true; | |
| return false; | |
| } | |
| } |