use of com.rockwellcollins.atc.resolute.resolute.FnCallExpr in project osate2 by osate.
the class ExecuteResoluteUtil method executeResoluteFunctionOnce.
/**
* invokes Resolute claim function on targetComponent or targetElement if not null.
* instanceroot is used to initialize the Resolute evaluation context.
* targetComponent is the evaluation context
* targetElement is the model element within the component instance or null.
* parameterObjects is a list of additional parameters of types RealLiteral, IntegerLiteral, StringLiteral, BooleanLiteral
* parameterObjects can be null or an empty list.
* The return value is an Issue object with subissues for the list of issues returned in the Resolute ClaimResult.
* If the proof fails then the top Issue is set to FAIL, if successful it is set to SUCCESS
*/
public Diagnostic executeResoluteFunctionOnce(EObject fundef, final SystemInstance instanceroot, final ComponentInstance targetComponent, final InstanceObject targetElement, List<PropertyExpression> parameterObjects) {
FunctionDefinition fd = (FunctionDefinition) fundef;
initializeResoluteContext(instanceroot);
EvaluationContext context = new EvaluationContext(targetComponent, sets, featToConnsMap);
// check for claim function
FnCallExpr fcncall = createWrapperFunctionCall(fd, targetComponent, targetElement, parameterObjects);
if (fcncall != null) {
// using com.rockwellcollins.atc.resolute.analysis.results.ClaimResult
ResoluteProver prover = new ResoluteProver(context) {
@Override
protected ResoluteEvaluator createResoluteEvaluator() {
return new ResoluteEvaluator(context, varStack.peek()) {
@Override
public ResoluteValue caseThisExpr(ThisExpr object) {
NamedElement curr = context.getThisInstance();
if (object.getSub() != null) {
curr = object.getSub().getBase();
}
return new NamedElementValue(curr);
}
};
}
};
ResoluteResult res = prover.doSwitch(fcncall);
return doResoluteResults(res);
} else {
return ResultUtil.createErrorDiagnostic("Could not find Resolute Function " + fd.getName(), fd);
}
}
use of com.rockwellcollins.atc.resolute.resolute.FnCallExpr in project osate2 by osate.
the class ResoluteInterface method createWrapperFunctionCall.
private FnCallExpr createWrapperFunctionCall(FunctionDefinition fd, InstanceObject io, List<PropertyExpression> params) {
ResoluteFactory factory = ResoluteFactory.eINSTANCE;
FnCallExpr call = factory.createFnCallExpr();
call.setFn(fd);
int fdparams = fd.getArgs().size();
int aparams = 0;
if (params != null) {
aparams = params.size();
}
if (fdparams == aparams + 1) {
call.getArgs().add(createInstanceObjectReference(io));
}
if (params != null) {
addParams(call, params);
}
return call;
}
use of com.rockwellcollins.atc.resolute.resolute.FnCallExpr in project osate2 by osate.
the class ResoluteInterface method addParams.
private void addParams(FnCallExpr call, List<PropertyExpression> params) {
for (PropertyExpression p : params) {
if (p instanceof RealLiteral) {
RealExpr realval = ResoluteFactory.eINSTANCE.createRealExpr();
realval.setVal((RealLiteral) p);
call.getArgs().add(realval);
} else if (p instanceof IntegerLiteral) {
IntExpr intval = ResoluteFactory.eINSTANCE.createIntExpr();
intval.setVal((IntegerLiteral) p);
call.getArgs().add(intval);
} else if (p instanceof StringLiteral) {
StringExpr stringval = ResoluteFactory.eINSTANCE.createStringExpr();
stringval.setVal((StringLiteral) p);
call.getArgs().add(stringval);
} else if (p instanceof BooleanLiteral) {
BoolExpr boolval = ResoluteFactory.eINSTANCE.createBoolExpr();
boolval.setVal((BooleanLiteral) p);
call.getArgs().add(boolval);
} else if (p instanceof InstanceReferenceValue) {
Expr ref = createInstanceObjectReference(((InstanceReferenceValue) p).getReferencedInstanceObject());
call.getArgs().add(ref);
}
}
}
use of com.rockwellcollins.atc.resolute.resolute.FnCallExpr in project osate2 by osate.
the class ResoluteInterface method executeResoluteFunctionOnce.
/**
* invokes Resolute claim function on targetComponent or targetElement if not null.
* instanceroot is used to initialize the Resolute evaluation context.
* targetComponent is the evaluation context
* targetElement is the model element within the component instance or null.
* parameterObjects is a list of additional parameters of types RealLiteral, IntegerLiteral, StringLiteral, BooleanLiteral
* parameterObjects can be null or an empty list.
* The return value is an Issue object with subissues for the list of issues returned in the Resolute ClaimResult.
* If the proof fails then the top Issue is set to FAIL, if successful it is set to SUCCESS
*/
public EObject executeResoluteFunctionOnce(EObject fundef, final ComponentInstance targetComponent, final InstanceObject targetElement, List<PropertyExpression> parameterObjects) {
FunctionDefinition fd = (FunctionDefinition) fundef;
initializeResoluteContext(targetComponent.getSystemInstance());
EvaluationContext context = new EvaluationContext(targetComponent, sets, featToConnsMap);
// check for claim function
FnCallExpr fcncall = createWrapperFunctionCall(fd, targetElement, parameterObjects);
if (fcncall != null) {
// if (fcncall.getFn().getBody() instanceof ClaimBody) {
// using com.rockwellcollins.atc.resolute.analysis.results.ClaimResult
ResoluteProver prover = new ResoluteProver(context) {
@Override
protected ResoluteEvaluator createResoluteEvaluator() {
return new ResoluteEvaluator(context, varStack.peek()) {
@Override
public ResoluteValue caseThisExpr(ThisExpr object) {
// We prepare a thisexpr with either the component instance as context object or a single reference to a model element
// See createWrapperFunctionCall
NamedElement curr = context.getThisInstance();
if (object.getSub() != null) {
curr = object.getSub().getBase();
}
return new NamedElementValue(curr);
}
};
}
};
try {
ResoluteResult res = prover.doSwitch(fcncall);
return doResoluteResults(res);
} catch (ResoluteFailException e) {
return ResultUtil.createFailureResult(e.getMessage(), targetElement);
}
// } else {
// // computational function
// ResoluteEvaluator engine = new ResoluteEvaluator(context, null) {
// @Override
// public ResoluteValue caseThisExpr(ThisExpr object) {
// // We prepare a thisexpr with either the component instance as context object or a single reference to a model element
// // See createWrapperFunctionCall
// NamedElement curr = context.getThisInstance();
// if (object.getSub() != null) {
// curr = object.getSub().getBase();
// }
// return new NamedElementValue(curr);
// }
// };
// Object res = engine.doSwitch(fcncall);
// return null;
// }
} else {
return ResultUtil.createErrorDiagnostic("Could not find Resolute Function " + fd.getName(), fd);
}
}
use of com.rockwellcollins.atc.resolute.resolute.FnCallExpr in project osate2 by osate.
the class ExecuteResoluteUtil method createWrapperFunctionCall.
private FnCallExpr createWrapperFunctionCall(FunctionDefinition fd, ComponentInstance evalContext, InstanceObject io, List<PropertyExpression> params) {
ResoluteFactory factory = ResoluteFactory.eINSTANCE;
FnCallExpr call = factory.createFnCallExpr();
call.setFn(fd);
call.getArgs().add(createInstanceObjectReference(evalContext, io));
if (params != null) {
addParams(call, params);
}
return call;
}
Aggregations