Project

General

Profile

Bug #5561

Direct Java interface: conversion crashes when an expression is passed as argument to Java call

Added by Vladimir Tsichevski almost 3 years ago. Updated almost 3 years ago.

Status:
Review
Priority:
High
Assignee:
Target version:
-
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.

Also available in: Atom PDF