[FIR] Save warning-level enhanced types to an attribute
#KT-56989
This commit is contained in:
committed by
Space Team
parent
ef96912573
commit
1ecbc094ec
analysis/analysis-api/testData/symbols/symbolByReference/javaMethodWithExternalNotNullAnnotation.txt
Vendored
+1
-1
@@ -24,7 +24,7 @@ KtFunctionSymbol:
|
|||||||
receiverParameter: null
|
receiverParameter: null
|
||||||
returnType: KtFlexibleType:
|
returnType: KtFlexibleType:
|
||||||
annotationsList: []
|
annotationsList: []
|
||||||
type: kotlin/String!
|
type: Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!
|
||||||
symbolKind: CLASS_MEMBER
|
symbolKind: CLASS_MEMBER
|
||||||
typeParameters: []
|
typeParameters: []
|
||||||
valueParameters: []
|
valueParameters: []
|
||||||
|
|||||||
Vendored
+2
-2
@@ -3,12 +3,12 @@ FIR element: FirSimpleFunctionImpl
|
|||||||
FIR source kind: KtRealSourceElementKind
|
FIR source kind: KtRealSourceElementKind
|
||||||
|
|
||||||
FIR element rendered:
|
FIR element rendered:
|
||||||
public final [ResolvedTo(BODY_RESOLVE)] fun test(): R|kotlin/String!| {
|
public final [ResolvedTo(BODY_RESOLVE)] fun test(): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!| {
|
||||||
^test R|/ClassWithExternalAnnotatedMembers.ClassWithExternalAnnotatedMembers|().R|/ClassWithExternalAnnotatedMembers.externalNotNullMethod|()
|
^test R|/ClassWithExternalAnnotatedMembers.ClassWithExternalAnnotatedMembers|().R|/ClassWithExternalAnnotatedMembers.externalNotNullMethod|()
|
||||||
}
|
}
|
||||||
|
|
||||||
FIR FILE:
|
FIR FILE:
|
||||||
FILE: [ResolvedTo(IMPORTS)] usage.kt
|
FILE: [ResolvedTo(IMPORTS)] usage.kt
|
||||||
public final [ResolvedTo(BODY_RESOLVE)] fun test(): R|kotlin/String!| {
|
public final [ResolvedTo(BODY_RESOLVE)] fun test(): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!| {
|
||||||
^test R|/ClassWithExternalAnnotatedMembers.ClassWithExternalAnnotatedMembers|().R|/ClassWithExternalAnnotatedMembers.externalNotNullMethod|()
|
^test R|/ClassWithExternalAnnotatedMembers.ClassWithExternalAnnotatedMembers|().R|/ClassWithExternalAnnotatedMembers.externalNotNullMethod|()
|
||||||
}
|
}
|
||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
public open class NonNullNever : R|kotlin/Any| {
|
public open class NonNullNever : R|kotlin/Any| {
|
||||||
@R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.NEVER|) public open field field: R|kotlin/String?|
|
@R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.NEVER|) public open field field: R|kotlin/String?|
|
||||||
|
|
||||||
@R|MyNullable|() public open fun foo(@R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.NEVER|) x: R|kotlin/String?|, @R|MyNullable|() y: R|kotlin/CharSequence!|): R|kotlin/String!|
|
@R|MyNullable|() public open fun foo(@R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.NEVER|) x: R|kotlin/String?|, @R|MyNullable|() y: R|Enhanced for warning(kotlin/CharSequence?) kotlin/CharSequence!|): R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
public constructor(): R|NonNullNever|
|
public constructor(): R|NonNullNever|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
@R|FieldsAreNullable|() public open class A : R|kotlin/Any| {
|
@R|FieldsAreNullable|() public open class A : R|kotlin/Any| {
|
||||||
public open field field: R|kotlin/String!|
|
public open field field: R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
@R|javax/annotation/Nonnull|() public open field nonNullField: R|@EnhancedNullability kotlin/String|
|
@R|javax/annotation/Nonnull|() public open field nonNullField: R|@EnhancedNullability kotlin/String|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
@R|spr/NonNullApi|() public open class A : R|kotlin/Any| {
|
@R|spr/NonNullApi|() public open class A : R|kotlin/Any| {
|
||||||
public open fun foo(x: R|kotlin/String!|, @R|spr/Nullable|() y: R|kotlin/CharSequence!|): R|kotlin/String!|
|
public open fun foo(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|, @R|spr/Nullable|() y: R|Enhanced for warning(kotlin/CharSequence?) kotlin/CharSequence!|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
@R|spr/ForceFlexibility|() public open fun bar(x: R|kotlin/String!|, @R|javax/annotation/Nonnull|() y: R|@EnhancedNullability kotlin/CharSequence|): R|kotlin/String!|
|
@R|spr/ForceFlexibility|() public open fun bar(x: R|kotlin/String!|, @R|javax/annotation/Nonnull|() y: R|@EnhancedNullability kotlin/CharSequence|): R|kotlin/String!|
|
||||||
|
|
||||||
|
|||||||
+13
-13
@@ -1,55 +1,55 @@
|
|||||||
@R|NonNullApi|() public open class A : R|kotlin/Any| {
|
@R|NonNullApi|() public open class A : R|kotlin/Any| {
|
||||||
public open fun foo1(x: R|kotlin/String!|): R|kotlin/String!|
|
public open fun foo1(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public open fun foo2(x: R|kotlin/String!|): R|kotlin/String!|
|
public open fun foo2(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public open fun foo3(x: R|kotlin/String!|): R|kotlin/String!|
|
public open fun foo3(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
@R|javax/annotation/Nullable|() public open fun bar1(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/String?|
|
@R|javax/annotation/Nullable|() public open fun bar1(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/String?|
|
||||||
|
|
||||||
@R|javax/annotation/Nullable|() public open fun bar2(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/String?|
|
@R|javax/annotation/Nullable|() public open fun bar2(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/String?|
|
||||||
|
|
||||||
public open fun baz(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|kotlin/String!|
|
public open fun baz(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public constructor(): R|A|
|
public constructor(): R|A|
|
||||||
|
|
||||||
}
|
}
|
||||||
@R|NonNullApi|() public abstract interface AInt : R|kotlin/Any| {
|
@R|NonNullApi|() public abstract interface AInt : R|kotlin/Any| {
|
||||||
public abstract fun foo1(x: R|kotlin/String!|): R|kotlin/CharSequence!|
|
public abstract fun foo1(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|): R|Enhanced for warning(@EnhancedNullability kotlin/CharSequence) kotlin/CharSequence!|
|
||||||
|
|
||||||
public abstract fun foo2(x: R|kotlin/String!|): R|kotlin/CharSequence!|
|
public abstract fun foo2(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|): R|Enhanced for warning(@EnhancedNullability kotlin/CharSequence) kotlin/CharSequence!|
|
||||||
|
|
||||||
public abstract fun foo3(x: R|kotlin/String!|): R|kotlin/CharSequence!|
|
public abstract fun foo3(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|): R|Enhanced for warning(@EnhancedNullability kotlin/CharSequence) kotlin/CharSequence!|
|
||||||
|
|
||||||
@R|javax/annotation/Nullable|() public abstract fun bar1(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/CharSequence?|
|
@R|javax/annotation/Nullable|() public abstract fun bar1(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/CharSequence?|
|
||||||
|
|
||||||
@R|javax/annotation/Nullable|() public abstract fun bar2(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/CharSequence?|
|
@R|javax/annotation/Nullable|() public abstract fun bar2(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/CharSequence?|
|
||||||
|
|
||||||
public abstract fun baz(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|kotlin/CharSequence!|
|
public abstract fun baz(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|Enhanced for warning(@EnhancedNullability kotlin/CharSequence) kotlin/CharSequence!|
|
||||||
|
|
||||||
}
|
}
|
||||||
@R|NullableApi|() public open class B : R|A|, R|AInt| {
|
@R|NullableApi|() public open class B : R|A|, R|AInt| {
|
||||||
public open fun foo1(x: R|kotlin/String!|): R|kotlin/String!|
|
public open fun foo1(x: R|Enhanced for warning(kotlin/String?) kotlin/String!|): R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
@R|javax/annotation/Nonnull|() public open fun foo2(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|@EnhancedNullability kotlin/String|
|
@R|javax/annotation/Nonnull|() public open fun foo2(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|@EnhancedNullability kotlin/String|
|
||||||
|
|
||||||
public open fun bar1(x: R|kotlin/String?|): R|kotlin/String?|
|
public open fun bar1(x: R|kotlin/String?|): R|kotlin/String?|
|
||||||
|
|
||||||
public open fun baz(x: R|@EnhancedNullability kotlin/String|): R|kotlin/String!|
|
public open fun baz(x: R|@EnhancedNullability kotlin/String|): R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
public constructor(): R|B|
|
public constructor(): R|B|
|
||||||
|
|
||||||
}
|
}
|
||||||
@R|NonNullApi|() public open class C : R|A|, R|AInt| {
|
@R|NonNullApi|() public open class C : R|A|, R|AInt| {
|
||||||
public open fun foo1(x: R|kotlin/String!|): R|kotlin/String!|
|
public open fun foo1(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public open fun foo2(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|kotlin/String!|
|
public open fun foo2(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public open fun bar1(x: R|kotlin/String?|): R|kotlin/String?|
|
public open fun bar1(x: R|kotlin/String?|): R|kotlin/String?|
|
||||||
|
|
||||||
@R|javax/annotation/Nullable|() public open fun bar2(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/String?|
|
@R|javax/annotation/Nullable|() public open fun bar2(@R|javax/annotation/Nullable|() x: R|kotlin/String?|): R|kotlin/String?|
|
||||||
|
|
||||||
public open fun baz(x: R|@EnhancedNullability kotlin/String|): R|kotlin/String!|
|
public open fun baz(x: R|@EnhancedNullability kotlin/String|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public constructor(): R|C|
|
public constructor(): R|C|
|
||||||
|
|
||||||
|
|||||||
+12
-12
@@ -1,24 +1,24 @@
|
|||||||
@R|NonNullApi|() public open class A : R|kotlin/Any| {
|
@R|NonNullApi|() public open class A : R|kotlin/Any| {
|
||||||
public open field field: R|kotlin/String!|
|
public open field field: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public open fun foo(x: R|kotlin/String!|, @R|javax/annotation/CheckForNull|() y: R|kotlin/CharSequence?|): R|kotlin/String!|
|
public open fun foo(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|, @R|javax/annotation/CheckForNull|() y: R|kotlin/CharSequence?|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
@R|NullableApi|() public open fun foobar(x: R|kotlin/String!|, @R|NonNullApi|() y: R|kotlin/CharSequence!|): R|kotlin/String!|
|
@R|NullableApi|() public open fun foobar(x: R|Enhanced for warning(kotlin/String?) kotlin/String!|, @R|NonNullApi|() y: R|Enhanced for warning(@EnhancedNullability kotlin/CharSequence) kotlin/CharSequence!|): R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
public open fun bar(): R|kotlin/String!|
|
public open fun bar(): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
@R|javax/annotation/Nullable|() public open fun baz(): R|ft<kotlin/collections/MutableList<kotlin/String!>?, kotlin/collections/List<kotlin/String!>?>|
|
@R|javax/annotation/Nullable|() public open fun baz(): R|ft<kotlin/collections/MutableList<kotlin/String!>?, kotlin/collections/List<kotlin/String!>?>|
|
||||||
|
|
||||||
public constructor(): R|A|
|
public constructor(): R|A|
|
||||||
|
|
||||||
@R|NullableApi|() public open inner class B : R|kotlin/Any| {
|
@R|NullableApi|() public open inner class B : R|kotlin/Any| {
|
||||||
public open field field: R|kotlin/String!|
|
public open field field: R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
public open fun foo(x: R|kotlin/String!|, @R|javax/annotation/Nonnull|() y: R|@EnhancedNullability kotlin/CharSequence|): R|kotlin/String!|
|
public open fun foo(x: R|Enhanced for warning(kotlin/String?) kotlin/String!|, @R|javax/annotation/Nonnull|() y: R|@EnhancedNullability kotlin/CharSequence|): R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
@R|NonNullApi|() public open fun foobar(x: R|kotlin/String!|, @R|NullableApi|() y: R|kotlin/CharSequence!|): R|kotlin/String!|
|
@R|NonNullApi|() public open fun foobar(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|, @R|NullableApi|() y: R|Enhanced for warning(kotlin/CharSequence?) kotlin/CharSequence!|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public open fun bar(): R|kotlin/String!|
|
public open fun bar(): R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
@R|javax/annotation/Nullable|() public open fun baz(): R|ft<kotlin/collections/MutableList<kotlin/String!>?, kotlin/collections/List<kotlin/String!>?>|
|
@R|javax/annotation/Nullable|() public open fun baz(): R|ft<kotlin/collections/MutableList<kotlin/String!>?, kotlin/collections/List<kotlin/String!>?>|
|
||||||
|
|
||||||
@@ -26,13 +26,13 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
@R|FieldsAreNullable|() public open inner class C : R|kotlin/Any| {
|
@R|FieldsAreNullable|() public open inner class C : R|kotlin/Any| {
|
||||||
public open field field: R|kotlin/String!|
|
public open field field: R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
public open fun foo(x: R|kotlin/String!|, @R|javax/annotation/Nullable|() y: R|kotlin/CharSequence?|): R|kotlin/String!|
|
public open fun foo(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|, @R|javax/annotation/Nullable|() y: R|kotlin/CharSequence?|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
@R|NullableApi|() public open fun foobar(x: R|kotlin/String!|, @R|javax/annotation/Nullable|() y: R|kotlin/CharSequence?|): R|kotlin/String!|
|
@R|NullableApi|() public open fun foobar(x: R|Enhanced for warning(kotlin/String?) kotlin/String!|, @R|javax/annotation/Nullable|() y: R|kotlin/CharSequence?|): R|Enhanced for warning(kotlin/String?) kotlin/String!|
|
||||||
|
|
||||||
public open fun bar(): R|kotlin/String!|
|
public open fun bar(): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
@R|javax/annotation/Nullable|() public open fun baz(): R|ft<kotlin/collections/MutableList<kotlin/String!>?, kotlin/collections/List<kotlin/String!>?>|
|
@R|javax/annotation/Nullable|() public open fun baz(): R|ft<kotlin/collections/MutableList<kotlin/String!>?, kotlin/collections/List<kotlin/String!>?>|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
@R|javax/annotation/ParametersAreNonnullByDefault|() public open class A : R|kotlin/Any| {
|
@R|javax/annotation/ParametersAreNonnullByDefault|() public open class A : R|kotlin/Any| {
|
||||||
@R|javax/annotation/Nullable|() public open field field: R|kotlin/String?|
|
@R|javax/annotation/Nullable|() public open field field: R|kotlin/String?|
|
||||||
|
|
||||||
public open fun foo(q: R|kotlin/String!|, @R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/CheckForNull|() y: R|kotlin/CharSequence?|): R|kotlin/String!|
|
public open fun foo(q: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|, @R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/CheckForNull|() y: R|kotlin/CharSequence?|): R|kotlin/String!|
|
||||||
|
|
||||||
@R|javax/annotation/Nonnull|() public open fun bar(): R|@EnhancedNullability kotlin/String|
|
@R|javax/annotation/Nonnull|() public open fun bar(): R|@EnhancedNullability kotlin/String|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
public open class A : R|kotlin/Any| {
|
public open class A : R|kotlin/Any| {
|
||||||
@R|javax/annotation/Nullable|() public open field field: R|kotlin/String?|
|
@R|javax/annotation/Nullable|() public open field field: R|kotlin/String?|
|
||||||
|
|
||||||
public open fun foo(q: R|kotlin/String!|, @R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/CheckForNull|() y: R|kotlin/CharSequence?|): R|kotlin/String!|
|
public open fun foo(q: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|, @R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/CheckForNull|() y: R|kotlin/CharSequence?|): R|kotlin/String!|
|
||||||
|
|
||||||
@R|javax/annotation/Nonnull|() public open fun bar(): R|@EnhancedNullability kotlin/String|
|
@R|javax/annotation/Nonnull|() public open fun bar(): R|@EnhancedNullability kotlin/String|
|
||||||
|
|
||||||
|
|||||||
Vendored
+3
-3
@@ -1,11 +1,11 @@
|
|||||||
@R|spr/NonNullApi|() public open class A : R|kotlin/Any| {
|
@R|spr/NonNullApi|() public open class A : R|kotlin/Any| {
|
||||||
public open field field: R|kotlin/String!|
|
public open field field: R|kotlin/String!|
|
||||||
|
|
||||||
public open fun foo(x: R|kotlin/String!|, @R|spr/Nullable|() y: R|kotlin/CharSequence!|): R|kotlin/String!|
|
public open fun foo(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|, @R|spr/Nullable|() y: R|Enhanced for warning(kotlin/CharSequence?) kotlin/CharSequence!|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public open fun bar(): R|kotlin/String!|
|
public open fun bar(): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
@R|spr/Nullable|() public open fun baz(): R|ft<kotlin/collections/MutableList<kotlin/String!>, kotlin/collections/List<kotlin/String!>?>|
|
@R|spr/Nullable|() public open fun baz(): R|ft<Enhanced for warning(kotlin/collections/MutableList<kotlin/String!>?) kotlin/collections/MutableList<kotlin/String!>, kotlin/collections/List<kotlin/String!>?>|
|
||||||
|
|
||||||
public constructor(): R|A|
|
public constructor(): R|A|
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -1,11 +1,11 @@
|
|||||||
public open class A : R|kotlin/Any| {
|
public open class A : R|kotlin/Any| {
|
||||||
public open field field: R|kotlin/String!|
|
public open field field: R|kotlin/String!|
|
||||||
|
|
||||||
public open fun foo(x: R|kotlin/String!|, @R|spr/Nullable|() y: R|kotlin/CharSequence!|): R|kotlin/String!|
|
public open fun foo(x: R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|, @R|spr/Nullable|() y: R|Enhanced for warning(kotlin/CharSequence?) kotlin/CharSequence!|): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
public open fun bar(): R|kotlin/String!|
|
public open fun bar(): R|Enhanced for warning(@EnhancedNullability kotlin/String) kotlin/String!|
|
||||||
|
|
||||||
@R|spr/Nullable|() public open fun baz(): R|ft<kotlin/collections/MutableList<kotlin/String!>, kotlin/collections/List<kotlin/String!>?>|
|
@R|spr/Nullable|() public open fun baz(): R|ft<Enhanced for warning(kotlin/collections/MutableList<kotlin/String!>?) kotlin/collections/MutableList<kotlin/String!>, kotlin/collections/List<kotlin/String!>?>|
|
||||||
|
|
||||||
public constructor(): R|test/A|
|
public constructor(): R|test/A|
|
||||||
|
|
||||||
|
|||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.java.enhancement
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeAttributeWithConeType
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeAttributes
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
|
import org.jetbrains.kotlin.fir.types.renderForDebugging
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
class EnhancedTypeForWarningAttribute(
|
||||||
|
override val coneType: ConeKotlinType,
|
||||||
|
) : ConeAttributeWithConeType<EnhancedTypeForWarningAttribute>() {
|
||||||
|
override fun union(other: EnhancedTypeForWarningAttribute?): EnhancedTypeForWarningAttribute? = null
|
||||||
|
override fun intersect(other: EnhancedTypeForWarningAttribute?): EnhancedTypeForWarningAttribute? = null
|
||||||
|
override fun add(other: EnhancedTypeForWarningAttribute?): EnhancedTypeForWarningAttribute = other ?: this
|
||||||
|
override fun isSubtypeOf(other: EnhancedTypeForWarningAttribute?): Boolean = true
|
||||||
|
override fun toString(): String = "Enhanced for warning(${coneType.renderForDebugging()})"
|
||||||
|
override fun copyWith(newType: ConeKotlinType): EnhancedTypeForWarningAttribute = EnhancedTypeForWarningAttribute(newType)
|
||||||
|
|
||||||
|
override val key: KClass<out EnhancedTypeForWarningAttribute>
|
||||||
|
get() = EnhancedTypeForWarningAttribute::class
|
||||||
|
|
||||||
|
override val keepInInferredDeclarationType: Boolean
|
||||||
|
get() = true
|
||||||
|
}
|
||||||
|
|
||||||
|
val ConeAttributes.enhancedTypeForWarning: EnhancedTypeForWarningAttribute? by ConeAttributes.attributeAccessor<EnhancedTypeForWarningAttribute>()
|
||||||
|
|
||||||
|
val ConeKotlinType.enhancedTypeForWarning: ConeKotlinType?
|
||||||
|
get() = attributes.enhancedTypeForWarning?.coneType
|
||||||
@@ -40,14 +40,10 @@ private fun ConeKotlinType.enhanceConeKotlinType(
|
|||||||
): ConeKotlinType? {
|
): ConeKotlinType? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is ConeFlexibleType -> {
|
is ConeFlexibleType -> {
|
||||||
// Currently, the warnings are left unsupported in K2 (see KT-57307)
|
// We reproduce the K1 behavior: if head type qualifier is for warnings, we totally ignore
|
||||||
// But modulo information for warnings, we reproduce the K1 behavior: if head type qualifier is for warnings, we totally ignore
|
|
||||||
// enhancement on its arguments, too (see JavaTypeEnhancement.enhancePossiblyFlexible).
|
// enhancement on its arguments, too (see JavaTypeEnhancement.enhancePossiblyFlexible).
|
||||||
// It's not totally correct, but tolerable since we would like to avoid excessive breaking changes and the warnings should be
|
// It's not totally correct, but tolerable since we would like to avoid excessive breaking changes and the warnings should be
|
||||||
// anyway reported.
|
// anyway reported.
|
||||||
// TODO: support not loosing information for warnings here, too
|
|
||||||
if (qualifiers(index).isNullabilityQualifierForWarning) return null
|
|
||||||
|
|
||||||
val lowerResult = lowerBound.enhanceInflexibleType(
|
val lowerResult = lowerBound.enhanceInflexibleType(
|
||||||
session, TypeComponentPosition.FLEXIBLE_LOWER, qualifiers, index, subtreeSizes
|
session, TypeComponentPosition.FLEXIBLE_LOWER, qualifiers, index, subtreeSizes
|
||||||
)
|
)
|
||||||
@@ -96,9 +92,36 @@ private fun ConeSimpleKotlinType.enhanceInflexibleType(
|
|||||||
val effectiveQualifiers = qualifiers(index)
|
val effectiveQualifiers = qualifiers(index)
|
||||||
val enhancedTag = lookupTag.enhanceMutability(effectiveQualifiers, position)
|
val enhancedTag = lookupTag.enhanceMutability(effectiveQualifiers, position)
|
||||||
|
|
||||||
// TODO: implement warnings (see KT-57307)
|
val nullabilityFromQualifiers = effectiveQualifiers.nullability.takeIf { shouldEnhance }
|
||||||
val nullabilityFromQualifiers = effectiveQualifiers.nullability
|
|
||||||
.takeIf { shouldEnhance && !effectiveQualifiers.isNullabilityQualifierForWarning }
|
val enhanced = enhanceInflexibleType(
|
||||||
|
session,
|
||||||
|
qualifiers,
|
||||||
|
index,
|
||||||
|
subtreeSizes,
|
||||||
|
isFromDefinitelyNotNullType,
|
||||||
|
effectiveQualifiers.definitelyNotNull,
|
||||||
|
nullabilityFromQualifiers,
|
||||||
|
enhancedTag
|
||||||
|
)
|
||||||
|
|
||||||
|
return if (effectiveQualifiers.isNullabilityQualifierForWarning && enhanced != null) {
|
||||||
|
this.withAttributes(attributes.plus(EnhancedTypeForWarningAttribute(enhanced)))
|
||||||
|
} else {
|
||||||
|
enhanced
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun ConeLookupTagBasedType.enhanceInflexibleType(
|
||||||
|
session: FirSession,
|
||||||
|
qualifiers: IndexedJavaTypeQualifiers,
|
||||||
|
index: Int,
|
||||||
|
subtreeSizes: List<Int>,
|
||||||
|
isFromDefinitelyNotNullType: Boolean,
|
||||||
|
isDefinitelyNotNull: Boolean,
|
||||||
|
nullabilityFromQualifiers: NullabilityQualifier?,
|
||||||
|
enhancedTag: ConeClassifierLookupTag,
|
||||||
|
): ConeSimpleKotlinType? {
|
||||||
val enhancedIsNullable = when (nullabilityFromQualifiers) {
|
val enhancedIsNullable = when (nullabilityFromQualifiers) {
|
||||||
NullabilityQualifier.NULLABLE -> true
|
NullabilityQualifier.NULLABLE -> true
|
||||||
NullabilityQualifier.NOT_NULL -> false
|
NullabilityQualifier.NOT_NULL -> false
|
||||||
@@ -126,7 +149,7 @@ private fun ConeSimpleKotlinType.enhanceInflexibleType(
|
|||||||
val mergedArguments = Array(typeArguments.size) { enhancedArguments[it] ?: typeArguments[it] }
|
val mergedArguments = Array(typeArguments.size) { enhancedArguments[it] ?: typeArguments[it] }
|
||||||
val mergedAttributes = if (shouldAddAttribute) attributes + CompilerConeAttributes.EnhancedNullability else attributes
|
val mergedAttributes = if (shouldAddAttribute) attributes + CompilerConeAttributes.EnhancedNullability else attributes
|
||||||
val enhancedType = enhancedTag.constructType(mergedArguments, enhancedIsNullable, mergedAttributes)
|
val enhancedType = enhancedTag.constructType(mergedArguments, enhancedIsNullable, mergedAttributes)
|
||||||
return if (effectiveQualifiers.definitelyNotNull || (isFromDefinitelyNotNullType && nullabilityFromQualifiers == null))
|
return if (isDefinitelyNotNull || (isFromDefinitelyNotNullType && nullabilityFromQualifiers == null))
|
||||||
ConeDefinitelyNotNullType.create(enhancedType, session.typeContext) ?: enhancedType
|
ConeDefinitelyNotNullType.create(enhancedType, session.typeContext) ?: enhancedType
|
||||||
else
|
else
|
||||||
enhancedType
|
enhancedType
|
||||||
|
|||||||
Reference in New Issue
Block a user