private List<IRType> getBoundedParameterTypeDescriptors(IConstructorInfo mi) { if (mi.getParameters().length == 0) { return Collections.emptyList(); } if (mi instanceof IJavaConstructorInfo) { return IRTypeResolver.getDescriptors( ((IJavaConstructorInfo) mi).getJavaConstructor().getParameterTypes()); } else if (mi instanceof IGosuConstructorInfo) { IReducedDynamicFunctionSymbol dfs = ((IGosuConstructorInfo) mi).getDfs(); while (dfs instanceof ReducedParameterizedDynamicFunctionSymbol) { ReducedParameterizedDynamicFunctionSymbol pdfs = (ReducedParameterizedDynamicFunctionSymbol) dfs; dfs = pdfs.getBackingDfs(); } List<IRType> boundedTypes = new ArrayList<IRType>(dfs.getArgs().size()); if (IGosuClass.ProxyUtil.isProxy(dfs.getGosuClass())) { return getBoundedParamTypesFromProxiedClass(dfs); } for (int i = 0; i < dfs.getArgs().size(); i++) { boundedTypes.add( IRTypeResolver.getDescriptor( TypeLord.getDefaultParameterizedTypeWithTypeVars(dfs.getArgs().get(i).getType()))); } return boundedTypes; } else { return getTypeDescriptors(mi.getParameters()); } }
private List<IRType> getBoundedParamTypesFromProxiedClass(IReducedDynamicFunctionSymbol dfs) { Constructor m = getJavaConstructorFromProxy(dfs); return IRTypeResolver.getDescriptors(m.getParameterTypes()); }