public bool Validate(CodeGenerationOptions opt, GenericParameterDefinitionList in_params) { if (!gen.Validate(opt, in_params)) { return(false); } is_concrete = true; type_params = new ISymbol [java_params.Length]; for (int i = 0; i < java_params.Length; i++) { string tp = java_params [i]; var gpd = in_params != null?in_params.FirstOrDefault(t => t.Name == tp) : null; if (gpd != null) { type_params [i] = new GenericTypeParameter(gpd); is_concrete = false; continue; } else if (tp == "?") { if (in_params != null && in_params.Count == 1) { type_params [i] = new GenericTypeParameter(in_params [0]); is_concrete = false; } else { type_params [i] = new SimpleSymbol("null", "java.lang.Object", "object", "Ljava/lang/Object;"); } continue; } ISymbol psym = SymbolTable.Lookup(tp, in_params); if (psym == null || !psym.Validate(opt, in_params)) { return(false); } if (psym is GenericSymbol && !(psym as GenericSymbol).IsConcrete) { is_concrete = false; } type_params [i] = /*psym is IGeneric ? (psym as IGeneric).GetGenericType (null) : psym.FullName*/ psym; } tps = type_params == null ? null : "<" + String.Join(", ", (from tp in type_params select tp.FullName).ToArray()) + ">"; return(true); }