Marc Ewert created GROOVY-7696: ---------------------------------- Summary: Bug with @TypeChecked and generic properties of Java classes used in binary expressions Key: GROOVY-7696 URL: https://issues.apache.org/jira/browse/GROOVY-7696 Project: Groovy Issue Type: Bug Components: Compiler Affects Versions: 2.4.5 Reporter: Marc Ewert
I have the following two Java Classes: {code} import java.math.BigDecimal; public abstract class Attribute<T> { private BigDecimal numericValue; public abstract T getValue(); public abstract void setValue(T value); public BigDecimal getNumericValue() { return numericValue; } public void setNumericValue(BigDecimal numericValue) { this.numericValue = numericValue; } } {code} {code} import java.math.BigDecimal; public class LongAttribute extends Attribute<Long> { public Long getValue() { return getNumericValue() == null ? null : getNumericValue().longValue(); } public void setValue(Long value) { setNumericValue(BigDecimal.valueOf(value)); } } {code} And a Groovy test class with @TypeChecked annotation: {code} import groovy.transform.TypeChecked @TypeChecked class Scratch { public static void main(String[] args) { LongAttribute attr = new LongAttribute(); attr.value = 0L println "getter: " + attr.value println "smaller as 0? " + (attr.value < 0) } } {code} Compiling the class leads to the error message: {code} Error:(10, 36) Groovyc: [Static type checking] - Cannot find matching method java.lang.Object#compareTo(int). Please check if the declared type is right and if the method exists. {code} Removing the @TypeChecked annotation or moving the Java classes into the Groovy class as static inner classes suppresses the compilation error. -- This message was sent by Atlassian JIRA (v6.3.4#6332)