1 package jdiff; 2 3 import java.io.*; 4 import java.util.*; 5 6 /** 7 * Class to represent a field, analogous to FieldDoc in the 8 * Javadoc doclet API. 9 * 10 * The method used for Collection comparison (compareTo) must make its 11 * comparison based upon everything that is known about this field. 12 * 13 * See the file LICENSE.txt for copyright details. 14 * @author Matthew Doar, mdoar@pobox.com 15 */ 16 class FieldAPI implements Comparable { 17 /** Name of the field. */ 18 public String name_; 19 20 /** Type of the field. */ 21 public String type_; 22 23 /** 24 * The fully qualified name of the class or interface this field is 25 * inherited from. If this is null, then the field is defined locally 26 * in this class or interface. 27 */ 28 public String inheritedFrom_ = null; 29 30 /** Set if this field is transient. */ 31 public boolean isTransient_ = false; 32 33 /** Set if this field is volatile. */ 34 public boolean isVolatile_ = false; 35 36 /** If non-null, this is the value of this field. */ 37 public String value_ = null; 38 39 /** Modifiers for this class. */ 40 public Modifiers modifiers_; 41 42 /** The doc block, default is null. */ 43 public String doc_ = null; 44 45 /** Constructor. */ FieldAPI(String name, String type, boolean isTransient, boolean isVolatile, String value, Modifiers modifiers)46 public FieldAPI(String name, String type, 47 boolean isTransient, boolean isVolatile, 48 String value, Modifiers modifiers) { 49 name_ = name; 50 type_ = type; 51 isTransient_ = isTransient; 52 isVolatile_ = isVolatile; 53 value_ = value; 54 modifiers_ = modifiers; 55 } 56 57 /** Copy constructor. */ FieldAPI(FieldAPI f)58 public FieldAPI(FieldAPI f) { 59 name_ = f.name_; 60 type_ = f.type_; 61 inheritedFrom_ = f.inheritedFrom_; 62 isTransient_ = f.isTransient_; 63 isVolatile_ = f.isVolatile_; 64 value_ = f.value_; 65 modifiers_ = f.modifiers_; // Note: shallow copy 66 doc_ = f.doc_; 67 } 68 69 /** Compare two FieldAPI objects, including name, type and modifiers. */ compareTo(Object o)70 public int compareTo(Object o) { 71 FieldAPI oFieldAPI = (FieldAPI)o; 72 int comp = name_.compareTo(oFieldAPI.name_); 73 if (comp != 0) 74 return comp; 75 comp = type_.compareTo(oFieldAPI.type_); 76 if (comp != 0) 77 return comp; 78 if (APIComparator.changedInheritance(inheritedFrom_, oFieldAPI.inheritedFrom_) != 0) 79 return -1; 80 if (isTransient_ != oFieldAPI.isTransient_) { 81 return -1; 82 } 83 if (isVolatile_ != oFieldAPI.isVolatile_) { 84 return -1; 85 } 86 if (value_ != null && oFieldAPI.value_ != null) { 87 comp = value_.compareTo(oFieldAPI.value_); 88 if (comp != 0) 89 return comp; 90 } 91 comp = modifiers_.compareTo(oFieldAPI.modifiers_); 92 if (comp != 0) 93 return comp; 94 if (APIComparator.docChanged(doc_, oFieldAPI.doc_)) 95 return -1; 96 return 0; 97 } 98 99 /** 100 * Tests two fields, using just the field name, used by indexOf(). 101 */ equals(Object o)102 public boolean equals(Object o) { 103 if (name_.compareTo(((FieldAPI)o).name_) == 0) 104 return true; 105 return false; 106 } 107 } 108