use of org.eclipse.titan.designer.AST.TTCN3.statements.Getreply_Statement in project titan.EclipsePlug-ins by eclipse.
the class Call_Statement method checkCallBody.
/**
* Checks the response and exception handling part of a call operation.
*
* @param timestamp
* the timestamp of the actual build cycle.
* @param portType
* the port type of the actual call statement.
* @param signature
* the signature type of the actual call statement.
*/
private void checkCallBody(final CompilationTimeStamp timestamp, final Port_Type portType, final IType signature) {
boolean hasCatchTimeout = false;
for (int i = 0; i < altGuards.getNofAltguards(); i++) {
final AltGuard altGuard = altGuards.getAltguardByIndex(i);
if (!altguard_type.AG_OP.equals(altGuard.getType())) {
continue;
}
final Statement statement = ((Operation_Altguard) altGuard).getGuardStatement();
if (Statement_type.S_CATCH.equals(statement.getType())) {
((Catch_Statement) statement).setCallSettings(true, timerValue != null);
hasCatchTimeout |= ((Catch_Statement) statement).hasTimeout();
}
}
altGuards.setMyLaicStmt(altGuards, null);
altGuards.setMyAltguards(altGuards);
altGuards.check(timestamp);
if (portType != null) {
// operation.
for (int i = 0; i < altGuards.getNofAltguards(); i++) {
final AltGuard altguard = altGuards.getAltguardByIndex(i);
if (!altguard_type.AG_OP.equals(altguard.getType())) {
continue;
}
final Statement statement = ((Operation_Altguard) altguard).getGuardStatement();
if (statement.getIsErroneous()) {
continue;
}
switch(statement.getType()) {
case S_GETREPLY:
{
final Reference tempPortReference = ((Getreply_Statement) statement).getPortReference();
if (tempPortReference == null) {
final String message = MessageFormat.format("The `{0}'' operation must refer to the same port as the previous `call'' statement: `{1}'' was expected instead of `any port''", statement.getStatementName(), portReference.getId().getDisplayName());
statement.getLocation().reportSemanticError(message);
} else if (!portReference.getId().equals(tempPortReference.getId())) {
final String message = MessageFormat.format("The `{0}'' operation refers to a different port than the previous `call'' statement: `{1}'' was expected instead of `{2}''", statement.getStatementName(), portReference.getId().getDisplayName(), tempPortReference.getId().getDisplayName());
tempPortReference.getLocation().reportSemanticError(message);
}
final TemplateInstance instance = ((Getreply_Statement) statement).getReceiveParameter();
if (instance != null) {
final IType tempSignature = instance.getExpressionGovernor(timestamp, Expected_Value_type.EXPECTED_DYNAMIC_VALUE);
if (tempSignature != null && signature != null && !signature.isCompatible(timestamp, tempSignature, null, null, null)) {
final String message = MessageFormat.format(GETRPELYTOWRONGSIGNATURE, signature.getTypename(), tempSignature.getTypename());
instance.getLocation().reportSemanticError(message);
}
}
break;
}
case S_CATCH:
final Reference tempPortReference = ((Catch_Statement) statement).getPortReference();
if (tempPortReference == null) {
final String message = MessageFormat.format("The `{0}'' operation must refer to the same port as the previous `call'' statement: `{1}'' was expected instead of `any port''", statement.getStatementName(), portReference.getId().getDisplayName());
statement.getLocation().reportSemanticError(message);
} else if (!portReference.getId().equals(tempPortReference.getId())) {
final String message = MessageFormat.format("The `{0}'' operation refers to a different port than the previous `call'' statement: `{1}'' was expected instead of `{2}''", statement.getStatementName(), portReference.getId().getDisplayName(), tempPortReference.getId().getDisplayName());
tempPortReference.getLocation().reportSemanticError(message);
}
final Signature_Type tempSignature = ((Catch_Statement) statement).getSignatureType();
if (tempSignature != null && signature != null && !signature.isCompatible(timestamp, tempSignature, null, null, null)) {
final String message = MessageFormat.format("The `catch'' operation refers to a different signature than the previous `call'' statement: `{0}'' was expected instead of `{1}''", signature.getTypename(), tempSignature.getTypename());
statement.getLocation().reportSemanticError(message);
}
break;
default:
break;
}
}
}
if (timerValue != null && !hasCatchTimeout) {
location.reportSemanticWarning("The call operation has a timer, but the timeout expection is not cought");
}
}
use of org.eclipse.titan.designer.AST.TTCN3.statements.Getreply_Statement in project titan.EclipsePlug-ins by eclipse.
the class Shorthand method process.
@Override
protected void process(final IVisitableNode node, final Problems problems) {
if (node instanceof Timeout_Statement) {
typename = NAME_TIMEOUT;
} else if (node instanceof Receive_Port_Statement) {
typename = NAME_RECEIVE;
} else if (node instanceof Trigger_Port_Statement) {
typename = NAME_TRIGGER;
} else if (node instanceof Getcall_Statement) {
typename = NAME_GETCALL;
} else if (node instanceof Catch_Statement) {
typename = NAME_CATCH;
} else if (node instanceof Check_Port_Statement) {
typename = NAME_CHECK;
} else if (node instanceof Check_Receive_Port_Statement) {
typename = NAME_CHECK_RECEIVE;
} else if (node instanceof Check_Getcall_Statement) {
typename = NAME_CHECK_GETCALL;
} else if (node instanceof Check_Catch_Statement) {
typename = NAME_CHECK_CATCH;
} else if (node instanceof Check_Getreply_Statement) {
typename = NAME_CHECK_GETREPLY;
} else if (node instanceof Getreply_Statement) {
typename = NAME_GETREPLY;
} else if (node instanceof Done_Statement) {
typename = NAME_DONE;
} else if (node instanceof Killed_Statement) {
typename = NAME_KILLED;
} else {
return;
}
final Statement s = (Statement) node;
check(s, problems);
}
Aggregations