diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10TypeProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10TypeProvider.kt index 28b8d15746e..5fce2a36372 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10TypeProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10TypeProvider.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components import org.jetbrains.kotlin.analysis.api.components.KtBuiltinTypes import org.jetbrains.kotlin.analysis.api.components.KtTypeProvider import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext -import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode +import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* @@ -20,13 +20,13 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.bas import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.getResolutionScope import org.jetbrains.kotlin.analysis.api.descriptors.types.base.KtFe10Type import org.jetbrains.kotlin.analysis.api.descriptors.utils.PublicApproximatorConfiguration +import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken +import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.nameOrAnonymous -import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability -import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* @@ -49,11 +49,8 @@ import org.jetbrains.kotlin.types.error.ErrorType import org.jetbrains.kotlin.types.error.ErrorTypeKind import org.jetbrains.kotlin.types.error.ErrorUtils import org.jetbrains.kotlin.types.typeUtil.builtIns -import org.jetbrains.kotlin.types.typeUtil.isGenericArrayOfTypeParameter import org.jetbrains.kotlin.types.typeUtil.isNothing -import org.jetbrains.kotlin.types.typeUtil.makeNullable import org.jetbrains.kotlin.util.containingNonLocalDeclaration -import org.jetbrains.kotlin.utils.addToStdlib.applyIf internal class KtFe10TypeProvider( override val analysisSession: KtFe10AnalysisSession @@ -83,6 +80,12 @@ internal class KtFe10TypeProvider( ?.toKtType(analysisContext) } + override fun getEnhancedType(type: KtType): KtType? { + require(type is KtFe10Type) + val enhancement = (type.fe10Type as? TypeWithEnhancement)?.enhancement + return enhancement?.toKtType(analysisContext) + } + override fun buildSelfClassType(symbol: KtNamedClassOrObjectSymbol): KtType { val kotlinType = (getSymbolDescriptor(symbol) as? ClassDescriptor)?.defaultType ?: ErrorUtils.createErrorType(ErrorTypeKind.UNRESOLVED_CLASS_TYPE, symbol.nameOrAnonymous.toString()) diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index b6de20b03b5..690baf49905 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -124,6 +124,18 @@ public class Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated exte runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/intLiteral.kt"); } + @Test + @TestMetadata("javaEnhancedType.kt") + public void testJavaEnhancedType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.kt"); + } + + @Test + @TestMetadata("javaEnhancedTypeExternalAnnotation.kt") + public void testJavaEnhancedTypeExternalAnnotation() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.kt"); + } + @Test @TestMetadata("listElement_listOf.kt") public void testListElement_listOf() throws Exception { diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationRenderer/Fe10IdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationRenderer/Fe10IdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java index 931e17bea19..a5d75f6b25d 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationRenderer/Fe10IdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationRenderer/Fe10IdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java @@ -46,6 +46,18 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGene KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("javaEnhancedType.kt") + public void testJavaEnhancedType() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.kt"); + } + + @Test + @TestMetadata("javaEnhancedTypeExternalAnnotation.kt") + public void testJavaEnhancedTypeExternalAnnotation() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.kt"); + } + @Test @TestMetadata("javaMethodWithMultipleTypeParametersBound.kt") public void testJavaMethodWithMultipleTypeParametersBound() throws Exception { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt index 2f53a04435a..b0142b431d6 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt @@ -38,6 +38,7 @@ import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirGetClassCall import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression +import org.jetbrains.kotlin.fir.java.enhancement.EnhancedForWarningConeSubstitutor import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.renderer.FirRenderer import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl @@ -85,6 +86,15 @@ internal class KtFirTypeProvider( return approximatedConeType?.asKtType() } + override fun getEnhancedType(type: KtType): KtType? { + require(type is KtFirType) + val coneType = type.coneType + val substitutor = EnhancedForWarningConeSubstitutor(typeContext) + val enhancedConeType = substitutor.substituteType(coneType) + + return enhancedConeType?.asKtType() + } + override fun buildSelfClassType(symbol: KtNamedClassOrObjectSymbol): KtType { require(symbol is KtFirNamedClassOrObjectSymbol) symbol.firSymbol.lazyResolveToPhase(FirResolvePhase.SUPER_TYPES) diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java index 7921ce6cb7b..1c4d953a213 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -124,6 +124,18 @@ public class FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated ex runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/intLiteral.kt"); } + @Test + @TestMetadata("javaEnhancedType.kt") + public void testJavaEnhancedType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.kt"); + } + + @Test + @TestMetadata("javaEnhancedTypeExternalAnnotation.kt") + public void testJavaEnhancedTypeExternalAnnotation() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.kt"); + } + @Test @TestMetadata("listElement_listOf.kt") public void testListElement_listOf() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index 526676f5a48..7b7b5512d88 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -124,6 +124,18 @@ public class FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated exten runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/intLiteral.kt"); } + @Test + @TestMetadata("javaEnhancedType.kt") + public void testJavaEnhancedType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.kt"); + } + + @Test + @TestMetadata("javaEnhancedTypeExternalAnnotation.kt") + public void testJavaEnhancedTypeExternalAnnotation() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.kt"); + } + @Test @TestMetadata("listElement_listOf.kt") public void testListElement_listOf() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeDependentAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeDependentAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java index a70b200281a..2865c56c6e6 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeDependentAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeDependentAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java @@ -46,6 +46,18 @@ public class FirIdeDependentAnalysisSourceModuleSymbolRenderingByReferenceTestGe KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("javaEnhancedType.kt") + public void testJavaEnhancedType() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.kt"); + } + + @Test + @TestMetadata("javaEnhancedTypeExternalAnnotation.kt") + public void testJavaEnhancedTypeExternalAnnotation() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.kt"); + } + @Test @TestMetadata("javaMethodWithMultipleTypeParametersBound.kt") public void testJavaMethodWithMultipleTypeParametersBound() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java index 494a81cc6ad..bfeb06566e4 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java @@ -46,6 +46,18 @@ public class FirIdeNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGener KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("javaEnhancedType.kt") + public void testJavaEnhancedType() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.kt"); + } + + @Test + @TestMetadata("javaEnhancedTypeExternalAnnotation.kt") + public void testJavaEnhancedTypeExternalAnnotation() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.kt"); + } + @Test @TestMetadata("javaMethodWithMultipleTypeParametersBound.kt") public void testJavaMethodWithMultipleTypeParametersBound() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index 6b790c5817d..28338d00a1e 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -124,6 +124,18 @@ public class FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerate runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/intLiteral.kt"); } + @Test + @TestMetadata("javaEnhancedType.kt") + public void testJavaEnhancedType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.kt"); + } + + @Test + @TestMetadata("javaEnhancedTypeExternalAnnotation.kt") + public void testJavaEnhancedTypeExternalAnnotation() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.kt"); + } + @Test @TestMetadata("listElement_listOf.kt") public void testListElement_listOf() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirStandaloneNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirStandaloneNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java index 42c2d3d2618..e63b4942086 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirStandaloneNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirStandaloneNormalAnalysisSourceModuleSymbolRenderingByReferenceTestGenerated.java @@ -46,6 +46,18 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolRenderingByReferenceTe KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("javaEnhancedType.kt") + public void testJavaEnhancedType() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.kt"); + } + + @Test + @TestMetadata("javaEnhancedTypeExternalAnnotation.kt") + public void testJavaEnhancedTypeExternalAnnotation() throws Exception { + runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.kt"); + } + @Test @TestMetadata("javaMethodWithMultipleTypeParametersBound.kt") public void testJavaMethodWithMultipleTypeParametersBound() throws Exception { diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtTypeProvider.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtTypeProvider.kt index d6d77f25e48..9a5e61d0b94 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtTypeProvider.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtTypeProvider.kt @@ -23,6 +23,8 @@ public abstract class KtTypeProvider : KtAnalysisSessionComponent() { public abstract fun approximateToSubPublicDenotableType(type: KtType, approximateLocalTypes: Boolean): KtType? + public abstract fun getEnhancedType(type: KtType): KtType? + public abstract fun buildSelfClassType(symbol: KtNamedClassOrObjectSymbol): KtType public abstract fun commonSuperType(types: Collection): KtType? @@ -74,6 +76,13 @@ public interface KtTypeProviderMixIn : KtAnalysisSessionMixIn { public fun KtType.approximateToSuperPublicDenotableOrSelf(approximateLocalTypes: Boolean): KtType = withValidityAssertion { approximateToSuperPublicDenotable(approximateLocalTypes) ?: this } + /** + * Returns a warning-level enhanced type for [KtType] if it is present. Otherwise, returns `null`. + */ + public fun KtType.getEnhancedType(): KtType? = withValidityAssertion { analysisSession.typeProvider.getEnhancedType(this) } + + public fun KtType.getEnhancedTypeOrSelf(): KtType? = withValidityAssertion { getEnhancedType() ?: this } + public fun KtNamedClassOrObjectSymbol.buildSelfClassType(): KtType = withValidityAssertion { analysisSession.typeProvider.buildSelfClassType(this) } diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/KtRendererTypeApproximator.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/KtRendererTypeApproximator.kt index 612d73fe192..e65fe26e028 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/KtRendererTypeApproximator.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/KtRendererTypeApproximator.kt @@ -16,6 +16,8 @@ public interface KtRendererTypeApproximator { public object TO_DENOTABLE : KtRendererTypeApproximator { context(KtAnalysisSession) override fun approximateType(type: KtType, position: Variance): KtType { + type.getEnhancedType()?.let { return it } + return when (position) { Variance.INVARIANT -> type Variance.IN_VARIANCE -> type.approximateToSubPublicDenotableOrSelf(approximateLocalTypes = false) diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.kt new file mode 100644 index 00000000000..b6e1c1d54a9 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.kt @@ -0,0 +1,24 @@ +// FILE: androidx/annotation/RecentlyNonNull.java +package androidx.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target({ElementType.PARAMETER, ElementType.TYPE}) +public @interface RecentlyNonNull { +} + +// FILE: androidx/annotation/A.java +package androidx.annotation; + +public class A { + @RecentlyNonNull + public String bar(@RecentlyNonNull String string) { + return ""; + } +} + +// FILE: main.kt +import androidx.annotation.A + +fun test(a: A) = a.bar() \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.txt new file mode 100644 index 00000000000..bcf310294b3 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedType.txt @@ -0,0 +1,2 @@ +expression: a.bar() +type: kotlin.String \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.descriptors.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.descriptors.txt new file mode 100644 index 00000000000..bf28450c0fe --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.descriptors.txt @@ -0,0 +1,2 @@ +expression: a.externalNotNullMethod() +type: kotlin.String! diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.kt new file mode 100644 index 00000000000..87e0a91f852 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.kt @@ -0,0 +1,20 @@ +// FILE: ClassWithExternalAnnotatedMembers.java +public class ClassWithExternalAnnotatedMembers { + public String externalNotNullMethod() { + return ""; + } +} + +// FILE: annotations.xml + + + + + + + + +// FILE: main.kt +import ClassWithExternalAnnotatedMembers + +fun test(a: ClassWithExternalAnnotatedMembers) = a.externalNotNullMethod() \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.txt new file mode 100644 index 00000000000..3ecb0e27cdf --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/javaEnhancedTypeExternalAnnotation.txt @@ -0,0 +1,2 @@ +expression: a.externalNotNullMethod() +type: kotlin.String diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.kt b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.kt new file mode 100644 index 00000000000..486a712273b --- /dev/null +++ b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.kt @@ -0,0 +1,24 @@ +// FILE: androidx/annotation/RecentlyNonNull.java +package androidx.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target({ElementType.PARAMETER, ElementType.TYPE}) +public @interface RecentlyNonNull { +} + +// FILE: androidx/annotation/A.java +package androidx.annotation; + +public class A { + @RecentlyNonNull + public String bar(@RecentlyNonNull String string) { + return ""; + } +} + +// FILE: main.kt +import androidx.annotation.A + +fun test(a: A) = a.bar() \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.txt b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.txt new file mode 100644 index 00000000000..1aac2434788 --- /dev/null +++ b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedType.txt @@ -0,0 +1 @@ +open fun bar(string: kotlin.String): kotlin.String \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.descriptors.txt b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.descriptors.txt new file mode 100644 index 00000000000..a1ee995fc6a --- /dev/null +++ b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.descriptors.txt @@ -0,0 +1 @@ +open fun externalNotNullMethod(): kotlin.String? \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.kt b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.kt new file mode 100644 index 00000000000..7865997537f --- /dev/null +++ b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.kt @@ -0,0 +1,20 @@ +// FILE: ClassWithExternalAnnotatedMembers.java +public class ClassWithExternalAnnotatedMembers { + public String externalNotNullMethod() { + return ""; + } +} + +// FILE: annotations.xml + + + + + + + + +// FILE: main.kt +import ClassWithExternalAnnotatedMembers + +fun test(a: ClassWithExternalAnnotatedMembers) = a.externalNotNullMethod() \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.txt b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.txt new file mode 100644 index 00000000000..65b26b2efbb --- /dev/null +++ b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/symbolRenderingByReference/javaEnhancedTypeExternalAnnotation.txt @@ -0,0 +1 @@ +open fun externalNotNullMethod(): kotlin.String