I wanted to discuss the strictness of Groovy's static type checking before 
Groovy 3 is released and change becomes difficult.  Recent changes have 
replaced some instances of type coercion with STC errors.  It was suggested in 
one of the bug tickets to discuss before accepting the new strictness or making 
some adjustments to allow some number type conversions and possibly allow 
toString() conversions.

Each of the three method call expressions below produce this error: "[Static 
type checking] - Cannot find matching method 
bugs.Groovy8488#m1(java.math.BigDecimal). Please check if the declared type is 
correct and if the method exists."

Do we expect number literals (such as BigDecimal, BigInteger or even just 
Double) to be acceptable arguments to methods that accept "int", "double" or 
"String"?  Is there some limited set of automatic conversions that STC should 
support?  Dynamic Groovy supports the m1 and m2 calls, but throws 
MissingMethodException for m3.

@groovy.transform.CompileStatic
class STC {
  void m1(int i) {}
  void m2(double d) {}
  void m3(String str) {}

  void test() {
    m1(1.0)
    m2(1.0)
    m3(1.0)
  }
}

https://issues.apache.org/jira/browse/GROOVY-8488
https://issues.apache.org/jira/browse/GROOVY-9224

Reply via email to