The modality was nondeterministic before.
The main change sits in OverrideResolver: the logic of "fake override" generation is restructured so that
all the descriptors a newly created "fake" one overrides are known by the time it is created, so its
modality can be determined properly from their modalities.
Also, the ReadJavaBinaryClassTestGenerated is now a clear JUnit3 test case
Their numbers now start from 1. This is made for consistency with auto-generated sources for these types. Parameters of runtime types (written in Java) are numbered starting with 0, too.
===
open class Ccc() {
fun foo() = 1
}
trait Ttt {
fun foo(): Int
}
class Zzz() : Ccc(), Ttt // there must not be an error here
===
Reported by Andrey Breslav as a bug of Comparator implementation:
===
fun comparator<T>(f: (T, T) -> Int): Comparator<T> = object : Comparator<T>, Object() {
override fun compare(o1: T, o2: T): Int = f(o1, o2)
}
===
that fixes invocation:
>>> StringBuilder.length()
that was compiled to
>>> invokevirtual CharSequence.length()
and now compiles to
>>> invokevirtual StringBuilder.length()
Essentially patch rewrites FunctionDescriptor.containingDeclaration
when FunctionDescriptor is copied to subclass scope.
FunctionDescriptor now has kind field that can be
* DECLARATION (for "real" function, maybe abstract)
* DELEGATION
* FAKE_OVERRIDE (created for functions from supertypes)
All tests pass although some parts of code are buggy and ugly.
Random comments about this patch:
* FunctionDescriptor.overrides point to function descriptors of supertype scopes
* Filling of memberScope with supertypes is moved to OverrideResolver
* ExpressionCodegen.intermediateValueForProperty must be rewritten
* Patch adds not nice REDECLARATION reports (see compiler/testData/diagnostics/tests/*).
Will be fixed later.