From a3c1f4ea1221d9f5d92a8176666dbec49a8d0773 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Fri, 1 Dec 2023 10:07:29 +0100 Subject: [PATCH] Fix rendering of platform type for value parameters #KT-63979 Fixed --- .../types/renderers/KtFlexibleTypeRenderer.kt | 16 ++++- .../memberScope/enumClass.pretty.txt | 2 +- .../enumClassWithAbstractMembers.pretty.txt | 2 +- .../enumClassWithFinalMembers.pretty.txt | 2 +- .../enumEntryInitializer.pretty.txt | 2 +- ...yInitializerWithFinalEnumMember.pretty.txt | 2 +- ...InitializerWithOverriddenMember.pretty.txt | 2 +- .../memberScope/java.lang.String.pretty.txt | 4 +- .../scopeProvider/memberScope/javaClass.kt | 4 ++ .../memberScope/javaClass.pretty.txt | 2 + .../scopeProvider/memberScope/javaClass.txt | 60 +++++++++++++++++++ .../Implement_java_util_Collection.pretty.txt | 4 +- 12 files changed, 89 insertions(+), 13 deletions(-) diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/types/renderers/KtFlexibleTypeRenderer.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/types/renderers/KtFlexibleTypeRenderer.kt index c39473dda7e..77c18407ede 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/types/renderers/KtFlexibleTypeRenderer.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/types/renderers/KtFlexibleTypeRenderer.kt @@ -67,11 +67,21 @@ public interface KtFlexibleTypeRenderer { lower.nullability == KtTypeNullability.NON_NULLABLE && upper.nullability == KtTypeNullability.NULLABLE ) { - if ((lower !is KtNonErrorClassType || lower.ownTypeArguments.isEmpty()) && - (upper !is KtNonErrorClassType || upper.ownTypeArguments.isEmpty()) - ) { + if (lower !is KtNonErrorClassType && upper !is KtNonErrorClassType) { return true } + if (lower is KtNonErrorClassType && upper is KtNonErrorClassType) { + val lowerOwnTypeArguments = lower.ownTypeArguments + val upperOwnTypeArguments = upper.ownTypeArguments + if (lowerOwnTypeArguments.size == upperOwnTypeArguments.size) { + for ((index, ktTypeProjection) in lowerOwnTypeArguments.withIndex()) { + if (upperOwnTypeArguments[index].type != ktTypeProjection.type) { + return false + } + } + return true + } + } } return false } diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClass.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClass.pretty.txt index 3ca6559dd13..6e8caadb59d 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClass.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClass.pretty.txt @@ -13,7 +13,7 @@ val name: kotlin.String val ordinal: kotlin.Int -fun getDeclaringClass(): (java.lang.Class..java.lang.Class?) +fun getDeclaringClass(): java.lang.Class! fun finalize() diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithAbstractMembers.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithAbstractMembers.pretty.txt index b46d7a1b2d5..75b3125fef8 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithAbstractMembers.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithAbstractMembers.pretty.txt @@ -17,7 +17,7 @@ val name: kotlin.String val ordinal: kotlin.Int -fun getDeclaringClass(): (java.lang.Class..java.lang.Class?) +fun getDeclaringClass(): java.lang.Class! fun finalize() diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithFinalMembers.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithFinalMembers.pretty.txt index 54f533ca437..94767a3c14b 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithFinalMembers.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumClassWithFinalMembers.pretty.txt @@ -17,7 +17,7 @@ val name: kotlin.String val ordinal: kotlin.Int -fun getDeclaringClass(): (java.lang.Class..java.lang.Class?) +fun getDeclaringClass(): java.lang.Class! fun finalize() diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializer.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializer.pretty.txt index d731c2b40d3..02888035bff 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializer.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializer.pretty.txt @@ -15,7 +15,7 @@ val name: kotlin.String val ordinal: kotlin.Int -fun getDeclaringClass(): (java.lang.Class..java.lang.Class?) +fun getDeclaringClass(): java.lang.Class! fun finalize() diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithFinalEnumMember.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithFinalEnumMember.pretty.txt index d5a738ec234..175242dfb59 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithFinalEnumMember.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithFinalEnumMember.pretty.txt @@ -17,7 +17,7 @@ val name: kotlin.String val ordinal: kotlin.Int -fun getDeclaringClass(): (java.lang.Class..java.lang.Class?) +fun getDeclaringClass(): java.lang.Class! fun finalize() diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithOverriddenMember.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithOverriddenMember.pretty.txt index 97e673a285c..f3e903a6e26 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithOverriddenMember.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/enumEntryInitializerWithOverriddenMember.pretty.txt @@ -15,7 +15,7 @@ val name: kotlin.String val ordinal: kotlin.Int -fun getDeclaringClass(): (java.lang.Class..java.lang.Class?) +fun getDeclaringClass(): java.lang.Class! fun finalize() diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/java.lang.String.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/java.lang.String.pretty.txt index 01b522738e3..3b0feda8be7 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/java.lang.String.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/java.lang.String.pretty.txt @@ -96,9 +96,9 @@ open fun replaceFirst(regex: kotlin.String!, replacement: kotlin.String!): kotli open fun replaceAll(regex: kotlin.String!, replacement: kotlin.String!): kotlin.String! -open fun split(regex: kotlin.String!, limit: kotlin.Int): (kotlin.Array..kotlin.Array?) +open fun split(regex: kotlin.String!, limit: kotlin.Int): kotlin.Array! -open fun split(regex: kotlin.String!): (kotlin.Array..kotlin.Array?) +open fun split(regex: kotlin.String!): kotlin.Array! open fun toLowerCase(locale: java.util.Locale!): kotlin.String! diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.kt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.kt index 93eb87256c8..d1a3469bb68 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.kt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.kt @@ -43,4 +43,8 @@ public class JavaClass extends SuperClass { public void hello() { System.out.println("hello"); } + + public void method(Class ... classes) { + + } } diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.pretty.txt index 953391ce019..6cf65554515 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.pretty.txt @@ -1,5 +1,7 @@ open fun hello() +open fun method(vararg classes: java.lang.Class!) + @java.lang.Override open fun getActualRandomNumber(): kotlin.Int diff --git a/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.txt b/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.txt index 1a443949a44..556c3f3af67 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/memberScope/javaClass.txt @@ -34,6 +34,66 @@ KtFunctionSymbol: getContainingModule: KtSourceModule "Sources of main" deprecationStatus: null +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: /JavaClass.method + contextReceivers: [] + contractEffects: [] + hasStableParameterNames: false + isActual: false + isBuiltinFunctionInvoke: false + isExpect: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: OPEN + name: method + origin: JAVA + receiverParameter: null + returnType: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T) + ] + valueParameters: [ + KtValueParameterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + generatedPrimaryConstructorProperty: null + hasDefaultValue: false + isCrossinline: false + isExtension: false + isImplicitLambdaParameter: false + isNoinline: false + isVararg: true + name: classes + origin: JAVA + receiverParameter: null + returnType: KtFlexibleType: + annotationsList: [] + type: ft>, java/lang/Class>?> + symbolKind: LOCAL + typeParameters: [] + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + ] + visibility: Public + getDispatchReceiver(): KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: JavaClass + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + KtFunctionSymbol: annotationsList: [ java/lang/Override() diff --git a/analysis/analysis-api/testData/components/scopeProvider/substitutionOverridesUnwrapping/Implement_java_util_Collection.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/substitutionOverridesUnwrapping/Implement_java_util_Collection.pretty.txt index 0aa8b306ade..278df49651b 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/substitutionOverridesUnwrapping/Implement_java_util_Collection.pretty.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/substitutionOverridesUnwrapping/Implement_java_util_Collection.pretty.txt @@ -6,9 +6,9 @@ operator fun contains(p0: kotlin.Any!): kotlin.Boolean abstract operator fun iterator(): kotlin.collections.MutableIterator -fun toArray(): (kotlin.Array..kotlin.Array?) +fun toArray(): kotlin.Array! -fun toArray(p0: (kotlin.Array<(T & kotlin.Any..T?)>..kotlin.Array?)): (kotlin.Array<(T & kotlin.Any..T?)>..kotlin.Array?) +fun toArray(p0: kotlin.Array<(T & kotlin.Any..T?)>!): kotlin.Array<(T & kotlin.Any..T?)>! abstract fun add(p0: test.SomeClass!): kotlin.Boolean