use of com.datatorrent.stram.webapp.asm.Type.WildcardTypeNode in project apex-core by apache.
the class TypeGraph method setTypes.
private void setTypes(JSONObject propJ, Type rawType, Map<Type, Type> typeReplacement, Set<Type> visitedType) throws JSONException {
boolean stopRecursive = visitedType.contains(rawType);
visitedType.add(rawType);
// type could be replaced
Type t = resolveType(rawType, typeReplacement);
if (propJ == null) {
return;
} else {
if (t instanceof WildcardTypeNode) {
propJ.put("type", "?");
} else if (t instanceof TypeNode) {
TypeNode tn = (TypeNode) t;
String typeS = tn.getTypeObj().getClassName();
propJ.put("type", typeS);
UI_TYPE uiType = UI_TYPE.getEnumFor(typeS, typeGraph);
if (uiType != null) {
switch(uiType) {
case FLOAT:
case LONG:
case INT:
case DOUBLE:
case BYTE:
case SHORT:
case STRING:
propJ.put("type", uiType.getName());
break;
default:
propJ.put("uiType", uiType.getName());
}
}
if (t instanceof ParameterizedTypeNode) {
JSONArray jArray = new JSONArray();
for (Type ttn : ((ParameterizedTypeNode) t).getActualTypeArguments()) {
JSONObject objJ = new JSONObject();
if (!stopRecursive) {
setTypes(objJ, ttn, typeReplacement, visitedType);
}
jArray.put(objJ);
}
propJ.put("typeArgs", jArray);
}
}
if (t instanceof WildcardTypeNode) {
JSONObject typeBounds = new JSONObject();
JSONArray jArray = new JSONArray();
Type[] bounds = ((WildcardTypeNode) t).getUpperBounds();
if (bounds != null) {
for (Type type : bounds) {
jArray.put(type.toString());
}
}
typeBounds.put("upper", jArray);
bounds = ((WildcardTypeNode) t).getLowerBounds();
jArray = new JSONArray();
if (bounds != null) {
for (Type type : bounds) {
jArray.put(type.toString());
}
}
typeBounds.put("lower", jArray);
propJ.put("typeBounds", typeBounds);
}
if (t instanceof ArrayTypeNode) {
propJ.put("type", t.getByteString());
propJ.put("uiType", UI_TYPE.LIST.getName());
JSONObject jObj = new JSONObject();
if (!stopRecursive) {
setTypes(jObj, ((ArrayTypeNode) t).getActualArrayType(), typeReplacement, visitedType);
}
propJ.put("itemType", jObj);
}
if (t instanceof TypeVariableNode) {
propJ.put("typeLiteral", ((TypeVariableNode) t).getTypeLiteral());
if (!stopRecursive) {
setTypes(propJ, ((TypeVariableNode) t).getRawTypeBound(), typeReplacement, visitedType);
}
}
}
}
use of com.datatorrent.stram.webapp.asm.Type.WildcardTypeNode in project apex-core by apache.
the class BaseSignatureVisitor method visitTypeArgument.
@Override
public SignatureVisitor visitTypeArgument(char typeArg) {
TypeNode t = (TypeNode) visitingStack.pop();
if (t instanceof ParameterizedTypeNode) {
visitingStack.push(t);
} else {
ParameterizedTypeNode pt = new ParameterizedTypeNode();
pt.setObjByteCode(t.getObjByteCode());
visitingStack.push(pt);
}
if (typeArg == SignatureVisitor.INSTANCEOF) {
return this;
}
WildcardTypeNode wtn = new WildcardTypeNode();
wtn.boundChar = typeArg;
visitingStack.push(wtn);
return this;
}
Aggregations