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 method, analogous to MethodDoc 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 method.
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 MethodAPI implements Comparable {
1796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
1896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Name of the method. */
1996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String name_ = null;
2096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
2196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Return type of the method. */
2296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String returnType_ = null;
2396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
2496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
2596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * The fully qualified name of the class or interface this method is
2696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * inherited from. If this is null, then the method is defined locally
2796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * in this class or interface.
2896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
2996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String inheritedFrom_ = null;
3096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
3196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
3296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * The exceptions thrown by this method, being all the exception types
3396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * separated by commas. "no exceptions" if no exceptions are thrown.
3496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
3596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String exceptions_ = "no exceptions";
3696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
3796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Set if this method is abstract. */
3896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public boolean isAbstract_ = false;
3996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
4096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Set if this method is native. */
4196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public boolean isNative_ = false;
4296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
4396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Set if this method is synchronized. */
4496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public boolean isSynchronized_ = false;
4596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
4696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Modifiers for this class. */
4796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public Modifiers modifiers_;
4896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
4996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public List params_; // ParamAPI[]
5096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
5196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** The doc block, default is null. */
5296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String doc_ = null;
5396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
5496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Constructor. */
5596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public MethodAPI(String name, String returnType, boolean isAbstract,
5696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                     boolean isNative, boolean isSynchronized,
5796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                     Modifiers modifiers) {
5896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        name_ = name;
5996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        returnType_ = returnType;
6096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isAbstract_ = isAbstract;
6196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isNative_ = isNative;
6296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isSynchronized_ = isSynchronized;
6396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        modifiers_ = modifiers;
6496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        params_ = new ArrayList(); // ParamAPI[]
6596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
6696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
6796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Copy constructor. */
6896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public MethodAPI(MethodAPI m) {
6996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        name_ = m.name_;
7096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        returnType_ = m.returnType_;
7196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        inheritedFrom_ = m.inheritedFrom_;
7296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        exceptions_ = m.exceptions_;
7396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isAbstract_ = m.isAbstract_;
7496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isNative_ = m.isNative_;
7596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        isSynchronized_ = m.isSynchronized_;
7696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        modifiers_ = m.modifiers_; // Note: shallow copy
7796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        params_ = m.params_; // Note: shallow copy
7896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        doc_ = m.doc_;
7996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        signature_ = m.signature_; // Cached
8096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
8196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
8296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
8396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * Compare two methods, including the return type, and parameter
8496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * names and types, and modifiers.
8596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
8696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public int compareTo(Object o) {
8796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        MethodAPI oMethod = (MethodAPI)o;
8896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        int comp = name_.compareTo(oMethod.name_);
8996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (comp != 0)
9096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return comp;
9196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        comp = returnType_.compareTo(oMethod.returnType_);
9296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (comp != 0)
9396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return comp;
9496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (APIComparator.changedInheritance(inheritedFrom_, oMethod.inheritedFrom_) != 0)
9596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
9696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (isAbstract_ != oMethod.isAbstract_) {
9796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
9896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
9996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (Diff.showAllChanges &&
10096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project	    isNative_ != oMethod.isNative_) {
10196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
10296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
10396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (Diff.showAllChanges &&
10496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project	    isSynchronized_ != oMethod.isSynchronized_) {
10596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
10696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
10796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        comp = exceptions_.compareTo(oMethod.exceptions_);
10896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (comp != 0)
10996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return comp;
11096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        comp = modifiers_.compareTo(oMethod.modifiers_);
11196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (comp != 0)
11296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return comp;
11396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        comp = getSignature().compareTo(oMethod.getSignature());
11496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (comp != 0)
11596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return comp;
11696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (APIComparator.docChanged(doc_, oMethod.doc_))
11796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return -1;
11896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        return 0;
11996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
12096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
12196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
12296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * Tests two methods, using just the method name, used by indexOf().
12396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
12496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public boolean equals(Object o) {
12596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (name_.compareTo(((MethodAPI)o).name_) == 0)
12696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return true;
12796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        return false;
12896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
12996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
13096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
13196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * Tests two methods for equality, using just the signature.
13296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
13396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public boolean equalSignatures(Object o) {
13496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (getSignature().compareTo(((MethodAPI)o).getSignature()) == 0)
13596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return true;
13696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        return false;
13796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
13896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
13996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Cached result of getSignature(). */
14096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String signature_ = null;
14196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
14296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Return the signature of the method. */
14396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public String getSignature() {
14496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (signature_ != null)
14596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            return signature_;
14696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        String res = "";
14796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        boolean first = true;
14896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        Iterator iter = params_.iterator();
14996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        while (iter.hasNext()) {
15096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (!first)
15196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                res += ", ";
15296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            ParamAPI param = (ParamAPI)(iter.next());
15396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            res += param.toString();
15496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            first = false;
15596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
15696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        signature_ = res;
15796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        return res;
15896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
15996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project}
160