-
Notifications
You must be signed in to change notification settings - Fork 76
Description
#866 reverted the PR Generate fields in REPL for data schemas since it caused a bug in schema generation in notebooks. However, this feature is still needed for the IntelliJ Plugin of DataFrame to be able to extract the schema from DataFrame types.
In short, enabling generating fields = true makes it visible that the data schema generation makes a mistake with inheritance.
Originally
@DataSchema
interface _DataFrameType1 {}
val ColumnsContainer<_DataFrameType1>.columnA: DataColumn<DataFrame<_DataFrameType10>>
get() = this["columnA"] as DataColumn<DataFrame<_DataFrameType10>>
@DataSchema
interface _DataFrameType2 : _DataFrameType1 {}
val ColumnsContainer<_DataFrameType2>.columnA: DataColumn<DataFrame<_DataFrameType20>>
get() = this["columnA"] as DataColumn<DataFrame<_DataFrameType20>>is not an issue as long as _DataFrameType10 and _DataFrameType20 have the same properties.
However, when the properties are generated
@DataSchema
interface _DataFrameType1 {
val columnA: List<_DataFrameType10>
}
@DataSchema
interface _DataFrameType2 : _DataFrameType1 {
override val columnA: List<_DataFrameType20> // wrong type
}becomes a problem. This only works if _DataFrameType20 is a subtype of _DataFrameType10, which is not the case in the current generation implementation.
Reproducible test by @koperagen:


i found the culprit:
@DataSchema(isOpen = false)
not sure about the fix yet. but it goes like this: technically _DataFrameType is a supertype of _DataFrameType1 according to structure, so nothing is wrong here. But then code generator doesn't make Repos1 : Repos because isOpen = false
Maybe making isOpen = true solves the issue, but this needs to be properly tested for 0.15. Alternatively, fields = false could remain as is for notebooks, however, this is not desired as the IntelliJ plugin might have some use in notebooks in the future.