1 19 20 package edu.umd.cs.findbugs.ba.generic; 21 22 import java.util.List ; 23 24 import org.apache.bcel.generic.ObjectType; 25 import org.apache.bcel.generic.Type; 26 27 import edu.umd.cs.findbugs.annotations.NonNull; 28 29 43 public class GenericObjectType extends ObjectType { 44 45 final List <Type> parameters; 46 47 final String variable; 48 49 final Type extension; 50 51 public Type getUpperBound() { 52 if (variable.equals("+")) return extension; 53 return this; 54 } 55 56 59 public Type getExtension() { 60 return extension; 61 } 62 63 66 public String getVariable() { 67 return variable; 68 } 69 70 74 public GenericUtilities.TypeCategory getTypeCategory() { 75 if (hasParameters() && variable == null && extension == null) { 76 return GenericUtilities.TypeCategory.PARAMETERS; 77 78 } else if(!hasParameters() && variable != null && extension == null){ 79 if (variable.equals("*")) return GenericUtilities.TypeCategory.WILDCARD; 80 else return GenericUtilities.TypeCategory.TYPE_VARIABLE; 81 82 } else if(!hasParameters() && variable != null && extension != null){ 83 if (variable.equals("+")) return GenericUtilities.TypeCategory.WILDCARD_EXTENDS; 84 else if (variable.equals("-")) return GenericUtilities.TypeCategory.WILDCARD_SUPER; 85 86 } 87 throw new IllegalStateException ("The Generic Object Type is badly initialized"); 89 } 90 91 95 public boolean hasParameters() { 96 return parameters != null && parameters.size() > 0; 97 } 98 99 102 public int getNumParameters() { 103 return parameters != null ? parameters.size() : 0; 104 } 105 106 110 public Type getParameterAt(int index) { 111 if (index < getNumParameters()) 112 return parameters.get(index); 113 else 114 throw new IndexOutOfBoundsException ("The index " + index + " is too large"); 115 } 116 117 119 124 GenericObjectType(@NonNull String variable) { 125 this(variable, (Type) null); 126 } 127 128 133 GenericObjectType(@NonNull String wildcard, Type extension) { 134 super(Type.OBJECT.getClassName()); 135 this.variable = wildcard; 136 this.extension = extension; 137 parameters = null; 138 } 139 140 145 GenericObjectType(String class_name, List <Type> parameters) { 146 super(class_name); 147 variable = null; 148 extension = null; 149 if (parameters == null || parameters.size() == 0) 150 throw new IllegalStateException ("argument 'parameters' must contain at least 1 parameter"); 151 this.parameters = parameters; 152 } 153 154 157 public ObjectType getObjectType() { 158 return (ObjectType) Type.getType(getSignature()); 159 } 160 161 172 public String toString(boolean includeGenerics) { 173 if (!includeGenerics) return super.toString(); 174 175 return getTypeCategory().asString(this); 176 } 177 178 } 179 | Popular Tags |