In your .xjs file, called a function funcABC();
funcABC()
{
var form = aqua.form.newForm(3,2);
form.blah();
}
Following error message gets displayed:
Error on line 8: TypeError: Cannot find function abc in object \\...\\ .\\हिñçêČάй語简�?한\\.jꎴ⡌ꌱ̯ case@a198b8.
Expected behavior: mangled class name not displayed
|
|
66 KB
|
|
61 KB
|
|
61 KB
Ideally, the variable name / class name should be displayed
Works as designed.
However, perhaps we shouldn't obfuscate the names of openAPI implementation classes. While this will not completely eliminate mangled names in exceptions in debugger variable view, it will reduce their occurrence and make the error messages more user-friendly.
Niels, do you want to change the build script? Reassigning.
Works as designed.
However, perhaps we shouldn't obfuscate the names of openAPI implementation classes. While this will not completely eliminate mangled names in exceptions in debugger variable view, it will reduce their occurrence and make the error messages more user-friendly.
Niels, do you want to change the build script? Reassigning.
The message currently says :
Error on line 8: TypeError: Cannot find function abc in object \\...\\ .\\हिñçêČάй語简�?한\\.jꎴ⡌ꌱ̯ case@a198b8.
The code currently does :
This is done in ScriptRuntime.notFunctionError() -> ScriptRuntime.toString() -> NativeJavaObject.getDefaultValue() -> NativeJavaObject.javaObject.toString();
I overwrote CoreFormFactory.toString() to return "AQFormFactory". This seems to work well. But look at what the same exception displays for java.lang.StringBuilder and java.sql.Date in the attached screenshots.
Andy, is there any way we can extend ScriptRuntime and override .toString() or .notFunctionError()?
At the moment the engine message tells us the Object.toString() ... when what we really should be displaying is the Object.getUserInterfaceClass().
The message currently says :
Error on line 8: TypeError: Cannot find function abc in object \\...\\ .\\हिñçêČάй語简�?한\\.jꎴ⡌ꌱ̯ case@a198b8.
The code currently does :
This is done in ScriptRuntime.notFunctionError() -> ScriptRuntime.toString() -> NativeJavaObject.getDefaultValue() -> NativeJavaObject.javaObject.toString();
I overwrote CoreFormFactory.toString() to return "AQFormFactory". This seems to work well. But look at what the same exception displays for java.lang.StringBuilder and java.sql.Date in the attached screenshots.
Andy, is there any way we can extend ScriptRuntime and override .toString() or .notFunctionError()?
At the moment the engine message tells us the Object.toString() ... when what we really should be displaying is the Object.getUserInterfaceClass().
perhaps we can hack ScriptRuntime.errorWithClassName()
perhaps we can hack ScriptRuntime.errorWithClassName()
We want to make 3 changes:
1. for java classes other than javascript objects we want toshow class name in the exception text
2. for javascript and obfuscated classes we want to use .toString()
3. openAPI classes' .toString() method should return name of a corresponding AQ interface
This will break a few things in situations where .toString() is used to return actual data (AQLineChange comes to mind, and probably some more).
This change requires a lot of careful thinking, while providing little benefit to a javascript user, in my opinion.
We want to make 3 changes:
1. for java classes other than javascript objects we want toshow class name in the exception text
2. for javascript and obfuscated classes we want to use .toString()
3. openAPI classes' .toString() method should return name of a corresponding AQ interface
This will break a few things in situations where .toString() is used to return actual data (AQLineChange comes to mind, and probably some more).
This change requires a lot of careful thinking, while providing little benefit to a javascript user, in my opinion.
this needs to be tested with an obfuscated build.
this needs to be tested with an obfuscated build.
added more code.
please not that there are plenty of places where an obfuscated class name is shown to the user: there seems to be no single place where we can patch mozilla rhino engine. if you see this issue happening again, please make sure to include the steps to reproduce and complete script.
thanks.
added more code.
please not that there are plenty of places where an obfuscated class name is shown to the user: there seems to be no single place where we can patch mozilla rhino engine. if you see this issue happening again, please make sure to include the steps to reproduce and complete script.
thanks.
aqua.FUNCTION() call doesn't work. My results are as follows ...
aqua.filesystem.xxx();
Error on line 2: TypeError: Cannot find function xxx in object AQFileSystem. (#2)
aqua.xxx();
Error on line 2: TypeError: Cannot find function xxx in object \\...\\ .\\हिñçêČάй語简�?한\\.L᠓ꈲꀊꁟ extends@b5efc8. (#2)
aqua.FUNCTION() call doesn't work. My results are as follows ...
aqua.filesystem.xxx();
Error on line 2: TypeError: Cannot find function xxx in object AQFileSystem. (#2)
aqua.xxx();
Error on line 2: TypeError: Cannot find function xxx in object \\...\\ .\\हिñçêČάй語简�?한\\.L᠓ꈲꀊꁟ extends@b5efc8. (#2)
line 1 works correctly.
line 2 is a bug. fixed.
line 1 works correctly.
line 2 is a bug. fixed.
var form = aqua.archive.manifest(java.lang.String,java.util.Map,java.util.Map);
form.blah();
Error on line 22: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.bꈟ̎ꇔꀬ switch.manifest(java.lang.Class,java.lang.Class,java.lang.Class). (#22)
var form = aqua.archive.manifest(java.lang.String,java.util.Map,java.util.Map);
form.blah();
Error on line 22: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.bꈟ̎ꇔꀬ switch.manifest(java.lang.Class,java.lang.Class,java.lang.Class). (#22)
For each of the below i should get Error on line : TypeError: Cannot find function blah in object PackageName but instead i get
var form = aqua.chart.getServletString(com.aquafold.openapi.chart.AQChart)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Oꋴꆣᚶꉤ 8.getServletString(java.lang.Class). (#1)
var form = aqua.chart.toDataString(com.aquafold.openapi.chart.AQChart);
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Oꋴꆣᚶꉤ 8.toDataString(java.lang.Class). (#1)
var form = aqua.chart.toPropertiesString(com.aquafold.openapi.chart.AQChart)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Oꋴꆣᚶꉤ 8.toPropertiesString(java.lang.Class). (#1)
var form = aqua.data.newDataSet(com.aquafold.openapi.data.AQColumnStructure)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.kꆯꃧꃿꎑ.newDataSet(java.lang.Class). (#1)
var form = aqua.filesystem.fileCount(java.lang.String,Boolean)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.E̬ꆰꏡꒀ finally package.fileCount(java.lang.Class,function). (#1)
var form = aqua.filesystem.moveDir(java.lang.String,java.lang.String,Boolean);
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.E̬ꆰꏡꒀ finally package.moveDir(java.lang.Class,java.lang.Class,function). (#1)
var form = aqua.filesystem.moveFile(java.lang.String,java.lang.String,Boolean)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.E̬ꆰꏡꒀ finally package.moveFile(java.lang.Class,java.lang.Class,function). (#1)
For each of the below i should get Error on line : TypeError: Cannot find function blah in object PackageName but instead i get
var form = aqua.chart.getServletString(com.aquafold.openapi.chart.AQChart)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Oꋴꆣᚶꉤ 8.getServletString(java.lang.Class). (#1)
var form = aqua.chart.toDataString(com.aquafold.openapi.chart.AQChart);
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Oꋴꆣᚶꉤ 8.toDataString(java.lang.Class). (#1)
var form = aqua.chart.toPropertiesString(com.aquafold.openapi.chart.AQChart)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Oꋴꆣᚶꉤ 8.toPropertiesString(java.lang.Class). (#1)
var form = aqua.data.newDataSet(com.aquafold.openapi.data.AQColumnStructure)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.kꆯꃧꃿꎑ.newDataSet(java.lang.Class). (#1)
var form = aqua.filesystem.fileCount(java.lang.String,Boolean)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.E̬ꆰꏡꒀ finally package.fileCount(java.lang.Class,function). (#1)
var form = aqua.filesystem.moveDir(java.lang.String,java.lang.String,Boolean);
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.E̬ꆰꏡꒀ finally package.moveDir(java.lang.Class,java.lang.Class,function). (#1)
var form = aqua.filesystem.moveFile(java.lang.String,java.lang.String,Boolean)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.E̬ꆰꏡꒀ finally package.moveFile(java.lang.Class,java.lang.Class,function). (#1)
I think the last batch is all the same - can't find method message. Please verify.
I think the last batch is all the same - can't find method message. Please verify.
var form = aqua.net.ftpFrom(java.lang.String,java.lang.Object,java.lang.Object,com.aquafold.openapi.filesystem.AQFileSet,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.ftpFrom(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.net.ftpTo(java.lang.String,java.lang.Object,java.lang.Object,com.aquafold.openapi.filesystem.AQFileSet,java.lang.String)
form.blah();
Error on line 3: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.ftpTo(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#3)
--
var form = aqua.net.scpFrom(java.lang.String,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,java.lang.String,java.lang.Object,java.lang.Boolean,java.lang.String)
form.blah();
Error on line 3: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.scpFrom(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#3)
--
var form = aqua.net.scpTo(java.lang.String,com.aquafold.openapi.filesystem.AQFileSet,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,java.lang.String,java.lang.Object,java.lang.Boolean,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.scpTo(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.net.sshexec(java.lang.String,java.lang.String,Boolean,java.lang.String,java.lang.Object,java.lang.String,java.lang.String,java.lang.Object,java.lang.Integer,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.sshexec(java.lang.Class,java.lang.Class,function,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.net.sshexec(java.lang.String,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,java.lang.String,java.lang.Boolean,java.lang.Integer,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.sshexec(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.project.saveProperties(java.util.Properties,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.rᠬꑱꂡꀴ import synchronized.saveProperties(java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.random.nextDate(java.util.Date,java.util.Date)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Uꉕꂨꂬꁉ 4.nextDate(java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.vcs.checkoutCVS(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,Boolean)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Cꎘ᠓⢮ꅶ package package.checkoutCVS(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,function). (#1)
--
var form = aqua.vcs.checkoutSubversion(java.lang.String,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,Boolean)
form.blah()
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Cꎘ᠓⢮ꅶ package package.checkoutSubversion(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,function). (#1)
--
var form = aqua.util.sqlEncode(java.lang.String,Boolean)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Dꑥͣꀎꂸ package.sqlEncode(java.lang.Class,function). (#1)
--
var form = aqua.net.ftpFrom(java.lang.String,java.lang.Object,java.lang.Object,com.aquafold.openapi.filesystem.AQFileSet,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.ftpFrom(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.net.ftpTo(java.lang.String,java.lang.Object,java.lang.Object,com.aquafold.openapi.filesystem.AQFileSet,java.lang.String)
form.blah();
Error on line 3: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.ftpTo(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#3)
--
var form = aqua.net.scpFrom(java.lang.String,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,java.lang.String,java.lang.Object,java.lang.Boolean,java.lang.String)
form.blah();
Error on line 3: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.scpFrom(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#3)
--
var form = aqua.net.scpTo(java.lang.String,com.aquafold.openapi.filesystem.AQFileSet,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,java.lang.String,java.lang.Object,java.lang.Boolean,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.scpTo(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.net.sshexec(java.lang.String,java.lang.String,Boolean,java.lang.String,java.lang.Object,java.lang.String,java.lang.String,java.lang.Object,java.lang.Integer,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.sshexec(java.lang.Class,java.lang.Class,function,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.net.sshexec(java.lang.String,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,java.lang.String,java.lang.Boolean,java.lang.Integer,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.uꁺꇐᛊꌺ 2 boolean.sshexec(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.project.saveProperties(java.util.Properties,java.lang.String)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.rᠬꑱꂡꀴ import synchronized.saveProperties(java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.random.nextDate(java.util.Date,java.util.Date)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Uꉕꂨꂬꁉ 4.nextDate(java.lang.Class,java.lang.Class). (#1)
--
var form = aqua.vcs.checkoutCVS(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,Boolean)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Cꎘ᠓⢮ꅶ package package.checkoutCVS(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,function). (#1)
--
var form = aqua.vcs.checkoutSubversion(java.lang.String,java.lang.String,java.lang.String,java.lang.Object,java.lang.Object,Boolean)
form.blah()
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Cꎘ᠓⢮ꅶ package package.checkoutSubversion(java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,java.lang.Class,function). (#1)
--
var form = aqua.util.sqlEncode(java.lang.String,Boolean)
form.blah();
Error on line 1: Can't find method \\...\\ .\\हिñçêČάй語简�?한\\.Dꑥͣꀎꂸ package.sqlEncode(java.lang.Class,function). (#1)
--
We will need to retest this with the new Rhino Engine 17R4.
We will need to retest this with the new Rhino Engine 17R4.
Not planning on upgrading to 17R4. If we do, then re-open
Not planning on upgrading to 17R4. If we do, then re-open
Issue #3995 |
| Closed |
| Fixed |
| Resolved |
Completion |
| No due date |
| No fixed build |
| No time estimate |
Ideally, the variable name / class name should be displayed