You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by jw...@apache.org on 2018/03/04 23:55:35 UTC
[2/2] groovy git commit: backport fix GROOVY-7562 for the 2_4_X branch
backport fix GROOVY-7562 for the 2_4_X branch
Groovysh: Fix imports not working at all in interpreter mode
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/2aa0a54e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/2aa0a54e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/2aa0a54e
Branch: refs/heads/GROOVY_2_4_X
Commit: 2aa0a54ed0944bd06e7b52af6a9b810c16b6d419
Parents: ba00a0a
Author: John Wagenleitner <jw...@apache.org>
Authored: Sat Mar 3 20:21:16 2018 -0800
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sun Mar 4 13:35:57 2018 -0800
----------------------------------------------------------------------
.../codehaus/groovy/tools/shell/Groovysh.groovy | 26 +++++++++++++-------
.../groovy/tools/shell/GroovyshTest.groovy | 11 +++++++++
2 files changed, 28 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/2aa0a54e/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy
index da81429..af93404 100644
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy
+++ b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy
@@ -196,7 +196,7 @@ class Groovysh extends Shell {
setLastResult(result = interp.evaluate(buff))
} else {
// Evaluate Buffer wrapped with code storing bounded vars
- result = evaluateWithStoredBoundVars(current)
+ result = evaluateWithStoredBoundVars(importsSpec, current)
}
buffers.clearSelected()
@@ -232,14 +232,14 @@ class Groovysh extends Shell {
* to simulate an interpreter mode, this method wraps the statements into a try/finally block that
* stores bound variables like unbound variables
*/
- private Object evaluateWithStoredBoundVars(final List<String> current) {
+ private Object evaluateWithStoredBoundVars(String importsSpec, final List<String> current) {
Object result
- String variableBlocks = ''
- // To make groovysh behave more like an interpreter, we need to retrive all bound
+ String variableBlocks = null
+ // To make groovysh behave more like an interpreter, we need to retrieve all bound
// vars at the end of script execution, and then update them into the groovysh Binding context.
- Set<String> boundVars = ScriptVariableAnalyzer.getBoundVars(current.join(Parser.NEWLINE), interp.classLoader)
- variableBlocks += "$COLLECTED_BOUND_VARS_MAP_VARNAME = new HashMap();"
+ Set<String> boundVars = ScriptVariableAnalyzer.getBoundVars(importsSpec + Parser.NEWLINE + current.join(Parser.NEWLINE), interp.classLoader)
if (boundVars) {
+ variableBlocks = "$COLLECTED_BOUND_VARS_MAP_VARNAME = new HashMap();"
boundVars.each({ String varname ->
// bound vars can be in global or some local scope.
// We discard locally scoped vars by ignoring MissingPropertyException
@@ -250,12 +250,20 @@ try {$COLLECTED_BOUND_VARS_MAP_VARNAME[\"$varname\"] = $varname;
}
// Evaluate the current buffer w/imports and dummy statement
- List<String> buff = imports + ['try {', 'true'] + current + ['} finally {' + variableBlocks + '}']
+ List<String> buff
+ if (variableBlocks) {
+ buff = [importsSpec] + ['try {', 'true'] + current + ['} finally {' + variableBlocks + '}']
+ } else {
+ buff = [importsSpec] + ['true'] + current
+ }
setLastResult(result = interp.evaluate(buff))
- Map<String, Object> boundVarValues = interp.context.getVariable(COLLECTED_BOUND_VARS_MAP_VARNAME)
- boundVarValues.each({ String name, Object value -> interp.context.setVariable(name, value) })
+ if (variableBlocks) {
+ Map<String, Object> boundVarValues = interp.context.getVariable(COLLECTED_BOUND_VARS_MAP_VARNAME)
+ boundVarValues.each({ String name, Object value -> interp.context.setVariable(name, value) })
+ }
+
return result
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/2aa0a54e/subprojects/groovy-groovysh/src/test/groovy/org/codehaus/groovy/tools/shell/GroovyshTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-groovysh/src/test/groovy/org/codehaus/groovy/tools/shell/GroovyshTest.groovy b/subprojects/groovy-groovysh/src/test/groovy/org/codehaus/groovy/tools/shell/GroovyshTest.groovy
index 7a0f6e1..7791827 100644
--- a/subprojects/groovy-groovysh/src/test/groovy/org/codehaus/groovy/tools/shell/GroovyshTest.groovy
+++ b/subprojects/groovy-groovysh/src/test/groovy/org/codehaus/groovy/tools/shell/GroovyshTest.groovy
@@ -315,6 +315,17 @@ class GroovyshTest extends GroovyTestCase {
} catch (ArithmeticException e) {}
}
+ void testImports() {
+ Groovysh groovysh = new Groovysh(testio)
+ groovysh.execute('import java.rmi.Remote ')
+ assert mockOut.toString().length() > 0
+ assert 'java.rmi.Remote\n' == mockOut.toString().normalize()[-('java.rmi.Remote\n'.length())..-1]
+ groovysh.execute('Remote r')
+ assert mockOut.toString().length() > 0
+ // mostly assert no exception
+ assert 'null\n' == mockOut.toString().normalize()[-5..-1]
+ }
+
static File createTemporaryGroovyScriptFile(content) {
String testName = 'GroovyshTest' + System.currentTimeMillis()
File groovyCode = new File(System.getProperty('java.io.tmpdir'), testName)