Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.0-beta-1
-
Fix Version/s: 2.0-beta-2
-
Component/s: Static Type Checker
-
Labels:None
-
Number of attachments :
Description
The following code will pass, though the return type of x after the if/else statement may differ:
def x if (cond) { x = new Date() } else { x = 123 } x.toInteger()
In a similar manner:
def x = '123' for (int i=0; i<5;i++) { x = new HashSet() } x.toInteger()
def x = '123' while (false) { x = new HashSet() } x.toInteger()
def x = '123' def cond = false cond?(x = new HashSet()):3 x.toInteger()
Activity
Cedric Champeau
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Summary | Assignments in if/else are not type checked properly | Assignments in if/else/for/while/ternary are not type checked properly |
| Description |
The following code will pass, though the return type of x after the if/else statement may differ:
{code} def x if (cond) { x = new Date() } else { x = 123 } x.toInteger() {code} |
The following code will pass, though the return type of x after the if/else statement may differ:
{code} def x if (cond) { x = new Date() } else { x = 123 } x.toInteger() {code} In a similar manner: {code} def x = '123' for (int i=0; i<5;i++) { x = new HashSet() } x.toInteger() {code} {code} def x = '123' while (false) { x = new HashSet() } x.toInteger() {code} {code} def x = '123' def cond = false cond?(x = new HashSet()):3 x.toInteger() {code} |
Cedric Champeau
made changes -
| Status | Open [ 1 ] | Resolved [ 5 ] |
| Resolution | Fixed [ 1 ] |
Paul King
made changes -
| Status | Resolved [ 5 ] | Closed [ 6 ] |