From dc812c934c33d49c960db01b914f71b4d377296c Mon Sep 17 00:00:00 2001 From: walterhiggins Date: Mon, 28 Apr 2014 23:29:53 +0100 Subject: [PATCH] don't echo result if undefined/null --- src/main/js/lib/java-utils.js | 3 +++ src/main/js/lib/scriptcraft.js | 33 ++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/js/lib/java-utils.js b/src/main/js/lib/java-utils.js index 6ed83f5..e9405e1 100644 --- a/src/main/js/lib/java-utils.js +++ b/src/main/js/lib/java-utils.js @@ -2,5 +2,8 @@ exports.isJavaObject = function( o ) { if (o === global){ return false; } + if (o !== undefined && o !== null){ + return o.getClass ? true : false; + } return o instanceof java.lang.Object; }; diff --git a/src/main/js/lib/scriptcraft.js b/src/main/js/lib/scriptcraft.js index e0350d7..bdb9848 100644 --- a/src/main/js/lib/scriptcraft.js +++ b/src/main/js/lib/scriptcraft.js @@ -651,25 +651,32 @@ function __onEnable ( __engine, __plugin, __script ) global.self = sender; global.__engine = __engine; try { - + // cannot rely on native eval in jre7 and jre8 + // because ... + // js var hearts + // js hearts + // ... throws an execption ('hearts' is not defined). vars are not sticky in native eval . + // jsResult = __engine.eval( fnBody ); if ( typeof jsResult != 'undefined' ) { if ( jsResult == null) { - sender.sendMessage('(null)'); + // engine eval will return null even if the result should be undefined + // this can be confusing so I think it's better to omit output for this case + // sender.sendMessage('(null)'); } else { - try { - if ( isJavaObject(jsResult) || typeof jsResult === 'function') { - sender.sendMessage(jsResult); - } else { - var replacer = function replacer(key, value){ - return this[key] instanceof java.lang.Object ? '' + this[key] : value; - }; - sender.sendMessage( JSON.stringify( jsResult, replacer, 2) ); - } - } catch ( displayError ) { + try { + if ( isJavaObject(jsResult) || typeof jsResult === 'function') { + sender.sendMessage(jsResult); + } else { + var replacer = function replacer(key, value){ + return this[key] instanceof java.lang.Object ? '' + this[key] : value; + }; + sender.sendMessage( JSON.stringify( jsResult, replacer, 2) ); + } + } catch ( displayError ) { logger.severe( 'Error while trying to display result: ' + jsResult + ', Error: '+ displayError ); - } + } } } } catch ( e ) {