Closed eclipse-ocl-bot closed 2 hours ago
By Ed Willink on Nov 30, 2015 02:27
This appears to be a correct behaviour with an excessive diagnostic.
A user-defined operation invocation problem gives an OCL invalid result, and an explanatory error log message.
The Pivot-based OCL has a rich invalid that can carry the problem back to the caller.
Is there any alternative for the Classic Ecore-based OCL?
The current behaviour is particularly unhelpful to QVTo which already has a callOperation override. A better overrideable getInvalidResult(Exception) method?
It appears that the user method was identified but an NPE occurred before it was invoked. Probably source or arguments are null. A null source can certainly be invalid without error log. A probable fix for this case.
More generally, if a new EvaluationOptions.CACHE_INVALID option is set, any exceptions could be cached by the EvaluationEnvironment so that the invoking application (which sets EvaluationOptions.CACHE_INVALID) can access them on demand without troubling the error log.
By Ed Willink on Nov 21, 2016 04:22
(In reply to Ed Willink from comment #1)
This appears to be a correct behaviour with an excessive diagnostic.
The diagnostic propagation to the user is caller's resposibility.
Probably one of:
org.eclipse.m2m.internal.qvt.oml.ast.env.QvtOperationalEvaluationEnv.callOperation
org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEvaluationVisitorImpl.visitExpression
org.eclipse.m2m.qvt.oml.TransformationExecutor.execute
But possibly:
org.eclipse.papyrus.java.generator.jdtsynchronizer.RunGenerator.runTransformation
Not OCL, redirecting to QVTo
By Ed Willink on Feb 13, 2019 08:04
(In reply to Ed Willink from comment #2)
Not OCL, redirecting to QVTo
Restoring to OCL. AbstractEvaluationEnvironment.callOperation is at the heart of the problem. If a method is invoked on a null source an NPE results which is caught and logged by OCL. Difficult for QVTo or Papyrus to intercept without guaranteeing non-null.
The null source could be detected/correlated against a ststic method, in which case the local logging is bypassed and an IllegalArgumentException propagtes to be logged again by OCL. No real change. There seems no special IAE handling.
The callOperation Javadoc is:
* Implements the inherited method by attempting to find an appropriate
* Java method in the actual type of the <tt>source</tt> object and invoking
* it. On failure to find or invoke the method (e.g., an exception), the
* <tt>OclInvalid</tt> result is returned.\
*
* @return the result of the Java method invocation, or <tt>OclInvalid</tt>
* on failure of the method invocation
strongly suggesting that method invocation failures can be silently turned into OclInvalid. No logging appropriate for 'normal' failures.
There is no Javadoc corresponding to @throws IllegalArgumentException
Very simple fix, but it is a subtle Classic OCL change which always seems to ripple. Maybe we just change the log from
"ERROR in (calloperation): (null)"
to
"INFO in callOperation of ..."
Feb 13, 2019 16:52
New Gerrit change created: https://git.eclipse.org/r/136876
Feb 13, 2019 17:25
Gerrit change https://git.eclipse.org/r/136876 was merged to [master].\ Commit: http://git.eclipse.org/c/ocl/org.eclipse.ocl.git/commit/?id=4cdba7f8f98317ab0c17890b7489616eb7bf094e
By Ed Willink on Feb 14, 2019 08:47
Pushed to master for M3.
| --- | --- | | Bugzilla Link | 483246 | | Status | RESOLVED FIXED | | Importance | P3 normal | | Reported | Nov 30, 2015 02:02 EDT | | Modified | Apr 08, 2019 10:47 EDT | | See also | Gerrit change https://git.eclipse.org/r/136876, Git commit 4cdba7f8, 546202 | | Reporter | EPP Error Reports |
Description
The following incident was reported via the automated error reporting:
\
General Information:
The following plug-ins were present on the execution stack (*):
Please note that:
Other Resources:
Thank you for your assistance.\ Your friendly error-reports-inbox.
This bug was created on behalf of ed@xxxxxxxxxxxx.