Is there a way to avoid awkward typing issues with literals as in this case:

@CompileStatic
void f() {
  Map<String, Object> x = [a: '1']
  println x + [b: 2]
}

This results in the following errors in 2.4.5:

[Static type checking] - Incompatible generic argument types. Cannot assign 
java.util.LinkedHashMap <java.lang.String, java.lang.String> to: java.util.Map 
<String, Object>
 at line: 3, column: 27

[Static type checking] - Cannot call <K,V> java.util.LinkedHashMap 
<java.lang.String, java.lang.String>#plus(java.util.Map <java.lang.String, 
java.lang.String>) with arguments [java.util.LinkedHashMap <java.lang.String, 
java.lang.Integer>] 
 at line: 4, column: 13

It seems that the static compiler has issues with inferring RHS types. I think 
it might be similar to this case I run into from time to time:

@CompileStatic
void g(List<Integer> items) {}

@CompileStatic
void h() {
  g(Collections.emptyList())
}

Results in:
[Static type checking] - Cannot call ConsoleScript6#g(java.util.List 
<java.lang.Integer>) with arguments [java.util.List <T extends 
java.lang.Object>]

Jason Winnebeck

----------------------------------------------------------------------
This email message and any attachments are for the sole use of the intended 
recipient(s). Any unauthorized review, use, disclosure or distribution is 
prohibited. If you are not the intended recipient, please contact the sender by 
reply email and destroy all copies of the original message and any attachments.

Reply via email to