package jdiff;
|
|
import java.io.*;
|
import java.util.*;
|
|
/**
|
* Class to represent a constructor, analogous to ConstructorDoc in the
|
* Javadoc doclet API.
|
*
|
* The method used for Collection comparison (compareTo) must make its
|
* comparison based upon everything that is known about this constructor.
|
*
|
* See the file LICENSE.txt for copyright details.
|
* @author Matthew Doar, mdoar@pobox.com
|
*/
|
class ConstructorAPI implements Comparable<ConstructorAPI> {
|
/**
|
* Name of the constructor.
|
* Either this or type_ must be non-null
|
*/
|
public String name_ = null;
|
|
/**
|
* The type of the constructor, being all the parameter types
|
* separated by commas.
|
* Either this or name_ must be non-null.
|
*/
|
public String type_ = null;
|
|
/**
|
* The exceptions thrown by this constructor, being all the exception types
|
* separated by commas. "no exceptions" if no exceptions are thrown.
|
*/
|
public String exceptions_ = "no exceptions";
|
|
/** Modifiers for this class. */
|
public Modifiers modifiers_;
|
|
public List params_; // ParamAPI[]
|
|
/** The doc block, default is null. */
|
public String doc_ = null;
|
|
/** Constructor. */
|
public ConstructorAPI(String name, String type, Modifiers modifiers) {
|
if (name == null && type == null) {
|
throw new IllegalArgumentException("Cannot have constructor with both name and type"
|
+ "being null");
|
}
|
name_ = name;
|
type_ = type;
|
modifiers_ = modifiers;
|
params_ = new ArrayList();
|
}
|
|
private static <T extends Comparable<? super T>> int compareNullIsLeast(T c1, T c2) {
|
return c1 == null ? (c2 == null ? 0 : -1) : (c2 == null ? 1 : c1.compareTo(c2));
|
}
|
|
/** Compare two ConstructorAPI objects by type and modifiers. */
|
public int compareTo(ConstructorAPI o) {
|
ConstructorAPI constructorAPI = (ConstructorAPI)o;
|
int comp = compareNullIsLeast(name_, constructorAPI.name_);
|
if (comp != 0)
|
return comp;
|
comp = compareNullIsLeast(getSignature(), constructorAPI.getSignature());
|
if (comp != 0)
|
return comp;
|
comp = exceptions_.compareTo(constructorAPI.exceptions_);
|
if (comp != 0)
|
return comp;
|
comp = modifiers_.compareTo(constructorAPI.modifiers_);
|
if (comp != 0)
|
return comp;
|
if (APIComparator.docChanged(doc_, constructorAPI.doc_))
|
return -1;
|
return 0;
|
}
|
|
/**
|
* Tests two constructors, using just the name and type, used by indexOf().
|
*/
|
public boolean equals(Object o) {
|
|
ConstructorAPI constructorAPI = (ConstructorAPI)o;
|
if (compareNullIsLeast(name_, constructorAPI.name_) == 0 &&
|
compareNullIsLeast(getSignature(), constructorAPI.getSignature()) == 0)
|
return true;
|
return false;
|
}
|
|
/**
|
* Tests two methods for equality, using just the signature.
|
*/
|
public boolean equalSignatures(Object o) {
|
if (getSignature().compareTo(((MethodAPI)o).getSignature()) == 0)
|
return true;
|
return false;
|
}
|
|
/** Cached result of getSignature(). */
|
private String signature_ = null;
|
|
/** Return the signature of the method. */
|
public String getSignature() {
|
if (signature_ != null)
|
return signature_;
|
if (params_ == null)
|
return type_;
|
String res = "";
|
boolean first = true;
|
Iterator iter = params_.iterator();
|
while (iter.hasNext()) {
|
if (!first)
|
res += ", ";
|
ParamAPI param = (ParamAPI)(iter.next());
|
res += param.toString();
|
first = false;
|
}
|
signature_ = res;
|
return res;
|
}
|
}
|