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