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:
version_reported:
version_resolved:
reviewer:
production:
No
env_name:
topics:
History
#1 Updated by Vladimir Tsichevski almost 5 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 5 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.