private static boolean hasVariadicParams(CsmTemplate template) { if (template != null && template.getTemplateParameters() != null) { for (CsmTemplateParameter param : template.getTemplateParameters()) { if (param.isVarArgs()) { return true; } } } return false; }
/** * Creates digger which will extract template parameter according * to the passed type. * * @param templateParam - template parameter for this digger * @param type - template type which digger uses to get path to the template parameter * @return digger */ public static TypeDigger create(CsmTemplateParameter templateParam, CsmType type) { List<ExtractAction> actions = new ArrayList<ExtractAction>(); CsmType templateType = findTemplateParam(templateParam.getQualifiedName().toString(), templateParam.isVarArgs(), type, actions); if (templateType != null) { return new TypeDigger(actions, templateType); } return null; }
public InstantiationParametersInfoImpl(CsmClassifier classifier, List<Pair<CsmSpecializationParameter, List<CsmInstantiation>>> originalParams) { this.classifier = classifier; this.originalParams = originalParams; if (CsmKindUtilities.isTemplate(classifier)) { List<CsmTemplateParameter> templateParams = ((CsmTemplate) classifier).getTemplateParameters(); if (!templateParams.isEmpty() && templateParams.get(templateParams.size() - 1).isVarArgs()) { this.variadic = true; } else { this.variadic = false; } } else { this.variadic = false; } if (hasVariadicParameters(originalParams)) { this.expandedParams = expandVariadicParameters(originalParams); } else { this.expandedParams = this.originalParams; } }
CsmType mappedTypes[] = paramsMap.get(param); if (mappedTypes != null && mappedTypes.length > 0) { if (!param.isVarArgs()) { result.add(ip.createTypeBasedSpecializationParameter(mappedTypes[0], getContextScope(context))); } else {
if (CsmKindUtilities.isTemplateParameterType(paramType) && paramIndex == funParams.size() - 1 && templateParam.equals(((CsmTemplateParameterType) paramType).getParameter()) && templateParam.isVarArgs()) { List<CsmType> varArgs = new ArrayList<CsmType>(); int argIndex = paramIndex;
int i = 0; for (CsmTemplateParameter templateParam : templateParams) { if(templateParam.isVarArgs() && i == templateParams.size() - 1) { List<CsmSpecializationParameter> args = new ArrayList<>(); while(paramsIter.hasNext()) {
CsmType results[] = calcTemplateType(specTemplateParam, specParamType, instType, calcStrategy); if (results != null && results.length > 0) { if (!specTemplateParam.isVarArgs()) { CsmType unfolded = Instantiation.unfoldInstantiatedType(results[0]); return createTypeBasedSpecializationParameter(unfolded, specParam.getScope()); if (specTemplateParam.isVarArgs()) { return createVariadicSpecializationParameter( Collections.<CsmSpecializationParameter>emptyList(),
if (tplParamIter.hasNext()) { tplParam = tplParamIter.next(); } else if (tplParam == null || !tplParam.isVarArgs()) {