Modified old doclava to use LinkedLists instead of arrays
Functioning java parsing as well. Needs to be wired up into doclava proper.
Change-Id: Ifa38ca7312e6c23a8f663a9d0638afb9a29bf19d
diff --git a/src/com/google/doclava/TypeInfo.java b/src/com/google/doclava/TypeInfo.java
index e939f5b..6b821cc 100644
--- a/src/com/google/doclava/TypeInfo.java
+++ b/src/com/google/doclava/TypeInfo.java
@@ -20,7 +20,7 @@
import java.util.*;
-public class TypeInfo {
+public class TypeInfo implements Resolvable {
public static final Set<String> PRIMITIVE_TYPES = Collections.unmodifiableSet(
new HashSet<String>(Arrays.asList("boolean", "byte", "char", "double", "float", "int",
"long", "short", "void")));
@@ -65,8 +65,7 @@
TypeInfo info = new TypeInfo(typeString.substring(entryStartPos, paramEndPos).trim());
generics.add(info);
- mTypeArguments = new TypeInfo[generics.size()];
- generics.toArray(mTypeArguments);
+ mTypeArguments = generics;
if (paramEndPos < typeString.length() - 1) {
typeString = typeString.substring(0,paramStartPos) + typeString.substring(paramEndPos + 1);
@@ -127,13 +126,16 @@
}
}
- public static String typeArgumentsName(TypeInfo[] args, HashSet<String> typeVars) {
+ public static String typeArgumentsName(ArrayList<TypeInfo> args, HashSet<String> typeVars) {
String result = "<";
- for (int i = 0; i < args.length; i++) {
- result += args[i].fullName(typeVars);
- if (i != args.length - 1) {
+
+ int i = 0;
+ for (TypeInfo arg : args) {
+ result += arg.fullName(typeVars);
+ if (i != (args.size()-1)) {
result += ", ";
}
+ i++;
}
result += ">";
return result;
@@ -158,23 +160,29 @@
* if (fullName != null) { return fullName; }
*/
fullName = mQualifiedTypeName;
- if (mTypeArguments != null && mTypeArguments.length > 0) {
+ if (mTypeArguments != null && !mTypeArguments.isEmpty()) {
fullName += typeArgumentsName(mTypeArguments, typeVars);
- } else if (mSuperBounds != null && mSuperBounds.length > 0) {
- fullName += " super " + mSuperBounds[0].fullName(typeVars);
- for (int i = 1; i < mSuperBounds.length; i++) {
- fullName += " & " + mSuperBounds[i].fullName(typeVars);
- }
- } else if (mExtendsBounds != null && mExtendsBounds.length > 0) {
- fullName += " extends " + mExtendsBounds[0].fullName(typeVars);
- for (int i = 1; i < mExtendsBounds.length; i++) {
- fullName += " & " + mExtendsBounds[i].fullName(typeVars);
- }
+ } else if (mSuperBounds != null && !mSuperBounds.isEmpty()) {
+ for (TypeInfo superBound : mSuperBounds) {
+ if (superBound == mSuperBounds.get(0)) {
+ fullName += " super " + superBound.fullName(typeVars);
+ } else {
+ fullName += " & " + superBound.fullName(typeVars);
+ }
+ }
+ } else if (mExtendsBounds != null && !mExtendsBounds.isEmpty()) {
+ for (TypeInfo extendsBound : mExtendsBounds) {
+ if (extendsBound == mExtendsBounds.get(0)) {
+ fullName += " extends " + extendsBound.fullName(typeVars);
+ } else {
+ fullName += " & " + extendsBound.fullName(typeVars);
+ }
+ }
}
return fullName;
}
- public TypeInfo[] typeArguments() {
+ public ArrayList<TypeInfo> typeArguments() {
return mTypeArguments;
}
@@ -235,27 +243,43 @@
}
}
- public static void makeHDF(Data data, String base, TypeInfo[] types, boolean qualified,
+ public static void makeHDF(Data data, String base, ArrayList<TypeInfo> types, boolean qualified,
HashSet<String> typeVariables) {
- final int N = types.length;
- for (int i = 0; i < N; i++) {
- types[i].makeHDFRecursive(data, base + "." + i, qualified, false, typeVariables);
+ int i = 0;
+ for (TypeInfo type : types) {
+ type.makeHDFRecursive(data, base + "." + i++, qualified, false, typeVariables);
}
}
- public static void makeHDF(Data data, String base, TypeInfo[] types, boolean qualified) {
+ public static void makeHDF(Data data, String base, ArrayList<TypeInfo> types, boolean qualified) {
makeHDF(data, base, types, qualified, new HashSet<String>());
}
- void setTypeArguments(TypeInfo[] args) {
+ void setTypeArguments(ArrayList<TypeInfo> args) {
mTypeArguments = args;
}
- void setBounds(TypeInfo[] superBounds, TypeInfo[] extendsBounds) {
+ public void addTypeArgument(TypeInfo arg) {
+ if (mTypeArguments == null) {
+ mTypeArguments = new ArrayList<TypeInfo>();
+ }
+
+ mTypeArguments.add(arg);
+ }
+
+ void setBounds(ArrayList<TypeInfo> superBounds, ArrayList<TypeInfo> extendsBounds) {
mSuperBounds = superBounds;
mExtendsBounds = extendsBounds;
}
+ public ArrayList<TypeInfo> superBounds() {
+ return mSuperBounds;
+ }
+
+ public ArrayList<TypeInfo> extendsBounds() {
+ return mExtendsBounds;
+ }
+
void setIsTypeVariable(boolean b) {
mIsTypeVariable = b;
}
@@ -264,15 +288,17 @@
mIsWildcard = b;
}
- static HashSet<String> typeVariables(TypeInfo[] params) {
+ static HashSet<String> typeVariables(ArrayList<TypeInfo> params) {
return typeVariables(params, new HashSet<String>());
}
- static HashSet<String> typeVariables(TypeInfo[] params, HashSet<String> result) {
- for (TypeInfo t : params) {
- if (t.mIsTypeVariable) {
- result.add(t.mQualifiedTypeName);
- }
+ static HashSet<String> typeVariables(ArrayList<TypeInfo> params, HashSet<String> result) {
+ if (params != null) {
+ for (TypeInfo t : params) {
+ if (t.mIsTypeVariable) {
+ result.add(t.mQualifiedTypeName);
+ }
+ }
}
return result;
}
@@ -323,6 +349,23 @@
return returnString;
}
+ public void addResolution(Resolution resolution) {
+ if (mResolutions == null) {
+ mResolutions = new ArrayList<Resolution>();
+ }
+
+ mResolutions.add(resolution);
+ }
+
+ public void printResolutions() {
+ System.out.println("Resolutions for Type " + mSimpleTypeName + ":");
+ for (Resolution r : mResolutions) {
+ System.out.println(r);
+ }
+ }
+
+ private ArrayList<Resolution> mResolutions;
+
private boolean mIsPrimitive;
private boolean mIsTypeVariable;
private boolean mIsWildcard;
@@ -330,8 +373,8 @@
private String mSimpleTypeName;
private String mQualifiedTypeName;
private ClassInfo mClass;
- private TypeInfo[] mTypeArguments;
- private TypeInfo[] mSuperBounds;
- private TypeInfo[] mExtendsBounds;
+ private ArrayList<TypeInfo> mTypeArguments;
+ private ArrayList<TypeInfo> mSuperBounds;
+ private ArrayList<TypeInfo> mExtendsBounds;
private String mFullName;
}