FIR type enhancement: make J2K mapping and changed handling more exact

Related to KT-29937
This commit is contained in:
Mikhail Glukhikh
2019-02-28 14:39:13 +03:00
parent 9bb2278fd4
commit 7563a98999
40 changed files with 91 additions and 104 deletions
@@ -172,7 +172,7 @@ internal fun FirAbstractAnnotatedElement.addAnnotationsFrom(javaAnnotationOwner:
}
}
private fun JavaType.toConeProjection(session: FirSession, boundTypeParameter: FirTypeParameter?): ConeKotlinTypeProjection {
internal fun JavaType.toConeProjection(session: FirSession, boundTypeParameter: FirTypeParameter?): ConeKotlinTypeProjection {
return when (this) {
is JavaWildcardType -> {
val bound = this.bound
@@ -7,12 +7,13 @@ package org.jetbrains.kotlin.fir.java.enhancement
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.expressions.resolvedFqName
import org.jetbrains.kotlin.fir.java.createTypeParameterSymbol
import org.jetbrains.kotlin.fir.java.toConeKotlinTypeWithNullability
import org.jetbrains.kotlin.fir.java.toConeProjection
import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.resolve.toTypeProjection
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
@@ -121,29 +123,24 @@ private fun JavaClassifierType.enhanceInflexibleType(
}
val effectiveQualifiers = qualifiers(index)
val (enhancedSymbol, mutabilityChanged) = originalSymbol.enhanceMutability(effectiveQualifiers, position)
val enhancedSymbol = originalSymbol.enhanceMutability(effectiveQualifiers, position)
var globalArgIndex = index + 1
var wereChanges = mutabilityChanged
val enhancedArguments = arguments.mapIndexed { localArgIndex, arg ->
if (arg is JavaWildcardType) {
globalArgIndex++
ConeStarProjection
// TODO: (?) TypeUtils.makeStarProjection(enhancedClassifier.typeConstructor.parameters[localArgIndex])
arg.toConeProjection(
session,
((originalSymbol as? FirBasedSymbol<*>)?.fir as? FirCallableMember)?.typeParameters?.getOrNull(localArgIndex)
)
} else {
val argEnhancedTypeRef = arg.enhancePossiblyFlexible(session, annotations, qualifiers, globalArgIndex)
wereChanges = wereChanges || argEnhancedTypeRef !== arg
globalArgIndex += arg.subtreeSize()
argEnhancedTypeRef.type.type.toTypeProjection(Variance.INVARIANT)
}
}
val (enhancedNullability, _, nullabilityChanged) = getEnhancedNullability(effectiveQualifiers, position)
wereChanges = wereChanges || nullabilityChanged
if (!wereChanges) return toConeKotlinTypeWithNullability(
session, isNullable = position == TypeComponentPosition.FLEXIBLE_UPPER
)
val enhancedNullability = getEnhancedNullability(effectiveQualifiers, position)
val enhancedType = enhancedSymbol.constructType(enhancedArguments.toTypedArray(), enhancedNullability)
@@ -158,49 +155,39 @@ private fun JavaClassifierType.enhanceInflexibleType(
private fun getEnhancedNullability(
qualifiers: JavaTypeQualifiers,
position: TypeComponentPosition
): EnhanceDetailsResult<Boolean> {
if (!position.shouldEnhance()) return false.noChange()
): Boolean {
if (!position.shouldEnhance()) return position == TypeComponentPosition.FLEXIBLE_UPPER
return when (qualifiers.nullability) {
NullabilityQualifier.NULLABLE -> true.enhancedNullability()
NullabilityQualifier.NOT_NULL -> false.enhancedNullability()
else -> false.noChange()
NullabilityQualifier.NULLABLE -> true
NullabilityQualifier.NOT_NULL -> false
else -> position == TypeComponentPosition.FLEXIBLE_UPPER
}
}
private data class EnhanceDetailsResult<out T>(
val result: T,
val mutabilityChanged: Boolean = false,
val nullabilityChanged: Boolean = false
)
private fun <T> T.noChange() = EnhanceDetailsResult(this)
private fun <T> T.enhancedNullability() = EnhanceDetailsResult(this, nullabilityChanged = true)
private fun <T> T.enhancedMutability() = EnhanceDetailsResult(this, mutabilityChanged = true)
private fun ConeClassifierSymbol.enhanceMutability(
qualifiers: JavaTypeQualifiers,
position: TypeComponentPosition
): EnhanceDetailsResult<ConeClassifierSymbol> {
if (!position.shouldEnhance()) return this.noChange()
if (this !is FirClassSymbol) return this.noChange() // mutability is not applicable for type parameters
): ConeClassifierSymbol {
if (!position.shouldEnhance()) return this
if (this !is FirClassSymbol) return this // mutability is not applicable for type parameters
when (qualifiers.mutability) {
MutabilityQualifier.READ_ONLY -> {
val readOnlyId = classId.mutableToReadOnly()
if (position == TypeComponentPosition.FLEXIBLE_LOWER && readOnlyId != null) {
return FirClassSymbol(readOnlyId).enhancedMutability()
return FirClassSymbol(readOnlyId)
}
}
MutabilityQualifier.MUTABLE -> {
val mutableId = classId.readOnlyToMutable()
if (position == TypeComponentPosition.FLEXIBLE_UPPER && mutableId != null) {
return FirClassSymbol(mutableId).enhancedMutability()
return FirClassSymbol(mutableId)
}
}
}
return this.noChange()
return this
}
@@ -1,4 +1,4 @@
public open class InnerClassTypeMultipleGeneric : R|java/lang/Object| {
public open operator function staticType(): R|ft<test/InnerClassTypeMultipleGeneric.Outer.Inner<ft<java/lang/Byte, java/lang/Byte?>, ft<java/lang/Character, java/lang/Character?>, ft<java/lang/Boolean, java/lang/Boolean?>>, test/InnerClassTypeMultipleGeneric.Outer.Inner<ft<java/lang/Byte, java/lang/Byte?>, ft<java/lang/Character, java/lang/Character?>, ft<java/lang/Boolean, java/lang/Boolean?>>>|
public open operator function staticType(): R|ft<test/InnerClassTypeMultipleGeneric.Outer.Inner<ft<kotlin/Byte, kotlin/Byte?>, ft<kotlin/Char, kotlin/Char?>, ft<kotlin/Boolean, kotlin/Boolean?>>, test/InnerClassTypeMultipleGeneric.Outer.Inner<ft<kotlin/Byte, kotlin/Byte?>, ft<kotlin/Char, kotlin/Char?>, ft<kotlin/Boolean, kotlin/Boolean?>>?>|!
}
@@ -1,12 +1,12 @@
public abstract interface IntrinsicCompanionObject : R|java/lang/Object| {
public abstract operator function testInt(i: R|ft<kotlin/jvm/internal/IntCompanionObject, kotlin/jvm/internal/IntCompanionObject?>|!): R|kotlin/Unit|
public abstract operator function testInt(i: R|ft<kotlin/Int.Companion, kotlin/Int.Companion?>|!): R|kotlin/Unit|
public abstract operator function testChar(c: R|ft<kotlin/jvm/internal/CharCompanionObject, kotlin/jvm/internal/CharCompanionObject?>|!): R|kotlin/Unit|
public abstract operator function testChar(c: R|ft<kotlin/Char.Companion, kotlin/Char.Companion?>|!): R|kotlin/Unit|
public abstract operator function testString(s: R|ft<kotlin/jvm/internal/StringCompanionObject, kotlin/jvm/internal/StringCompanionObject?>|!): R|kotlin/Unit|
public abstract operator function testString(s: R|ft<kotlin/String.Companion, kotlin/String.Companion?>|!): R|kotlin/Unit|
public abstract operator function testBoolean(b: R|ft<kotlin/jvm/internal/BooleanCompanionObject, kotlin/jvm/internal/BooleanCompanionObject?>|!): R|kotlin/Unit|
public abstract operator function testBoolean(b: R|ft<kotlin/Boolean.Companion, kotlin/Boolean.Companion?>|!): R|kotlin/Unit|
public abstract operator function testEnum(e: R|ft<kotlin/jvm/internal/EnumCompanionObject, kotlin/jvm/internal/EnumCompanionObject?>|!): R|kotlin/Unit|
public abstract operator function testEnum(e: R|ft<kotlin/Enum.Companion, kotlin/Enum.Companion?>|!): R|kotlin/Unit|
}
@@ -1,12 +1,12 @@
public open class Frame : R|java/lang/Object| {
public/*package*/ open property accessibleContext(var): R|ft<java/lang/String, java/lang/String?>|!
public/*package*/ get(): R|ft<java/lang/String, java/lang/String?>|!
public/*package*/ set(value: R|ft<java/lang/String, java/lang/String?>|!): kotlin/Unit
public/*package*/ open property accessibleContext(var): R|ft<kotlin/String, kotlin/String?>|!
public/*package*/ get(): R|ft<kotlin/String, kotlin/String?>|!
public/*package*/ set(value: R|ft<kotlin/String, kotlin/String?>|!): kotlin/Unit
}
public open class JFrame : R|awt/Frame| {
protected/*protected and package*/ open property accessibleContext(var): R|ft<java/lang/String, java/lang/String?>|!
protected/*protected and package*/ get(): R|ft<java/lang/String, java/lang/String?>|!
protected/*protected and package*/ set(value: R|ft<java/lang/String, java/lang/String?>|!): kotlin/Unit
protected/*protected and package*/ open property accessibleContext(var): R|ft<kotlin/String, kotlin/String?>|!
protected/*protected and package*/ get(): R|ft<kotlin/String, kotlin/String?>|!
protected/*protected and package*/ set(value: R|ft<kotlin/String, kotlin/String?>|!): kotlin/Unit
}
@@ -1,6 +1,6 @@
public abstract interface RemoveRedundantProjectionKind : R|java/lang/Object| {
public abstract operator function f(collection: R|ft<java/util/Collection<out java/lang/CharSequence>, java/util/Collection<out java/lang/CharSequence>?>|!): R|kotlin/Unit|
public abstract operator function f(collection: R|ft<kotlin/collections/MutableCollection<out java/lang/CharSequence>, kotlin/collections/Collection<out java/lang/CharSequence>?>|!): R|kotlin/Unit|
public abstract operator function f(comparator: R|ft<java/lang/Comparable<in java/lang/CharSequence>, java/lang/Comparable<in java/lang/CharSequence>?>|!): R|kotlin/Unit|
public abstract operator function f(comparator: R|ft<kotlin/Comparable<in java/lang/CharSequence>, kotlin/Comparable<in java/lang/CharSequence>?>|!): R|kotlin/Unit|
}
@@ -1,6 +1,6 @@
public final class UnboundWildcard : R|java/lang/Object| {
public final operator function foo(): R|ft<test/UnboundWildcard.MyClass<*>, test/UnboundWildcard.MyClass<*>?>|!
public final operator function collection(): R|ft<java/util/Collection<*>, java/util/Collection<*>?>|!
public final operator function collection(): R|ft<kotlin/collections/MutableCollection<*>, kotlin/collections/Collection<*>?>|!
}
@@ -1,4 +1,4 @@
public/*package*/ open class AnnotatedTypeInFun : R|java/lang/Object| {
public/*package*/ open operator function foo(@R|test/AnnotatedTypeInFun.Anno|(String(a)) a: @R|test/AnnotatedTypeInFun.Anno|(String(a)) R|ft<java/lang/String, java/lang/String?>|!, @R|test/AnnotatedTypeInFun.Anno|(String(b)) b: @R|test/AnnotatedTypeInFun.Anno|(String(b)) R|ft<java/lang/String, java/lang/String?>|!): R|kotlin/Unit|
public/*package*/ open operator function foo(@R|test/AnnotatedTypeInFun.Anno|(String(a)) a: @R|test/AnnotatedTypeInFun.Anno|(String(a)) R|ft<kotlin/String, kotlin/String?>|!, @R|test/AnnotatedTypeInFun.Anno|(String(b)) b: @R|test/AnnotatedTypeInFun.Anno|(String(b)) R|ft<kotlin/String, kotlin/String?>|!): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public open class AnnotatedValueParameter : R|java/lang/Object| {
public open operator function f(@R|test/AnnotatedValueParameter.Anno|(String(non-empty)) parameter: R|ft<kotlin/collections/MutableList<ft<java/lang/String, java/lang/String?>>, kotlin/collections/List<ft<java/lang/String, java/lang/String?>>>|): R|kotlin/Unit|
public open operator function f(@R|test/AnnotatedValueParameter.Anno|(String(non-empty)) parameter: R|ft<kotlin/collections/MutableList<ft<kotlin/String, kotlin/String?>>, kotlin/collections/List<ft<kotlin/String, kotlin/String?>>?>|!): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public open class JavaDocDeprecated : R|java/lang/Object| {
public open operator function getFoo(text: R|ft<java/lang/String, java/lang/String?>|!): R|ft<java/lang/String, java/lang/String?>|!
public open operator function getFoo(text: R|ft<kotlin/String, kotlin/String?>|!): R|ft<kotlin/String, kotlin/String?>|!
}
@@ -1,5 +1,5 @@
public open class DifferentGetterAndSetter : R|java/lang/Object| {
public open operator function setSomething(color: R|ft<java/lang/String, java/lang/String?>|!): R|kotlin/Unit|
public open operator function setSomething(color: R|ft<kotlin/String, kotlin/String?>|!): R|kotlin/Unit|
public open operator function getSomething(): R|kotlin/Int|
@@ -1,4 +1,4 @@
public open class JavaBeanVal : R|java/lang/Object| {
public open operator function getColor(): R|ft<java/lang/String, java/lang/String?>|!
public open operator function getColor(): R|ft<kotlin/String, kotlin/String?>|!
}
@@ -1,6 +1,6 @@
public open class JavaBeanVar : R|java/lang/Object| {
public open operator function getColor(): R|ft<java/lang/String, java/lang/String?>|!
public open operator function getColor(): R|ft<kotlin/String, kotlin/String?>|!
public open operator function setColor(string: R|ft<java/lang/String, java/lang/String?>|!): R|kotlin/Unit|
public open operator function setColor(string: R|ft<kotlin/String, kotlin/String?>|!): R|kotlin/Unit|
}
@@ -1,6 +1,6 @@
<P> public open class JavaBeanVarOfGenericType : R|java/lang/Object| {
public open operator function getCharacters(): R|ft<java/util/ArrayList<ft<P, P?>>, java/util/ArrayList<ft<P, P?>>>|
public open operator function getCharacters(): R|ft<java/util/ArrayList<ft<P, P?>>, java/util/ArrayList<ft<P, P?>>?>|!
public open operator function setCharacters(characters: R|ft<java/util/ArrayList<ft<P, P?>>, java/util/ArrayList<ft<P, P?>>>|): R|kotlin/Unit|
public open operator function setCharacters(characters: R|ft<java/util/ArrayList<ft<P, P?>>, java/util/ArrayList<ft<P, P?>>?>|!): R|kotlin/Unit|
}
@@ -1,5 +1,5 @@
public open class TwoSetters : R|java/lang/Object| {
public open operator function setSize(size: R|ft<java/lang/String, java/lang/String?>|!): R|kotlin/Unit|
public open operator function setSize(size: R|ft<kotlin/String, kotlin/String?>|!): R|kotlin/Unit|
public open operator function setSize(size: R|kotlin/Int|): R|kotlin/Unit|
@@ -1,4 +1,4 @@
public open class CustomProjectionKind : R|java/lang/Object| {
public open operator function foo(): R|ft<kotlin/collections/MutableList<ft<java/lang/Number, java/lang/Number?>>, kotlin/collections/List<ft<java/lang/Number, java/lang/Number?>>>|
public open operator function foo(): R|ft<kotlin/collections/MutableList<ft<kotlin/Number, kotlin/Number?>>, kotlin/collections/List<ft<kotlin/Number, kotlin/Number?>>?>|!
}
@@ -1,4 +1,4 @@
public open class MethodWithFunctionTypes : R|java/lang/Object| {
public open operator function foo(f: R|ft<kotlin/Function1<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>, kotlin/Function1<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>>|): R|ft<kotlin/Function0<ft<java/lang/String, java/lang/String?>>, kotlin/Function0<ft<java/lang/String, java/lang/String?>>>|
public open operator function foo(f: R|ft<kotlin/Function1<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>, kotlin/Function1<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>?>|!): R|ft<kotlin/Function0<ft<kotlin/String, kotlin/String?>>, kotlin/Function0<ft<kotlin/String, kotlin/String?>>?>|!
}
@@ -1,4 +1,4 @@
public open class MethodWithGenerics : R|java/lang/Object| {
public open operator function foo(a: R|ft<java/lang/String, java/lang/String?>|!, b: R|ft<kotlin/collections/MutableList<ft<kotlin/collections/MutableMap.MutableEntry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>, kotlin/collections/Map.Entry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>>>, kotlin/collections/List<ft<kotlin/collections/MutableMap.MutableEntry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>, kotlin/collections/Map.Entry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>>>>|): R|ft<java/lang/String, java/lang/String?>|!
public open operator function foo(a: R|ft<kotlin/String, kotlin/String?>|!, b: R|ft<kotlin/collections/MutableList<ft<kotlin/collections/MutableMap.MutableEntry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>, kotlin/collections/Map.Entry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>?>>, kotlin/collections/List<ft<kotlin/collections/MutableMap.MutableEntry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>, kotlin/collections/Map.Entry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>?>>?>|!): R|ft<kotlin/String, kotlin/String?>|!
}
@@ -1,6 +1,6 @@
public open class MethodWithMappedClasses : R|java/lang/Object| {
public open operator function copy(dest: R|ft<java/util/List<in T>, java/util/List<in T>?>|!, src: R|ft<kotlin/collections/MutableList<ft<T, T?>>, kotlin/collections/List<ft<T, T?>>>|): R|kotlin/Unit|
public open operator function copy(dest: R|ft<kotlin/collections/MutableList<in T>, kotlin/collections/List<in T>?>|!, src: R|ft<kotlin/collections/MutableList<ft<T, T?>>, kotlin/collections/List<ft<T, T?>>?>|!): R|kotlin/Unit|
public open operator function copyMap(dest: R|ft<kotlin/collections/MutableMap<ft<java/lang/String, java/lang/String?>, *>, kotlin/collections/Map<ft<java/lang/String, java/lang/String?>, *>>|, src: R|ft<kotlin/collections/MutableMap<ft<java/lang/String, java/lang/String?>, ft<T, T?>>, kotlin/collections/Map<ft<java/lang/String, java/lang/String?>, ft<T, T?>>>|): R|kotlin/Unit|
public open operator function copyMap(dest: R|ft<kotlin/collections/MutableMap<ft<kotlin/String, kotlin/String?>, in T>, kotlin/collections/Map<ft<kotlin/String, kotlin/String?>, in T>?>|!, src: R|ft<kotlin/collections/MutableMap<ft<kotlin/String, kotlin/String?>, ft<T, T?>>, kotlin/collections/Map<ft<kotlin/String, kotlin/String?>, ft<T, T?>>?>|!): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public open class MethodWithTypeParameters : R|java/lang/Object| {
public open operator function foo(a: R|ft<A, A?>|!, b: R|ft<java/util/List<out B>, java/util/List<out B>?>|!, list: R|ft<java/util/List<in java/lang/String>, java/util/List<in java/lang/String>?>|!): R|kotlin/Unit|
public open operator function foo(a: R|ft<A, A?>|!, b: R|ft<kotlin/collections/MutableList<out B>, kotlin/collections/List<out B>?>|!, list: R|ft<kotlin/collections/MutableList<in java/lang/String>, kotlin/collections/List<in java/lang/String>?>|!): R|kotlin/Unit|
}
@@ -3,16 +3,16 @@
public get(): R|ft<T, T?>|!
public set(value: R|ft<T, T?>|!): kotlin/Unit
public open property listDefinedGeneric(var): R|ft<java/util/ArrayList<ft<java/lang/String, java/lang/String?>>, java/util/ArrayList<ft<java/lang/String, java/lang/String?>>>|
public get(): R|ft<java/util/ArrayList<ft<java/lang/String, java/lang/String?>>, java/util/ArrayList<ft<java/lang/String, java/lang/String?>>>|
public set(value: R|ft<java/util/ArrayList<ft<java/lang/String, java/lang/String?>>, java/util/ArrayList<ft<java/lang/String, java/lang/String?>>>|): kotlin/Unit
public open property listDefinedGeneric(var): R|ft<java/util/ArrayList<ft<kotlin/String, kotlin/String?>>, java/util/ArrayList<ft<kotlin/String, kotlin/String?>>?>|!
public get(): R|ft<java/util/ArrayList<ft<kotlin/String, kotlin/String?>>, java/util/ArrayList<ft<kotlin/String, kotlin/String?>>?>|!
public set(value: R|ft<java/util/ArrayList<ft<kotlin/String, kotlin/String?>>, java/util/ArrayList<ft<kotlin/String, kotlin/String?>>?>|!): kotlin/Unit
public open property listGeneric(var): R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>|
public get(): R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>|
public set(value: R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>|): kotlin/Unit
public open property listGeneric(var): R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>|!
public get(): R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>|!
public set(value: R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>|!): kotlin/Unit
public open property listOfGenericList(var): R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>>|
public get(): R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>>|
public set(value: R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>>|): kotlin/Unit
public open property listOfGenericList(var): R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>>?>|!
public get(): R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>>?>|!
public set(value: R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>?>>?>|!): kotlin/Unit
}
@@ -1,10 +1,10 @@
public open class PropertySimpleType : R|java/lang/Object| {
public open property fieldOne(var): R|ft<java/lang/String, java/lang/String?>|!
public get(): R|ft<java/lang/String, java/lang/String?>|!
public set(value: R|ft<java/lang/String, java/lang/String?>|!): kotlin/Unit
public open property fieldOne(var): R|ft<kotlin/String, kotlin/String?>|!
public get(): R|ft<kotlin/String, kotlin/String?>|!
public set(value: R|ft<kotlin/String, kotlin/String?>|!): kotlin/Unit
public open property fieldTwo(var): R|ft<java/lang/String, java/lang/String?>|!
public get(): R|ft<java/lang/String, java/lang/String?>|!
public set(value: R|ft<java/lang/String, java/lang/String?>|!): kotlin/Unit
public open property fieldTwo(var): R|ft<kotlin/String, kotlin/String?>|!
public get(): R|ft<kotlin/String, kotlin/String?>|!
public set(value: R|ft<kotlin/String, kotlin/String?>|!): kotlin/Unit
}
@@ -1,4 +1,4 @@
public open class WrongProjectionKind : R|java/lang/Object| {
public open operator function copy(from: R|kotlin/Array<ft<java/lang/Number, java/lang/Number?>>|, to: R|kotlin/Array<ft<java/lang/Number, java/lang/Number?>>|): R|ft<kotlin/collections/MutableList<ft<java/lang/Number, java/lang/Number?>>, kotlin/collections/List<ft<java/lang/Number, java/lang/Number?>>>|
public open operator function copy(from: R|kotlin/Array<ft<java/lang/Number, java/lang/Number?>>|, to: R|kotlin/Array<ft<java/lang/Number, java/lang/Number?>>|): R|ft<kotlin/collections/MutableList<ft<kotlin/Number, kotlin/Number?>>, kotlin/collections/List<ft<kotlin/Number, kotlin/Number?>>?>|!
}
@@ -1,4 +1,4 @@
public open class WrongReturnTypeStructure : R|java/lang/Object| {
public open operator function foo(a: R|ft<java/lang/String, java/lang/String?>|!, b: R|ft<kotlin/collections/MutableList<ft<kotlin/collections/MutableMap.MutableEntry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>, kotlin/collections/Map.Entry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>>>, kotlin/collections/List<ft<kotlin/collections/MutableMap.MutableEntry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>, kotlin/collections/Map.Entry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>>>>|): R|ft<java/lang/String, java/lang/String?>|!
public open operator function foo(a: R|ft<kotlin/String, kotlin/String?>|!, b: R|ft<kotlin/collections/MutableList<ft<kotlin/collections/MutableMap.MutableEntry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>, kotlin/collections/Map.Entry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>?>>, kotlin/collections/List<ft<kotlin/collections/MutableMap.MutableEntry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>, kotlin/collections/Map.Entry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>?>>?>|!): R|ft<kotlin/String, kotlin/String?>|!
}
@@ -1,4 +1,4 @@
public open class WrongTypeParameterBoundStructure1 : R|java/lang/Object| {
public open operator function foo(a: R|ft<A, A?>|!, b: R|ft<java/util/List<out B>, java/util/List<out B>?>|!): R|kotlin/Unit|
public open operator function foo(a: R|ft<A, A?>|!, b: R|ft<kotlin/collections/MutableList<out B>, kotlin/collections/List<out B>?>|!): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public open class WrongValueParameterStructure1 : R|java/lang/Object| {
public open operator function foo(a: R|ft<java/lang/String, java/lang/String?>|!, b: R|ft<kotlin/collections/MutableList<ft<kotlin/collections/MutableMap.MutableEntry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>, kotlin/collections/Map.Entry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>>>, kotlin/collections/List<ft<kotlin/collections/MutableMap.MutableEntry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>, kotlin/collections/Map.Entry<ft<java/lang/String, java/lang/String?>, ft<java/lang/String, java/lang/String?>>>>>|): R|ft<java/lang/String, java/lang/String?>|!
public open operator function foo(a: R|ft<kotlin/String, kotlin/String?>|!, b: R|ft<kotlin/collections/MutableList<ft<kotlin/collections/MutableMap.MutableEntry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>, kotlin/collections/Map.Entry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>?>>, kotlin/collections/List<ft<kotlin/collections/MutableMap.MutableEntry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>, kotlin/collections/Map.Entry<ft<kotlin/String, kotlin/String?>, ft<kotlin/String, kotlin/String?>>?>>?>|!): R|ft<kotlin/String, kotlin/String?>|!
}
@@ -1,4 +1,4 @@
<E> public abstract interface SubclassOfCollection : R|java/util/Collection<E>| {
public abstract operator function iterator(): R|ft<kotlin/collections/MutableIterator<ft<E, E?>>, kotlin/collections/Iterator<ft<E, E?>>>|
public abstract operator function iterator(): R|ft<kotlin/collections/MutableIterator<ft<E, E?>>, kotlin/collections/Iterator<ft<E, E?>>?>|!
}
@@ -1,6 +1,6 @@
<T> public abstract interface LoadIterable : R|java/lang/Object| {
public abstract operator function getIterable(): R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>>|
public abstract operator function getIterable(): R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>?>|!
public abstract operator function setIterable(Iterable: R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>>|): R|kotlin/Unit|
public abstract operator function setIterable(Iterable: R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>?>|!): R|kotlin/Unit|
}
@@ -1,6 +1,6 @@
<T> public abstract interface LoadIterator : R|java/lang/Object| {
public abstract operator function getIterator(): R|ft<kotlin/collections/MutableIterator<ft<T, T?>>, kotlin/collections/Iterator<ft<T, T?>>>|
public abstract operator function getIterator(): R|ft<kotlin/collections/MutableIterator<ft<T, T?>>, kotlin/collections/Iterator<ft<T, T?>>?>|!
public abstract operator function setIterator(iterator: R|ft<kotlin/collections/MutableIterator<ft<T, T?>>, kotlin/collections/Iterator<ft<T, T?>>>|): R|kotlin/Unit|
public abstract operator function setIterator(iterator: R|ft<kotlin/collections/MutableIterator<ft<T, T?>>, kotlin/collections/Iterator<ft<T, T?>>?>|!): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public open class Max : R|java/lang/Object| {
public open operator function max(coll: R|ft<java/util/Collection<out T>, java/util/Collection<out T>?>|!): R|ft<T, T?>|!
public open operator function max(coll: R|ft<kotlin/collections/MutableCollection<out T>, kotlin/collections/Collection<out T>?>|!): R|ft<T, T?>|!
}
@@ -1,10 +1,10 @@
<T> public abstract interface LoadIterable : R|java/lang/Object| {
@R|kotlin/annotations/jvm/Mutable|() public abstract operator function getIterable(): R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/MutableIterable<ft<T, T?>>>|
@R|kotlin/annotations/jvm/Mutable|() public abstract operator function getIterable(): R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/MutableIterable<ft<T, T?>>?>|!
public abstract operator function setIterable(@R|kotlin/annotations/jvm/Mutable|() Iterable: R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/MutableIterable<ft<T, T?>>>|): R|kotlin/Unit|
public abstract operator function setIterable(@R|kotlin/annotations/jvm/Mutable|() Iterable: R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/MutableIterable<ft<T, T?>>?>|!): R|kotlin/Unit|
@R|kotlin/annotations/jvm/ReadOnly|() public abstract operator function getReadOnlyIterable(): R|ft<kotlin/collections/Iterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>>|
@R|kotlin/annotations/jvm/ReadOnly|() public abstract operator function getReadOnlyIterable(): R|ft<kotlin/collections/Iterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>?>|!
public abstract operator function setReadOnlyIterable(@R|kotlin/annotations/jvm/ReadOnly|() Iterable: R|ft<kotlin/collections/Iterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>>|): R|kotlin/Unit|
public abstract operator function setReadOnlyIterable(@R|kotlin/annotations/jvm/ReadOnly|() Iterable: R|ft<kotlin/collections/Iterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>?>|!): R|kotlin/Unit|
}
@@ -1,6 +1,6 @@
<T> public abstract interface LoadIterableWithConflict : R|java/lang/Object| {
@R|kotlin/annotations/jvm/ReadOnly|() @R|kotlin/annotations/jvm/Mutable|() public abstract operator function getIterable(): R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>>|
@R|kotlin/annotations/jvm/ReadOnly|() @R|kotlin/annotations/jvm/Mutable|() public abstract operator function getIterable(): R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>?>|!
public abstract operator function setIterable(@R|kotlin/annotations/jvm/ReadOnly|() @R|kotlin/annotations/jvm/Mutable|() Iterable: R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>>|): R|kotlin/Unit|
public abstract operator function setIterable(@R|kotlin/annotations/jvm/ReadOnly|() @R|kotlin/annotations/jvm/Mutable|() Iterable: R|ft<kotlin/collections/MutableIterable<ft<T, T?>>, kotlin/collections/Iterable<ft<T, T?>>?>|!): R|kotlin/Unit|
}
@@ -1,6 +1,6 @@
public abstract interface ReadOnlyExtendsWildcard : R|java/lang/Object| {
public abstract operator function bar(): R|kotlin/Unit|
public abstract operator function foo(@R|kotlin/annotations/jvm/ReadOnly|() x: R|ft<kotlin/collections/List<*>, java/util/List<out java/lang/CharSequence>?>|!, @R|org/jetbrains/annotations/NotNull|() y: R|ft<kotlin/Comparable<*>, kotlin/Comparable<*>>|): R|kotlin/Unit|
public abstract operator function foo(@R|kotlin/annotations/jvm/ReadOnly|() x: R|ft<kotlin/collections/List<out java/lang/CharSequence>, kotlin/collections/List<out java/lang/CharSequence>?>|!, @R|org/jetbrains/annotations/NotNull|() y: R|ft<kotlin/Comparable<in java/lang/String>, kotlin/Comparable<in java/lang/String>>|): R|kotlin/Unit|
}
@@ -1,6 +1,6 @@
<T> public abstract interface Comparator : R|java/lang/Object| {
public abstract operator function compare(o1: R|ft<T, T?>|!, o2: R|ft<T, T?>|!): R|kotlin/Int|
public abstract operator function equals(obj: R|ft<java/lang/Object, java/lang/Object?>|!): R|kotlin/Boolean|
public abstract operator function equals(obj: R|ft<kotlin/Any, kotlin/Any?>|!): R|kotlin/Boolean|
}
@@ -1,4 +1,4 @@
public abstract interface FilenameFilter : R|java/lang/Object| {
public abstract operator function accept(dir: R|ft<java/io/File, java/io/File?>|!, name: R|ft<java/lang/String, java/lang/String?>|!): R|kotlin/Boolean|
public abstract operator function accept(dir: R|ft<java/io/File, java/io/File?>|!, name: R|ft<kotlin/String, kotlin/String?>|!): R|kotlin/Boolean|
}
@@ -1,4 +1,4 @@
public abstract interface InterfaceWithObjectMethod : R|java/lang/Object| {
public abstract operator function toString(): R|ft<java/lang/String, java/lang/String?>|!
public abstract operator function toString(): R|ft<kotlin/String, kotlin/String?>|!
}
@@ -1,7 +1,7 @@
public open class NonTrivialFunctionType : R|java/lang/Object| {
public open operator function foo(filenameFilter: R|ft<java/io/FilenameFilter, java/io/FilenameFilter?>|!): R|kotlin/Unit|
public open operator function foo(comparator: R|ft<java/util/Comparator<ft<java/lang/String, java/lang/String?>>, java/util/Comparator<ft<java/lang/String, java/lang/String?>>>|): R|kotlin/Unit|
public open operator function foo(comparator: R|ft<java/util/Comparator<ft<kotlin/String, kotlin/String?>>, java/util/Comparator<ft<kotlin/String, kotlin/String?>>?>|!): R|kotlin/Unit|
public open operator function wildcardUnbound(comparator: R|ft<java/util/Comparator<*>, java/util/Comparator<*>?>|!): R|kotlin/Unit|
@@ -1,4 +1,4 @@
<T> public open class TypeParameterOfClass : R|java/lang/Object| {
public open operator function foo(comparator: R|ft<java/util/Comparator<ft<T, T?>>, java/util/Comparator<ft<T, T?>>>|): R|kotlin/Unit|
public open operator function foo(comparator: R|ft<java/util/Comparator<ft<T, T?>>, java/util/Comparator<ft<T, T?>>?>|!): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public open class StableName : R|java/lang/Object| {
public open operator function connect(@R|kotlin/annotations/jvm/internal/ParameterName|(String(host)) host: R|ft<java/lang/String, java/lang/String?>|!): R|kotlin/Unit|
public open operator function connect(@R|kotlin/annotations/jvm/internal/ParameterName|(String(host)) host: R|ft<kotlin/String, kotlin/String?>|!): R|kotlin/Unit|
}
@@ -1,5 +1,5 @@
public abstract interface TwoSuperclassesInconsistentGenericTypes : R|java/lang/Object| {
public abstract operator function foo(): R|ft<kotlin/collections/MutableList<ft<java/lang/String, java/lang/String?>>, kotlin/collections/List<ft<java/lang/String, java/lang/String?>>>|
public abstract operator function foo(): R|ft<kotlin/collections/MutableList<ft<kotlin/String, kotlin/String?>>, kotlin/collections/List<ft<kotlin/String, kotlin/String?>>?>|!
public abstract operator function dummy(): R|kotlin/Unit|