When a declared builder of a FreeBuilder class implements an interface, it compiles ok with Java 8 compiler, but Java 11 compiler aborts with an error like
[ERROR] fmi-avi-messageconverter/target/generated-sources/annotations/fi/fmi/avi/model/metar/immutable/SPECIImpl_Builder.java:[180,32] incompatible types: fi.fmi.avi.model.metar.immutable.SPECIImpl_Builder cannot be converted to fi.fmi.avi.model.metar.immutable.SPECIImpl.Builder
SPECIImpl_Builder is the FreeBuilder generated class
SPECIImpl.Builder is the declared nested class of SPECIImpl and a subclass of SPECIImpl_Builder.
public interface MeteorologicalTerminalAirReportBuilder<T extends MeteorologicalTerminalAirReport, B extends MeteorologicalTerminalAirReportBuilder<T, B>>
and generated SPECIImpl_Builder as
abstract class SPECIImpl_Builder
Methods of SPECIImpl_Builder return (SPECIImpl.Builder) this. Java 11 compiler sees that SPECIImpl_Builder does not implement MeteorologicalTerminalAirReportBuilder as SPECIImpl.Builder does, and refuses to do a static cast raising an error. Java 8 compiler doesn't seem to do this check and compilation succeeds. Though a compiled class runs correctly under JRE 11.
The MeteorologicalTerminalAirReportBuilder interface is implemented by METARImpl.Builder and SPECIImpl.Builder to enable use of the builder through a common interface, allowing to deduplicate code using these builders.
FreeBuilder version: 2.3.0
Find out how to make this project compile with Java 11 compiler.
When a declared builder of a FreeBuilder class implements an interface, it compiles ok with Java 8 compiler, but Java 11 compiler aborts with an error like
SPECIImpl_Builder
is the FreeBuilder generated classSPECIImpl.Builder
is the declared nested class ofSPECIImpl
and a subclass ofSPECIImpl_Builder
.In the example above,
SPECIImpl.Builder
is declared asand
MeteorologicalTerminalAirReportBuilder
asand generated
SPECIImpl_Builder
asMethods of
SPECIImpl_Builder
return(SPECIImpl.Builder) this
. Java 11 compiler sees thatSPECIImpl_Builder
does not implementMeteorologicalTerminalAirReportBuilder
asSPECIImpl.Builder
does, and refuses to do a static cast raising an error. Java 8 compiler doesn't seem to do this check and compilation succeeds. Though a compiled class runs correctly under JRE 11.The
MeteorologicalTerminalAirReportBuilder
interface is implemented byMETARImpl.Builder
andSPECIImpl.Builder
to enable use of the builder through a common interface, allowing to deduplicate code using these builders.FreeBuilder version: 2.3.0
Find out how to make this project compile with Java 11 compiler.