Describe the Bug
When an add-on is installed in a campaign, a new context is created within which the add-on's JavaScript can executed. When the add-on is removed, this context remains. Adding the same add-on again can then cause errors (e.g.,, if the same variables gets defined) or fail for logical reasons if old state is used.
To Reproduce
- Download this example add-on: collision-example.mtlib
- Drag the add-on into a blank campaign.
- Open File > Add On Libraries ..., select the add-on and click Remove Library.
- Notice that typing
[r: data.listNamespaces("addon:")] in the chat window results in the add-on namespace still be visible.
- Drag the add-on into the campaign again.
- Notice the error that gets presented.
The key detail in the attached add-on is that it evals this line during onInit:
const namespace = 'com.kwvanderlinde.collision';
The display of the error is not 100% consistent, so you may have to repeat steps (3) & (4) a couple times.
Expected Behaviour
When an add-on is removed, all of its state is also removed (namespace and associated context). It should be possible to add the add-on again to the same campaign without issue (unless the add-on itself is at fault for doing something very bad).
Screenshots
No response
MapTool Info
1.18.6
Desktop
Linux Mint 22.1
Additional Context
Here is the error:
Details
java.util.concurrent.CompletionException: net.rptools.parser.ParserException: com.oracle.truffle.polyglot.PolyglotEngineException error executing expression js.evalURI("com.kwvanderlinde.collision", "lib://com.kwvanderlinde.collision/example.js").
at net.rptools.maptool.model.library.addon.AddOnLibrary.lambda$callMTSFunction$15(AddOnLibrary.java:672)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at net.rptools.maptool.client.swing.MapToolEventQueue.dispatchEvent(MapToolEventQueue.java:63)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.WaitDispatchSupport$2.run(Unknown Source)
at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.desktop/java.awt.WaitDispatchSupport.enter(Unknown Source)
at java.desktop/java.awt.Dialog.show(Unknown Source)
at java.desktop/javax.swing.JOptionPane.showOptionDialog(Unknown Source)
at java.desktop/javax.swing.JOptionPane.showMessageDialog(Unknown Source)
at java.desktop/javax.swing.JOptionPane.showMessageDialog(Unknown Source)
at net.rptools.maptool.client.MapTool.showMessage(MapTool.java:257)
at net.rptools.maptool.client.MapTool.showInformation(MapTool.java:380)
at net.rptools.maptool.client.MapTool.showInformation(MapTool.java:363)
at net.rptools.maptool.client.TransferableHelper.lambda$importData$1(TransferableHelper.java:566)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at net.rptools.maptool.client.swing.MapToolEventQueue.dispatchEvent(MapToolEventQueue.java:63)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: net.rptools.parser.ParserException: com.oracle.truffle.polyglot.PolyglotEngineException error executing expression js.evalURI("com.kwvanderlinde.collision", "lib://com.kwvanderlinde.collision/example.js").
at net.rptools.maptool.client.MapToolLineParser.parseExpression(MapToolLineParser.java:1124)
at net.rptools.maptool.client.MapToolLineParser.parseLine(MapToolLineParser.java:857)
at net.rptools.maptool.client.MapToolLineParser.runMacroBlock(MapToolLineParser.java:1456)
at net.rptools.maptool.client.MapToolLineParser.runMacro(MapToolLineParser.java:1380)
at net.rptools.maptool.client.MapToolLineParser.runMacro(MapToolLineParser.java:1177)
at net.rptools.maptool.model.library.addon.AddOnLibrary.lambda$callMTSFunction$15(AddOnLibrary.java:670)
... 38 more
Describe the Bug
When an add-on is installed in a campaign, a new context is created within which the add-on's JavaScript can executed. When the add-on is removed, this context remains. Adding the same add-on again can then cause errors (e.g.,, if the same variables gets defined) or fail for logical reasons if old state is used.
To Reproduce
[r: data.listNamespaces("addon:")]in the chat window results in the add-on namespace still be visible.The key detail in the attached add-on is that it evals this line during
onInit:The display of the error is not 100% consistent, so you may have to repeat steps (3) & (4) a couple times.
Expected Behaviour
When an add-on is removed, all of its state is also removed (namespace and associated context). It should be possible to add the add-on again to the same campaign without issue (unless the add-on itself is at fault for doing something very bad).
Screenshots
No response
MapTool Info
1.18.6
Desktop
Linux Mint 22.1
Additional Context
Here is the error:
Details
java.util.concurrent.CompletionException: net.rptools.parser.ParserException: com.oracle.truffle.polyglot.PolyglotEngineException error executing expression js.evalURI("com.kwvanderlinde.collision", "lib://com.kwvanderlinde.collision/example.js"). at net.rptools.maptool.model.library.addon.AddOnLibrary.lambda$callMTSFunction$15(AddOnLibrary.java:672) at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.desktop/java.awt.EventQueue$4.run(Unknown Source) at java.desktop/java.awt.EventQueue$4.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source) at net.rptools.maptool.client.swing.MapToolEventQueue.dispatchEvent(MapToolEventQueue.java:63) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$2.run(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at java.desktop/java.awt.WaitDispatchSupport.enter(Unknown Source) at java.desktop/java.awt.Dialog.show(Unknown Source) at java.desktop/javax.swing.JOptionPane.showOptionDialog(Unknown Source) at java.desktop/javax.swing.JOptionPane.showMessageDialog(Unknown Source) at java.desktop/javax.swing.JOptionPane.showMessageDialog(Unknown Source) at net.rptools.maptool.client.MapTool.showMessage(MapTool.java:257) at net.rptools.maptool.client.MapTool.showInformation(MapTool.java:380) at net.rptools.maptool.client.MapTool.showInformation(MapTool.java:363) at net.rptools.maptool.client.TransferableHelper.lambda$importData$1(TransferableHelper.java:566) at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.desktop/java.awt.EventQueue$4.run(Unknown Source) at java.desktop/java.awt.EventQueue$4.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source) at net.rptools.maptool.client.swing.MapToolEventQueue.dispatchEvent(MapToolEventQueue.java:63) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.desktop/java.awt.EventDispatchThread.run(Unknown Source) Caused by: net.rptools.parser.ParserException: com.oracle.truffle.polyglot.PolyglotEngineException error executing expression js.evalURI("com.kwvanderlinde.collision", "lib://com.kwvanderlinde.collision/example.js"). at net.rptools.maptool.client.MapToolLineParser.parseExpression(MapToolLineParser.java:1124) at net.rptools.maptool.client.MapToolLineParser.parseLine(MapToolLineParser.java:857) at net.rptools.maptool.client.MapToolLineParser.runMacroBlock(MapToolLineParser.java:1456) at net.rptools.maptool.client.MapToolLineParser.runMacro(MapToolLineParser.java:1380) at net.rptools.maptool.client.MapToolLineParser.runMacro(MapToolLineParser.java:1177) at net.rptools.maptool.model.library.addon.AddOnLibrary.lambda$callMTSFunction$15(AddOnLibrary.java:670) ... 38 more