Bug #7135
NPE in conversion of OO looking for oldtype annotation
100%
History
#1 Updated by Roger Borrello about 1 year ago
- Subject changed from NPE in conversion of OO looking for oldtyp annotation to NPE in conversion of OO looking for oldtype annotation
Using this testcase (placed in uast/oo
:
USING Progress.Lang.*. CLASS oo.roger: USING com.goldencode.p2j.ui.chart.* FROM java. DEFINE PRIVATE VARIABLE ultraChartHandle AS HANDLE NO-UNDO. DEFINE PRIVATE VARIABLE ultraChart AS com.goldencode.p2j.ui.ChartWidget NO-UNDO. CONSTRUCTOR PUBLIC roger ( ): CREATE chart ultraChartHandle. ASSIGN ultraChart = com.goldencode.p2j.util.handle:getResource(ultraChartHandle). END CONSTRUCTOR. METHOD PUBLIC VOID CreateTable (): ASSIGN ultraChart:labelHash = NEW java.util.HashMap(). // <--- This is the error line END METHOD. END CLASS.
The conversion throws this error:
./uast/oo/roger.cls Elapsed job time: 00:00:01.084 ERROR: com.goldencode.p2j.pattern.TreeWalkException: ERROR! Active Rule: ----------------------- RULE REPORT ----------------------- Rule Type : WALK Source AST: [ = ] BLOCK/CLASS_DEF/BLOCK/METHOD_DEF/BLOCK/STATEMENT/KW_ASSIGN/ASSIGN/ @13:30 {292057776248} Copy AST : [ = ] BLOCK/CLASS_DEF/BLOCK/METHOD_DEF/BLOCK/STATEMENT/KW_ASSIGN/ASSIGN/ @13:30 {292057776248} Condition : oldtype = #(int)(#(long) ref.getAnnotation("oldtype")) Loop : false --- END RULE REPORT --- at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1093) at com.goldencode.p2j.convert.TransformDriver.processTrees(TransformDriver.java:586) at com.goldencode.p2j.convert.ConversionDriver.back(ConversionDriver.java:585) at com.goldencode.p2j.convert.TransformDriver.executeJob(TransformDriver.java:998) at com.goldencode.p2j.convert.ConversionDriver.main(ConversionDriver.java:1284) Caused by: java.lang.NullPointerException at com.goldencode.expr.CE10330.execute(Unknown Source) at com.goldencode.expr.Expression.execute(Expression.java:373) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:500) at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:751) at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:717) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:537) at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:751) at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:717) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:537) at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:751) at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:717) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:537) at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:590) at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:98) at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:590) at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:98) at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:262) at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:210) at com.goldencode.p2j.pattern.PatternEngine.apply(PatternEngine.java:1685) at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1571) at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1504) at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1056) ... 4 more
At the beginning of the conversion, there are several warnings:
------------------------------------------------------------------------------ Scanning Progress Source (preprocessor, lexer, parser, persist ASTs) ------------------------------------------------------------------------------ uast/oo/roger.cls Lvl01 parse: ./uast/skeleton/oo4gl/Progress/Lang/Object.cls Feb 20, 2023 1:25:25 PM org.reflections.Reflections scan INFO: Reflections took 85 ms to scan 1 urls, producing 99 keys and 910 values WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Object:set-next-sibling(KW_INPUT object<? extends progress.lang.object>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Object:set-prev-sibling(KW_INPUT object<? extends progress.lang.object>)' Lvl02 parse: | ./uast/skeleton/oo4gl/Progress/Lang/Class.cls Feb 20, 2023 1:25:26 PM org.reflections.Reflections scan INFO: Reflections took 37 ms to scan 1 urls, producing 99 keys and 910 values WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Class:set-package(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Class:set-superclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Class:set-typename(KW_INPUT character)' Lvl03 parse: | | ./uast/skeleton/oo4gl/Progress/Lang/ParameterList.cls Lvl03 parse: | | ./uast/skeleton/oo4gl/Progress/Reflect/Constructor.cls Lvl04 parse: | | | ./uast/skeleton/oo4gl/Progress/Reflect/AccessMode.cls Lvl05 parse: | | | | ./uast/skeleton/oo4gl/Progress/Lang/Enum.cls WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Constructor:set-accessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Constructor:set-originatingclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Constructor:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Constructor:set-numparameters(KW_INPUT integer)' Lvl04 parse: | | | ./uast/skeleton/oo4gl/Progress/Reflect/Parameter.cls Lvl05 parse: | | | | ./uast/skeleton/oo4gl/Progress/Reflect/DataType.cls WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-datatype(KW_INPUT object<? extends progress.reflect.datatype>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-datatypename(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-extent(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-name(KW_INPUT character)' Lvl05 parse: | | | | ./uast/skeleton/oo4gl/Progress/Reflect/ParameterMode.cls Lvl06 parse: | | | | | ./uast/skeleton/oo4gl/Progress/Lang/FlagsEnum.cls WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-mode(KW_INPUT object<? extends progress.reflect.parametermode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-position(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-datatype(KW_INPUT object<? extends progress.reflect.datatype>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-datatypename(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-extent(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-mode(KW_INPUT object<? extends progress.reflect.parametermode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Parameter:set-position(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Constructor:set-accessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Constructor:set-originatingclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Constructor:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Constructor:set-numparameters(KW_INPUT integer)' Lvl03 parse: | | ./uast/skeleton/oo4gl/Progress/Reflect/Flags.cls Lvl03 parse: | | ./uast/skeleton/oo4gl/Progress/Reflect/Event.cls WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-accessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-declaringclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-isabstract(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-isoverride(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-isstatic(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-numhandlerparameters(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-originatingclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-accessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-declaringclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-isabstract(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-isoverride(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-isstatic(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-numhandlerparameters(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Event:set-originatingclass(KW_INPUT object<? extends progress.lang.class>)' Lvl03 parse: | | ./uast/skeleton/oo4gl/Progress/Reflect/Method.cls WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-accessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-declaringclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-isabstract(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-isfinal(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-isoverride(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-isstatic(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-numparameters(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-originatingclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-returnextent(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-returntype(KW_INPUT object<? extends progress.reflect.datatype>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-returntypename(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-accessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-declaringclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-isabstract(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-isfinal(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-isoverride(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-isstatic(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-numparameters(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-originatingclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-returnextent(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-returntype(KW_INPUT object<? extends progress.reflect.datatype>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Method:set-returntypename(KW_INPUT character)' Lvl03 parse: | | ./uast/skeleton/oo4gl/Progress/Reflect/Property.cls Lvl04 parse: | | | ./uast/skeleton/oo4gl/Progress/Reflect/Variable.cls WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-accessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-datatype(KW_INPUT object<? extends progress.reflect.datatype>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-datatypename(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-declaringclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-extent(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-isstatic(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-originatingclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-accessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-datatype(KW_INPUT object<? extends progress.reflect.datatype>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-datatypename(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-declaringclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-extent(KW_INPUT integer)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-isstatic(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-name(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Variable:set-originatingclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-getteraccessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-canread(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-canwrite(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-isabstract(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-isindexed(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-isoverride(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-setteraccessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-getteraccessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-canread(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-canwrite(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-isabstract(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-isindexed(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-isoverride(KW_INPUT logical)' WARNING: Could not find legacy builtin method javaname for 'Progress.Reflect.Property:set-setteraccessmode(KW_INPUT object<? extends progress.reflect.accessmode>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Class:set-package(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Class:set-superclass(KW_INPUT object<? extends progress.lang.class>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Class:set-typename(KW_INPUT character)' WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Object:set-next-sibling(KW_INPUT object<? extends progress.lang.object>)' WARNING: Could not find legacy builtin method javaname for 'Progress.Lang.Object:set-prev-sibling(KW_INPUT object<? extends progress.lang.object>)' Lvl01 DONE: ./uast/skeleton/oo4gl/Progress/Lang/Object.cls Lvl01 parse: ./uast/oo/roger.cls Lvl01 DONE: ./uast/oo/roger.cls Can not initialize handle's invalid access proxy:null
#3 Updated by Constantin Asofiei about 1 year ago
Roger, please try this patch (on top of trunk rev 14484):
=== modified file 'rules/convert/assignments.rules' --- old/rules/convert/assignments.rules 2022-06-02 13:02:58 +0000 +++ new/rules/convert/assignments.rules 2023-02-20 18:47:40 +0000 @@ -428,7 +428,7 @@ </rule> <!-- setters for assignable global vars --> - <rule>evalLib("vartype", ref.type) and ref.type != prog.sys_handle + <rule>evalLib("vartype", ref.type) and ref.type != prog.sys_handle and not evalLib("is_java_cls", ref) <!-- global variables are the only VAR_ types that don't have a refid --> <rule>!ref.isAnnotation("refid")
#4 Updated by Roger Borrello about 1 year ago
That results in a successful conversion. So those warnings are just red-herrings?
Is this a fix I should try against the customer's code?
#5 Updated by Constantin Asofiei about 1 year ago
Roger Borrello wrote:
Is this a fix I should try against the customer's code?
Yes.
#6 Updated by Roger Borrello about 1 year ago
- % Done changed from 0 to 50
- Status changed from New to WIP
- Assignee set to Roger Borrello
Running conversion. Should I create a branch 7135a?
#7 Updated by Greg Shah about 1 year ago
Yes
#8 Updated by Roger Borrello about 1 year ago
- Status changed from WIP to Review
- % Done changed from 50 to 100
Branch 7135a rev 14485 ready for review.
#9 Updated by Greg Shah about 1 year ago
- Status changed from Review to Test
Code Review Task Branch 7135a Revision 14485
No objections.
#10 Updated by Greg Shah about 1 year ago
If this passes testing, we will merge it to trunk.
#11 Updated by Roger Borrello about 1 year ago
- Status changed from Test to WIP
- % Done changed from 100 to 70
Greg Shah wrote:
If this passes testing, we will merge it to trunk.
There was an issue later in the conversion of the customer application:
[java] EXPRESSION EXECUTION ERROR: [java] --------------------------- [java] rvalueType = ecw.expressionType(rvalueExp, false) [java] ^ { Unknown METH_POLY with oldtype of KW_GET_MOP } [java] --------------------------- [java] Elapsed job time: 00:07:56.534 [java] ERROR: [java] com.goldencode.p2j.pattern.TreeWalkException: ERROR! Active Rule: [java] ----------------------- [java] RULE REPORT [java] ----------------------- [java] Rule Type : WALK [java] Source AST: [ = ] BLOCK/PROCEDURE/BLOCK/STATEMENT/KW_ASSIGN/ASSIGN/ @7065:17 {876173354066} [java] Copy AST : [ = ] BLOCK/PROCEDURE/BLOCK/STATEMENT/KW_ASSIGN/ASSIGN/ @7065:17 {876173354066} [java] Condition : rvalueType = ecw.expressionType(rvalueExp, false) [java] Loop : false [java] --- END RULE REPORT --- [java] [java] [java] [java] at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1093) [java] at com.goldencode.p2j.convert.TransformDriver.processTrees(TransformDriver.java:586) [java] at com.goldencode.p2j.convert.ConversionDriver.back(ConversionDriver.java:585) [java] at com.goldencode.p2j.convert.TransformDriver.executeJob(TransformDriver.java:998) [java] at com.goldencode.p2j.convert.ConversionDriver.main(ConversionDriver.java:1284) [java] Caused by: com.goldencode.expr.ExpressionException: Expression execution error @1:18 [ASSIGN id=876173354066]
I will see if it is related to the change, versus a different issue.
#12 Updated by Roger Borrello about 1 year ago
- % Done changed from 70 to 90
Roger Borrello wrote:
I will see if it is related to the change, versus a different issue.
I see that issue when I tried with the unpatched trunk_14484 revision, so it's a separate issue. Should I log a new error, or encapsulate both under the client's area of Redmine (or just morph this one to cover both)?
#13 Updated by Constantin Asofiei about 1 year ago
Please work on a standalone test and lets use this task for the customer's app issues with trunk (conversion or runtime).
#14 Updated by Roger Borrello about 1 year ago
Constantin Asofiei wrote:
Please work on a standalone test and lets use this task for the customer's app issues with trunk (conversion or runtime).
Working on it... I crashed because I was out of disk space.
#15 Updated by Roger Borrello about 1 year ago
This testcase:
PROCEDURE getMousePoint : DEFINE INPUT PARAMETER pcObject AS HANDLE NO-UNDO. DEFINE VARIABLE iMouseLoc AS INTEGER NO-UNDO EXTENT 2. ASSIGN iMouseLoc = pcObject:FRAME:GET-MOUSE-POSITION(). END PROCEDURE.
creates the same error:
------------------------------------------------------------------------------ Core Code Conversion ------------------------------------------------------------------------------ Optional rule set [customer_specific_conversion] not found. ./uast/roger.w Elapsed job time: 00:00:00.966 ERROR: com.goldencode.p2j.pattern.TreeWalkException: ERROR! Active Rule: ----------------------- RULE REPORT ----------------------- Rule Type : WALK Source AST: [ = ] BLOCK/PROCEDURE/BLOCK/STATEMENT/KW_ASSIGN/ASSIGN/ @7:17 {347892351023} Copy AST : [ = ] BLOCK/PROCEDURE/BLOCK/STATEMENT/KW_ASSIGN/ASSIGN/ @7:17 {347892351023} Condition : rvalueType = ecw.expressionType(rvalueExp, false) Loop : false --- END RULE REPORT --- at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1093) at com.goldencode.p2j.convert.TransformDriver.processTrees(TransformDriver.java:586) at com.goldencode.p2j.convert.ConversionDriver.back(ConversionDriver.java:585) at com.goldencode.p2j.convert.TransformDriver.executeJob(TransformDriver.java:998) at com.goldencode.p2j.convert.ConversionDriver.main(ConversionDriver.java:1284) Caused by: java.lang.UnsupportedOperationException: Unknown METH_POLY with oldtype of KW_GET_MOP at com.goldencode.p2j.convert.ExpressionConversionWorker.expressionType(ExpressionConversionWorker.java:2085) at com.goldencode.p2j.convert.ExpressionConversionWorker.expressionType(ExpressionConversionWorker.java:1423) at com.goldencode.p2j.convert.ExpressionConversionWorker.expressionType(ExpressionConversionWorker.java:1183) at com.goldencode.p2j.convert.ExpressionConversionWorker$ExpressionHelper.expressionType(ExpressionConversionWorker.java:3691) at com.goldencode.expr.CE10013.execute(Unknown Source) at com.goldencode.expr.Expression.execute(Expression.java:373) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:500) at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:751) at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:717) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:537) at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:751) at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:717) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:537) at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:751) at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:717) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:537) at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:751) at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:717) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:537) at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:751) at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:717) at com.goldencode.p2j.pattern.Rule.apply(Rule.java:537) at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:590) at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:98) at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:590) at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:98) at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:262) at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:210) at com.goldencode.p2j.pattern.PatternEngine.apply(PatternEngine.java:1685) at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1571) at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1504) at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1056) ... 4 more
Tree looks:
<ast col="0" id="347892351020" line="0" text="statement" type="STATEMENT"> <ast col="5" id="347892351021" line="6" text="ASSIGN" type="KW_ASSIGN"> <annotation datatype="java.lang.Long" key="support_level" value="16400"/> <annotation datatype="java.lang.Boolean" key="bracket" value="false"/> <ast col="17" id="347892351023" line="7" text="=" type="ASSIGN"> <ast col="7" id="347892351026" line="7" text="iMouseLoc" type="VAR_INT"> <annotation datatype="java.lang.Long" key="oldtype" value="2947"/> <annotation datatype="java.lang.Long" key="extent" value="2"/> <annotation datatype="java.lang.Long" key="refid" value="347892351003"/> <annotation datatype="java.lang.Long" key="support_level" value="16400"/> </ast> <ast col="0" id="347892351027" line="0" text="expression" type="EXPRESSION"> <annotation datatype="java.lang.Long" key="support_level" value="16400"/> <ast col="33" id="347892351028" line="7" text=":" type="COLON"> <ast col="27" id="347892351029" line="7" text=":" type="COLON"> <ast col="19" id="347892351030" line="7" text="pcObject" type="VAR_HANDLE"> <annotation datatype="java.lang.Long" key="oldtype" value="2947"/> <annotation datatype="java.lang.Long" key="refid" value="347892350987"/> <annotation datatype="java.lang.Long" key="support_level" value="16400"/> </ast> <ast col="28" id="347892351031" line="7" text="FRAME" type="ATTR_HANDLE"> <annotation datatype="java.lang.Long" key="oldtype" value="660"/> <annotation datatype="java.lang.Long" key="support_level" value="16400"/> </ast> </ast> <ast col="34" id="347892351032" line="7" text="GET-MOUSE-POSITION" type="METH_POLY"> <annotation datatype="java.lang.Long" key="oldtype" value="1503"/> </ast> </ast> </ast> </ast> </ast> </ast>
#16 Updated by Constantin Asofiei about 1 year ago
Roger, please try this patch:
=== modified file 'src/com/goldencode/p2j/convert/ExpressionConversionWorker.java' --- old/src/com/goldencode/p2j/convert/ExpressionConversionWorker.java 2023-01-12 15:38:22 +0000 +++ new/src/com/goldencode/p2j/convert/ExpressionConversionWorker.java 2023-02-21 19:05:57 +0000 @@ -1898,6 +1898,11 @@ jcls = "memptr"; break; + case KW_GET_MOP: + // TODO: check if we can improve on this + jcls = "integer[]"; + break; + case KW_IF: // by default return the same type as the second operand jcls = expressionType(source.getChildAt(1), false, fuzzy);
Greg, I don't see something cleaner - GET-MOUSE-POSITION
is marked as METH_POLY
in progress.g and SignatureHelper, I think because it returns integer[]
.
#17 Updated by Greg Shah about 1 year ago
It is fine for now.
#18 Updated by Roger Borrello about 1 year ago
- Status changed from WIP to Review
- % Done changed from 90 to 100
Committed revision 7135a_14486. Re-running customer app conversion.
#19 Updated by Roger Borrello about 1 year ago
- % Done changed from 100 to 90
- Status changed from Review to WIP
The app converted successfully with both changes in place!
But there were compilation errors:
[javac] Compiling 31406 source files to app_7135a-14486_20230215a/build/classes [javac] Compiling 9108 source files to app_7135a-14486_20230215a/build/classes [javac] Note: Some input files use or override a deprecated API. [javac] Note: Recompile with -Xlint:deprecation for details. [javac] Compiling 3203 source files to app_7135a-14486_20230215a/build/classes [javac] app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelData.java:36: error: RenderLabelData is not abstract and does not override abstract method toLegacyString(jobject<? extends Map>) in LabelRenderer [javac] public class RenderLabelData [javac] ^ [javac] app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelItemToDateShort.java:29: error: RenderLabelItemToDateShort is not abstract and does not override abstract method toLegacyString(jobject<? extends Map>) in LabelRenderer [javac] public class RenderLabelItemToDateShort [javac] ^ [javac] app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelLegend.java:29: error: RenderLabelLegend is not abstract and does not override abstract method toLegacyString(jobject<? extends Map>) in LabelRenderer [javac] public class RenderLabelLegend [javac] ^ [javac] app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelSeriesToDateShort.java:29: error: RenderLabelSeriesToDateShort is not abstract and does not override abstract method toLegacyString(jobject<? extends Map>) in LabelRenderer [javac] public class RenderLabelSeriesToDateShort [javac] ^ [javac] app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelTooltip.java:36: error: RenderLabelTooltip is not abstract and does not override abstract method toLegacyString(jobject<? extends Map>) in LabelRenderer [javac] public class RenderLabelTooltip [javac] ^ [javac] Note: Some input files use or override a deprecated API. [javac] Note: Recompile with -Xlint:deprecation for details. [javac] Note: app_7135a-14486_20230215a/src/.../ChartPopup.java uses unchecked or unsafe operations. [javac] Note: Recompile with -Xlint:unchecked for details. [javac] 5 errors BUILD FAILED
Did the conversion changes contribute to these errors, or do I need to look for something else?
#20 Updated by Greg Shah about 1 year ago
This is probably something different. The toLegacyString(jobject extends Map>)
is our replacement name for toString()
which conflicts with Object.toString()
in Java. This version has a special signature that takes jobject extends Map>
which would actually not conflict with the no-arg Object
version. Anyway, look at the LabelRenderer
and the non-abstract child classes as see what we are generating here and why.
#21 Updated by Roger Borrello about 1 year ago
For this class:
USING Progress.Lang.*. /* FWD mode */ USING com.goldencode.p2j.ui.chart.* FROM java. USING java.util.* FROM java. CLASS sy.UltraChart.RenderLabelData /* FWD mode */ IMPLEMENTS com.goldencode.p2j.ui.chart.LabelRenderer: DEFINE PRIVATE VARIABLE id AS CHARACTER NO-UNDO INITIAL "x". /* FWD mode */ METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map): DEFINE VARIABLE fValue AS DECIMAL NO-UNDO. ASSIGN fValue = DECIMAL(pChartHash:get("DATA_VALUE"):toString()) NO-ERROR. CASE pChartHash:get("DATA_VALUE_TYPE"):toString(): WHEN "£" THEN RETURN "£ " + TRIM(STRING(fValue,"->>>,>>>,>>9")). WHEN "%" THEN RETURN STRING(ROUND(fValue,2)) + " %". OTHERWISE RETURN pChartHash:get("DATA_VALUE"):toString(). END CASE. END METHOD. END CLASS.
We are generating:
public class RenderLabelData extends BaseObject implements com.goldencode.p2j.ui.chart.LabelRenderer { @LegacySignature(type = Type.VARIABLE, name = "id") private character id = TypeFactory.character("x"); public void __client_clientnet_sy_ultrachart_RenderLabelData_execute__() { /* FWD mode */ externalProcedure(RenderLabelData.class, RenderLabelData.this, new Block((Body) () -> { { } })); /* FWD mode */ } @LegacySignature(type = Type.CONSTRUCTOR) public void __client_clientnet_sy_ultrachart_renderLabelData_constructor__() { internalProcedure(RenderLabelData.class, this, "__client_clientnet_sy_ultrachart_renderLabelData_constructor__", new Block((Body) () -> { __lang_BaseObject_constructor__(); })); } @LegacySignature(type = Type.METHOD, name = "ToString", returns = "CHARACTER", parameters = { @LegacyParameter(name = "pChartHash", type = "JOBJECT", qualified = "java.util.Map", mode = "INPUT") }) /* FWD mode */ public character toString_(final jobject<? extends java.util.Map> _pChartHash) { jobject<? extends java.util.Map> pChartHash = TypeFactory.initInput(_pChartHash); decimal fValue = TypeFactory.decimal(); return function(RenderLabelData.class, this, "ToString", character.class, new Block((Body) () -> { silent(() -> fValue.assign(new decimal(pChartHash.ref().get("DATA_VALUE").toString()))); switch (StringHelper.safeTrimTrailing(pChartHash.ref().get("DATA_VALUE_TYPE").toString())) { case "£": { storeReturnValue(concat("£ ", trim(valueOf(fValue, "->>>,>>>,>>9")))); return; } case "%": { storeReturnValue(concat(valueOf(round(fValue, 2)), " %")); return; } default: { storeReturnValue(pChartHash.ref().get("DATA_VALUE").toString()); return; } } })); } }
LabelRenderer
class is:
public interface LabelRenderer { public character toLegacyString(jobject<? extends Map> formats); }
#22 Updated by Greg Shah about 1 year ago
We are choosing to emit toString_()
name instead of toLegacyString()
in the child classes.
The com.goldencode.p2j.ui.chart.LabelRenderer
does not include the normal legacy signature annotations (at either the class or method levels). I suspect that is at least part of the problem.
#23 Updated by Roger Borrello about 1 year ago
Greg Shah wrote:
The
com.goldencode.p2j.ui.chart.LabelRenderer
does not include the normal legacy signature annotations (at either the class or method levels). I suspect that is at least part of the problem.
Is there a good example which I could follow to address that? In looking through some of the com.goldencode.p2j.ui.chart
classes, there aren't any annotations to model after.
#24 Updated by Greg Shah about 1 year ago
Look at anything in com.goldencode.p2j.oo
.
#25 Updated by Constantin Asofiei about 1 year ago
Greg, adding the LegacySignature
at a Java interface method will not work.
Before 6129c, toString
I think had a special meaning during conversion, that it got converted to toLegacyString
. For now, I propose for the 4GL method name to match exactly the overridden Java method name, toLegacyString
.
I think for Java inheritance in the 4GL code, we need to hard-code the method names, and do not convert them at all - treat them as their Java counterpart.
#26 Updated by Greg Shah about 1 year ago
You are proposing that we just hand-edit the 4GL source code to change the names?
#27 Updated by Constantin Asofiei about 1 year ago
Greg Shah wrote:
You are proposing that we just hand-edit the 4GL source code to change the names?
Correct. If a 4GL-style class is inherited from a Java class, then the method names must be treated as Java names.
#28 Updated by Roger Borrello about 1 year ago
So the 4GL would need to be patched to have toString
become toLegacyString
:
&IF DEFINED(FWD-VERSION) = 0 &THEN /* NOT FWD */ METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS System.Collections.Hashtable): DEFINE VARIABLE fValue AS DECIMAL NO-UNDO. ASSIGN fValue = DECIMAL(pChartHash["DATA_VALUE"]:ToString()) NO-ERROR. CASE pChartHash["DATA_VALUE_TYPE"]:ToString(): WHEN "£" THEN RETURN "£ " + TRIM(STRING(fValue,"->>>,>>>,>>9")). WHEN "%" THEN RETURN STRING(ROUND(fValue,2)) + " %". OTHERWISE RETURN pChartHash["DATA_VALUE"]:ToString(). END CASE. END METHOD. &ELSE /* FWD mode */ METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map): DEFINE VARIABLE fValue AS DECIMAL NO-UNDO. ASSIGN fValue = DECIMAL(pChartHash:get("DATA_VALUE"):toLegacyString()) NO-ERROR. CASE pChartHash:get("DATA_VALUE_TYPE"):toString(): WHEN "£" THEN RETURN "£ " + TRIM(STRING(fValue,"->>>,>>>,>>9")). WHEN "%" THEN RETURN STRING(ROUND(fValue,2)) + " %". OTHERWISE RETURN pChartHash:get("DATA_VALUE"):toLegacyString(). END CASE. END METHOD. &ENDIF
#29 Updated by Greg Shah about 1 year ago
Yes
#30 Updated by Constantin Asofiei about 1 year ago
Roger, sorry, in this case rename toLegacyString in the Java class to toString. That name was chosen because of the way FWD hard coded that name at the time.
#31 Updated by Roger Borrello about 1 year ago
Constantin Asofiei wrote:
Roger, sorry, in this case rename toLegacyString in the Java class to toString. That name was chosen because of the way FWD hard coded that name at the time.
OK... so you mean change FWD's LabelRenderer
method:
public interface LabelRenderer { /** * Get the string representation for a certain value from format map. * * @param formats * The map holding the values and formats. * * @return The string representation. */ public character toString(jobject<? extends Map> formats); }
Is that the only rename necessary?
#32 Updated by Constantin Asofiei about 1 year ago
Roger, is a little more tricky than this, NameConverter
will automatically append an underscore because toString
belongs to java.lang.Object
and is a reserved name.
I think for this case of Java inheritance from within 4GL code, FWD needs to preserve the method name if this is an override; so, if we mark the method with OVERRIDE
(although 4GL doesn't require it...) in the 4GL code, this will also allow the Java compiler to force the override, and for the FWD conversion to know to preserve this method name because it matches a super-method.
In our ToString
case, the other problem is that if you use ToString
from the 4GL code, you actually really need to use toString
, because this is the 'real Java method name inherited from the LabelRenderer interface'. In the customer's app, can you easily identify and replace ToString
with toString
in the 4GL code?
Greg, if we start going with LegacySignature
, we are adding a binding only for Java code from within FWD, which does not solve the problem if the interface/class is from another Java library.
#33 Updated by Constantin Asofiei about 1 year ago
Roger, as a fast way to solve it: in the 4GL code, can we change all RenderLabelData.ToString(INPUT pChartHash AS java.util.Map)
references + definition to be renamed asString
, and the same with FWD's LabelRenderer.toString
, renamed to LabelRenderer.asString
?
This will move out of the way all the problems we have with toString
, and I'll create a task to deal with the points discussed in previous notes.
#34 Updated by Roger Borrello about 1 year ago
LabelRenderer.toLegacyString
:
- app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelData.java
- app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelItemToDateShort.java
- app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelLegend.java
- app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelSeriesToDateShort.java
- app_7135a-14486_20230215a/src/.../ultrachart/RenderLabelTooltip.java
to be modified similar to:
&ELSE /* FWD mode */ METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map): DEFINE VARIABLE fValue AS DECIMAL NO-UNDO. ASSIGN fValue = DECIMAL(pChartHash:get("DATA_VALUE"):asString()) NO-ERROR. CASE pChartHash:get("DATA_VALUE_TYPE"):asString(): WHEN "£" THEN RETURN "£ " + TRIM(STRING(fValue,"->>>,>>>,>>9")). WHEN "%" THEN RETURN STRING(ROUND(fValue,2)) + " %". OTHERWISE RETURN pChartHash:get("DATA_VALUE"):asString(). END CASE. END METHOD. &ENDIF
And src/com/goldencode/p2j/ui/chart/LabelRenderer.java
to be modified:
=== modified file 'src/com/goldencode/p2j/ui/chart/LabelRenderer.java' --- src/com/goldencode/p2j/ui/chart/LabelRenderer.java 2020-03-04 19:24:49 +0000 +++ src/com/goldencode/p2j/ui/chart/LabelRenderer.java 2023-02-23 18:33:22 +0000 @@ -2,10 +2,11 @@ ** Module : LabelRenderer.java ** Abstract : Definition for a label renderer. ** -** Copyright (c) 2020, Golden Code Development Corporation. +** Copyright (c) 2020-2023, Golden Code Development Corporation. ** ** -#- -I- --Date-- ---------------------------------Description--------------------------------- ** 001 CA 20200304 Created initial version. +** 002 RFB 20230223 Changed method name from toLegacyString to asString. Ref. #TBD. */ /* @@ -84,5 +85,5 @@ * * @return The string representation. */ - public character toLegacyString(jobject<? extends Map> formats); + public character asString(jobject<? extends Map> formats); }
#35 Updated by Constantin Asofiei about 1 year ago
Something like this, and ToString (INPUT pChartHash AS java.util.Map):
needs to be asString (INPUT pChartHash AS java.util.Map):
But, I can't find who calls the original ToString(java.util.Map)
method - can you look in the Java code for a previous conversion of the customer's app and find the toLegacyString(java.util.Map)
calls? I don't have any converted code for the app, and looking through the abl/ code I have, I can't find any.
#36 Updated by Constantin Asofiei about 1 year ago
I think LabelRenderer
is part of the FWD's ChartWidget.labelHash
, which is not implemented at this time.
#37 Updated by Greg Shah about 1 year ago
FYI, officially we do not support subclassing 4GL code from Java parent classes or implementing Java interfaces in 4GL code. I like the idea that we bypass this restriction for now.
#38 Updated by Roger Borrello about 1 year ago
I see this:
rfb@rfb:~$ grep -R toLegacyString\( . ./client/clientnet/sy/ultrachart/RenderLabelSeriesToDateShort.java: public character toLegacyString(final jobject<? extends java.util.Map> _pChartHash) ./client/clientnet/sy/ultrachart/RenderLabelItemToDateShort.java: public character toLegacyString(final jobject<? extends java.util.Map> _pChartHash) ./client/clientnet/sy/ultrachart/RenderLabelTooltip.java: public character toLegacyString(final jobject<? extends java.util.Map> _pChartHash) ./client/clientnet/sy/ultrachart/RenderLabelData.java: public character toLegacyString(final jobject<? extends java.util.Map> _pChartHash) ./client/clientnet/sy/ultrachart/RenderLabelLegend.java: public character toLegacyString(final jobject<? extends java.util.Map> _pChartHash)
So should I make those changes? Or is there more to this?
That's the same list of errors.
#39 Updated by Constantin Asofiei about 1 year ago
Roger, thanks, that confirms what you posted. Just change the 4GL method definitions in these classes to be asString
and the same with LabelRenderer
. This should solve the problem.
#40 Updated by Constantin Asofiei about 1 year ago
I've just noticed something in your patch - I mean to change:
METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map):
to
METHOD PUBLIC CHARACTER asString (INPUT pChartHash AS java.util.Map):
Only the ToString which has an argument as java.util.Map
needs to change. Do not touch plain ToString()
calls. I don't know what those are.
#41 Updated by Roger Borrello about 1 year ago
Constantin Asofiei wrote:
Only the ToString which has an argument as
java.util.Map
needs to change. Do not touch plainToString()
calls. I don't know what those are.
Got it... just the signatures:
diff -r old/abl/client/clientnet/sy/UltraChart/RenderLabelData.cls new/abl/client/clientnet/sy/UltraChart/RenderLabelData.cls 46c46 < METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS System.Collections.Hashtable): --- > METHOD PUBLIC CHARACTER asString (INPUT pChartHash AS System.Collections.Hashtable): diff -r old/abl/client/clientnet/sy/UltraChart/RenderLabelItemToDateShort.cls new/abl/client/clientnet/sy/UltraChart/RenderLabelItemToDateShort.cls 45c45 < METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map): --- > METHOD PUBLIC CHARACTER asString (INPUT pChartHash AS java.util.Map): diff -r old/abl/client/clientnet/sy/UltraChart/RenderLabelLegend.cls new/abl/client/clientnet/sy/UltraChart/RenderLabelLegend.cls 49c49 < METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map): --- > METHOD PUBLIC CHARACTER asString (INPUT pChartHash AS java.util.Map): diff -r old/abl/client/clientnet/sy/UltraChart/RenderLabelSeriesToDateShort.cls new/abl/client/clientnet/sy/UltraChart/RenderLabelSeriesToDateShort.cls 45c45 < METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map): --- > METHOD PUBLIC CHARACTER asString (INPUT pChartHash AS java.util.Map): diff -r old/abl/client/clientnet/sy/UltraChart/RenderLabelTooltip.cls new/abl/client/clientnet/sy/UltraChart/RenderLabelTooltip.cls 62c62 < METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map): --- > METHOD PUBLIC CHARACTER asString (INPUT pChartHash AS java.util.Map):
#42 Updated by Roger Borrello about 1 year ago
So the incremental build completed, including the compilation. I will need to do some testing, but this is committed to 7135 as revision 14487.
#43 Updated by Roger Borrello about 1 year ago
There's a lot of issues. Noted one for the GUI application in #6851-203. The ChUI app gets ** LABEL is not a setable attribute for LITERAL ?. (4052)
at one point.
#44 Updated by Greg Shah about 1 year ago
Open bugs for these runtime issues. If conversion works now, we move on and close this task.
#45 Updated by Roger Borrello about 1 year ago
- Status changed from WIP to Review
- % Done changed from 90 to 100
Opened task #7145 to handle the first of the runtime errors.
#48 Updated by Roger Borrello about 1 year ago
Opened task #7146 for the other runtime issue.
Is the patching of the customer app procedures as noted in #7135-34 (and show below) required to be ongoing? Or is there a FWD change that will render it unnecessary?
--- sy/UltraChart/RenderLabelData.cls +++ sy/UltraChart/RenderLabelData.cls @@ -59,7 +59,7 @@ END METHOD. &ELSE /* FWD mode */ - METHOD PUBLIC CHARACTER ToString (INPUT pChartHash AS java.util.Map): + METHOD PUBLIC CHARACTER asString (INPUT pChartHash AS java.util.Map): DEFINE VARIABLE fValue AS DECIMAL NO-UNDO. ASSIGN fValue = DECIMAL(pChartHash:get("DATA_VALUE"):toString()) NO-ERROR.
#49 Updated by Constantin Asofiei about 1 year ago
Roger Borrello wrote:
Opened task #7146 for the other runtime issue.
Is the patching of the customer app procedures as noted in #7135-34 (and show below) required to be ongoing? Or is there a FWD change that will render it unnecessary?
[...]
The patch is permanent.
#50 Updated by Roger Borrello about 1 year ago
Constantin Asofiei wrote:
The patch is permanent.
Thanks... I will pursue the customer checking the patched versions into their change control.
#51 Updated by Roger Borrello about 1 year ago
7135a has been rebased to trunk_14490.
#52 Updated by Roger Borrello about 1 year ago
Roger Borrello wrote:
7135a has been rebased to trunk_14490.
If there are other customers that might have the same type of code as the customer that found this issue, please let me know (or perhaps this branch has already been used to do a conversion for them).
#53 Updated by Greg Shah about 1 year ago
Not at this time.
#54 Updated by Roger Borrello about 1 year ago
- Status changed from Review to Test
7135a was merged to trunk as revision 14493. It was archived.
#55 Updated by Greg Shah about 1 year ago
- Status changed from Test to Closed