if (hasTupleOrdinalPart) {
//in the non-extension case, create code for:
//RTRecordValue.makeTupleMixedRecord(new RTValue[] {ordinalValues1, ..., ordinalValuesN},
// new String[] {textualFieldName1, ..., textualFieldNameM},
// new RTValue[] {textualFieldValue1, ..., textualFieldValueM}
MethodInvocation mi;
if (baseRecordExpr != null) {
mi = new MethodInvocation.Instance(
invocationTarget,
makeRecordCreationName("makeTupleMixedRecord", baseRecordExpr),
new JavaExpression[] {
createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext),
createTextualNamesArray(extensionFieldsData.getTextualNames()),
createTextualValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
new JavaTypeName[] {JavaTypeNames.RTVALUE_ARRAY, JavaTypeName.STRING_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
JavaTypeNames.RTRECORD_VALUE,
InvocationType.VIRTUAL);
} else {
//static invocation
mi = new MethodInvocation.Static(
JavaTypeNames.RTRECORD_VALUE,
makeRecordCreationName("makeTupleMixedRecord", null),
new JavaExpression[] {
createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext),
createTextualNamesArray(extensionFieldsData.getTextualNames()),
createTextualValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
new JavaTypeName[] {JavaTypeNames.RTVALUE_ARRAY, JavaTypeName.STRING_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
JavaTypeNames.RTRECORD_VALUE);
}
return new ExpressionContextPair (mi, recordExtensionBlock);
}
MethodInvocation mi;
if (baseRecordExpr != null) {
mi = new MethodInvocation.Instance(
invocationTarget,
makeRecordCreationName("makeMixedRecord", baseRecordExpr),
new JavaExpression[] {
createOrdinalNamesArray(extensionFieldsData.getOrdinalNames()),
createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext),
createTextualNamesArray(extensionFieldsData.getTextualNames()),
createTextualValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
new JavaTypeName[] {JavaTypeName.INT_ARRAY, JavaTypeNames.RTVALUE_ARRAY, JavaTypeName.STRING_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
JavaTypeNames.RTRECORD_VALUE,
InvocationType.VIRTUAL);
} else {
mi = new MethodInvocation.Static(
JavaTypeNames.RTRECORD_VALUE,
makeRecordCreationName("makeMixedRecord", null),
new JavaExpression[] {
createOrdinalNamesArray(extensionFieldsData.getOrdinalNames()),
createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext),
createTextualNamesArray(extensionFieldsData.getTextualNames()),
createTextualValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
new JavaTypeName[] {JavaTypeName.INT_ARRAY, JavaTypeNames.RTVALUE_ARRAY, JavaTypeName.STRING_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
JavaTypeNames.RTRECORD_VALUE);
}
return new ExpressionContextPair (mi, recordExtensionBlock);
}
if (hasTupleOrdinalPart) {
MethodInvocation mi;
if (baseRecordExpr != null) {
mi = new MethodInvocation.Instance(
invocationTarget,
makeRecordCreationName("makeTupleRecord", baseRecordExpr),
new JavaExpression[] {createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
new JavaTypeName[] {JavaTypeNames.RTVALUE_ARRAY},
JavaTypeNames.RTRECORD_VALUE,
InvocationType.VIRTUAL);
} else {
mi = new MethodInvocation.Static(
JavaTypeNames.RTRECORD_VALUE,
makeRecordCreationName("makeTupleRecord", null),
new JavaExpression[] {createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
new JavaTypeName[] {JavaTypeNames.RTVALUE_ARRAY},
JavaTypeNames.RTRECORD_VALUE);
}
return new ExpressionContextPair(mi, recordExtensionBlock);
}
MethodInvocation mi;
if (baseRecordExpr != null) {
mi = new MethodInvocation.Instance(
invocationTarget,
makeRecordCreationName("makeOrdinalRecord", baseRecordExpr),
new JavaExpression[] {
createOrdinalNamesArray(extensionFieldsData.getOrdinalNames()),
createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
new JavaTypeName[] {JavaTypeName.INT_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
JavaTypeNames.RTRECORD_VALUE,
InvocationType.VIRTUAL);
} else {
mi = new MethodInvocation.Static(
JavaTypeNames.RTRECORD_VALUE,
makeRecordCreationName("makeOrdinalRecord", null),
new JavaExpression[] {
createOrdinalNamesArray(extensionFieldsData.getOrdinalNames()),
createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
new JavaTypeName[] {JavaTypeName.INT_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
JavaTypeNames.RTRECORD_VALUE);
}
return new ExpressionContextPair (mi, recordExtensionBlock);
}
if (nTextualFields > 0) {
//create code for:
//RTRecordValue.makeTextualRecord(new String[] {textualFieldName1, ..., textualFieldNameN},
// new RTValue[] {valueExpr1, ...., valueExprN})
//or
//baseRecordExpr.makeTextualRecordExtension(new String[] {textualFieldName1, ..., textualFieldNameN},
// new RTValue[] {valueExpr1, ...., valueExprN})
MethodInvocation mi;
if (baseRecordExpr != null) {
mi = new MethodInvocation.Instance(
invocationTarget,
makeRecordCreationName("makeTextualRecord", baseRecordExpr),
new JavaExpression[] {createTextualNamesArray(extensionFieldsData.getTextualNames()),