Bug #5561
Direct Java interface: conversion crashes when an expression is passed as argument to Java call
Start date:
Due date:
% Done:
100%
billable:
No
vendor_id:
GCD
case_num:
History
#1 Updated by Vladimir Tsichevski almost 3 years ago
The following fragment conversion crashes:
USING java.io.ByteArrayOutputStream FROM JAVA. DEFINE VARIABLE bos AS ByteArrayOutputStream. bos = new ByteArrayOutputStream(10000). USING java.io.DataOutputStream FROM JAVA. DEFINE VARIABLE out AS DataOutputStream. out = new DataOutputStream(bos). DEFINE VARIABLE intVar AS INTEGER NO-UNDO. DO: out:writeInt(intVar + 5). CATCH EXC AS java.io.IOException: END. END.
the error is:
[java] EXPRESSION EXECUTION ERROR: [java] --------------------------- [java] sig = sig.substring(sig.indexOf('(') + 1)) [java] ^ { java.lang.NullPointerException } [java] --------------------------- [java] ERROR: [java] com.goldencode.p2j.pattern.TreeWalkException: ERROR! Active Rule: [java] ----------------------- [java] RULE REPORT [java] ----------------------- [java] Rule Type : WALK [java] Source AST: [ + ] BLOCK/INNER_BLOCK/BLOCK/ASSIGNMENT/EXPRESSION/OBJECT_INVOCATION/OO_METH_VOID/PLUS/ @12:29 {227633266799} [java] Copy AST : [ + ] BLOCK/INNER_BLOCK/BLOCK/ASSIGNMENT/EXPRESSION/OBJECT_INVOCATION/OO_METH_VOID/PLUS/ @12:29 {227633266799} [java] Condition : sig = sig.substring(sig.indexOf('(') + 1)) [java] Loop : false [java] --- END RULE REPORT --- [java] [java] [java] [java] at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1070) [java] at com.goldencode.p2j.convert.TransformDriver.processTrees(TransformDriver.java:569) [java] at com.goldencode.p2j.convert.ConversionDriver.back(ConversionDriver.java:585) [java] at com.goldencode.p2j.convert.TransformDriver.executeJob(TransformDriver.java:948) [java] at com.goldencode.p2j.convert.ConversionDriver.main(ConversionDriver.java:1020) [java] Caused by: com.goldencode.expr.ExpressionException: Expression execution error @1:25 [PLUS id=227633266799] [java] at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:275) [java] at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:210) [java] at com.goldencode.p2j.pattern.PatternEngine.apply(PatternEngine.java:1633) [java] at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1531) [java] at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1479) [java] at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1034) [java] ... 4 more [java] Caused by: com.goldencode.expr.ExpressionException: Expression execution error @1:25 [java] at com.goldencode.expr.Expression.execute(Expression.java:484) [java] at com.goldencode.p2j.pattern.Rule.apply(Rule.java:497) [java] at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:745) [java] at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:712) [java] at com.goldencode.p2j.pattern.Rule.apply(Rule.java:534) [java] at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:745) [java] at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:712) [java] at com.goldencode.p2j.pattern.Rule.apply(Rule.java:534) [java] at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:745) [java] at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:712) [java] at com.goldencode.p2j.pattern.Rule.apply(Rule.java:534) [java] at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:745) [java] at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:712) [java] at com.goldencode.p2j.pattern.Rule.apply(Rule.java:534) [java] at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:585) [java] at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:1) [java] at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:585) [java] at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:1) [java] at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:262) [java] ... 9 more [java] Caused by: java.lang.NullPointerException [java] at com.goldencode.expr.CE18602.execute(Unknown Source) [java] at com.goldencode.expr.Expression.execute(Expression.java:391) [java] ... 27 more
If the line
out:writeInt(intVar + 5).
is changed to
out:writeInt(intVar).
then the conversion runs OK and produces presumably valid result.
#3 Updated by Greg Shah almost 3 years ago
- % Done changed from 0 to 100
- Assignee set to Greg Shah
- Status changed from New to Review
Fixed in branch 3821c revision 12708. We must exclude Java method calls from built-in OO 4GL method processing.
Constantin: Please review.