196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectpackage jdiff;
296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.io.*;
496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.util.*;
596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project/**
796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Class to represent a field, analogous to FieldDoc in the
896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Javadoc doclet API.
996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project *
1096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * The method used for Collection comparison (compareTo) must make its
1196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * comparison based upon everything that is known about this field.
1296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project *
1396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * See the file LICENSE.txt for copyright details.
1496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @author Matthew Doar, mdoar@pobox.com
1596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */
1696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectclass FieldAPI implements Comparable {
1796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Name of the field. */
1896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String name_;
1996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
2096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Type of the field. */
2196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String type_;
2296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
2396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
2496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * The fully qualified name of the class or interface this field is
2596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * inherited from. If this is null, then the field is defined locally
2696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * in this class or interface.
2796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
2896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String inheritedFrom_ = null;
2996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
3096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Set if this field is transient. */
3196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public boolean isTransient_ = false;
3296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
3396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Set if this field is volatile. */
3496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public boolean isVolatile_ = false;
3596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
3696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** If non-null, this is the value of this field. */
3796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String value_ = null;
3896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
3996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Modifiers for this class. */
4096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public Modifiers modifiers_;
4196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
4296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** The doc block, default is null. */
4396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String doc_ = null;
4496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
4596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Constructor. */
4696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public FieldAPI(String name, String type,
4796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    boolean isTransient, boolean isVolatile,
4896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    String value, Modifiers modifiers) {
4996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        name_ = name;
5096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        type_ = type;
5196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isTransient_ = isTransient;
5296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isVolatile_ = isVolatile;
5396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        value_ = value;
5496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        modifiers_ = modifiers;
5596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
5696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
5796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Copy constructor. */
5896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public FieldAPI(FieldAPI f) {
5996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        name_ = f.name_;
6096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        type_ = f.type_;
6196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        inheritedFrom_ = f.inheritedFrom_;
6296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isTransient_ = f.isTransient_;
6396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isVolatile_ = f.isVolatile_;
6496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        value_ = f.value_;
6596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        modifiers_ = f.modifiers_; // Note: shallow copy
6696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        doc_ = f.doc_;
6796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
6896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
6996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Compare two FieldAPI objects, including name, type and modifiers. */
7096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public int compareTo(Object o) {
7196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        FieldAPI oFieldAPI = (FieldAPI)o;
7296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        int comp = name_.compareTo(oFieldAPI.name_);
7396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (comp != 0)
7496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return comp;
7596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        comp = type_.compareTo(oFieldAPI.type_);
7696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (comp != 0)
7796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return comp;
7896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (APIComparator.changedInheritance(inheritedFrom_, oFieldAPI.inheritedFrom_) != 0)
7996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
8096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (isTransient_ != oFieldAPI.isTransient_) {
8196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
8296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
8396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (isVolatile_ != oFieldAPI.isVolatile_) {
8496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
8596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
8696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (value_ != null && oFieldAPI.value_ != null) {
8796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            comp = value_.compareTo(oFieldAPI.value_);
8896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (comp != 0)
8996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                return comp;
9096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
9196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        comp = modifiers_.compareTo(oFieldAPI.modifiers_);
9296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (comp != 0)
9396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return comp;
9496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (APIComparator.docChanged(doc_, oFieldAPI.doc_))
9596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
9696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        return 0;
9796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
9896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
9996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
10096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * Tests two fields, using just the field name, used by indexOf().
10196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
10296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public boolean equals(Object o) {
10396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (name_.compareTo(((FieldAPI)o).name_) == 0)
10496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return true;
10596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        return false;
10696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
10796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project}
108