[
https://issues.apache.org/jira/browse/GROOVY-4721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15886057#comment-15886057
]
Daniel Sun commented on GROOVY-4721:
------------------------------------
The issue is similiar to GROOVY-8085, the two issues are both related to return
statement and finally block.
The following code will fail because {{System.out.println(str);}} accesses
variable {{str}} which is out of its scope. *Notice:* no explicit/implicit
return statement in the try block.
{code}
String m() {
try {
String str = "hello";
} finally {
System.out.println(str);
}
return '123'
}
m()
{code}
> variable declared in try block is in scope in finally block
> -----------------------------------------------------------
>
> Key: GROOVY-4721
> URL: https://issues.apache.org/jira/browse/GROOVY-4721
> Project: Groovy
> Issue Type: Bug
> Components: Compiler
> Affects Versions: 2.4.0-rc-1
> Reporter: Hamlet D'Arcy
>
> This code should fail because 'x' is out of scope in the finally block.
> {code}
> class MyClass {
> def myMethod() {
> try {
> def x = 'foo'
> println x
> }
> finally {
> println x
> }
> }
> }
> new MyClass().myMethod()
> {code}
> Instead it prints 'foo' twice.
> if myMethod is static then it shows the behavior I expect.
> Could be something wrong with VariableScope somewhere?
> This example is from the Groovy codebase. We have code that relies on this
> behavior (although it is easy to find and fix, just run the UnusedVariable
> codenarc inspection, which is how I found it)
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)