4d9cffccf2
Use the same logic as for type constructors of classes, based on the fully-qualified name of the classifier, with special cases for error types and local declarations, with an additional check that the type constructors' declaration descriptors are structurally equal via `DescriptorEquivalenceForOverrides`. The latter is required because type parameters of overloaded functions must be different, even though their full FQ name is the same. This (hopefully) has no effect for the compiler, but is useful for kotlin-reflect where `KType.equals` runs the type checker on the underlying `KotlinType` instances, which eventually ends up comparing type constructors. Descriptors and types in kotlin-reflect are cached on soft references, so they may be suddenly garbage-collected and recomputed, and we want copies of the same type parameter to be equal to each other. This fixes flaky codegen tests which started to fail after migration to the new test infrastructure, where tests are now run in parallel in the same process, thus with higher memory pressure and more soft references being GC'd: * `codegen/box/reflection/types/createType/typeParameter.kt` * `codegen/box/reflection/supertypes/genericSubstitution.kt` Also, add a new test to check that we do the instanceof check in overrides of `AbstractTypeConstructor.isSameClassifier`. #KT-44850 Fixed