diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt index aa28b69b0ff..8ad6b71ddfe 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt @@ -45,7 +45,6 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragmentProvider import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider -import org.jetbrains.kotlin.types.SubstitutingScopeProviderImpl class CommonAnalysisParameters( val metadataPartProviderFactory: (ModuleContent<*>) -> MetadataPartProvider @@ -171,7 +170,6 @@ private fun createContainerToResolveCommonCode( configureCommonSpecificComponents() useInstance(metadataPartProvider) - useImpl() val metadataFinderFactory = ServiceManager.getService( moduleContext.project, diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java index fb369f71721..45baa9c7b9b 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -8086,11 +8086,6 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/generics/argumentsForT.kt"); } - @TestMetadata("capturedTypeInInputPosition.kt") - public void testCapturedTypeInInputPosition() throws Exception { - runTest("compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.kt"); - } - @TestMetadata("commonSupertypeContravariant.kt") public void testCommonSupertypeContravariant() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/commonSupertypeContravariant.kt"); @@ -8930,11 +8925,6 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssign.kt"); } - @TestMetadata("setterProjectedOutAssignFromJava.kt") - public void testSetterProjectedOutAssignFromJava() throws Exception { - runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.kt"); - } - @TestMetadata("setterProjectedOutNoPlusAssign.kt") public void testSetterProjectedOutNoPlusAssign() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutNoPlusAssign.kt"); @@ -17383,11 +17373,6 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.kt"); } - @TestMetadata("implicitAndExplicitThis.kt") - public void testImplicitAndExplicitThis() throws Exception { - runTest("compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.kt"); - } - @TestMetadata("implicitReceiverProperty.kt") public void testImplicitReceiverProperty() throws Exception { runTest("compiler/testData/diagnostics/tests/resolve/implicitReceiverProperty.kt"); @@ -18105,11 +18090,6 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/samConversions/GenericSubstitutionKT.kt"); } - @TestMetadata("kt25290.kt") - public void testKt25290() throws Exception { - runTest("compiler/testData/diagnostics/tests/samConversions/kt25290.kt"); - } - @TestMetadata("OverloadPriority.kt") public void testOverloadPriority() throws Exception { runTest("compiler/testData/diagnostics/tests/samConversions/OverloadPriority.kt"); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index 614bd267a9f..6d35c51fe54 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -46,7 +46,6 @@ import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory -import org.jetbrains.kotlin.types.SubstitutingScopeProviderImpl fun createContainerForLazyResolveWithJava( jvmPlatform: TargetPlatform, @@ -128,7 +127,6 @@ fun StorageComponentContainer.configureJavaSpecificComponents( ) useImpl() - useImpl() } fun ComponentProvider.initJvmBuiltInsForTopDownAnalysis() { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor.java index 748c9861aa8..ad254f40667 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableDescriptor.java @@ -81,7 +81,8 @@ public class LocalVariableDescriptor extends VariableDescriptorWithInitializerIm @NotNull @Override public LocalVariableDescriptor substitute(@NotNull TypeSubstitutor substitutor) { - return this; + if (substitutor.isEmpty()) return this; + throw new UnsupportedOperationException(); // TODO } @Override diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/diagnosticUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/diagnosticUtils.kt index b3236140ef1..c6a4957c83f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/diagnosticUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/diagnosticUtils.kt @@ -38,7 +38,6 @@ import org.jetbrains.kotlin.resolve.calls.inference.wrapWithCapturingSubstitutio import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.types.SubstitutingScopeProvider import org.jetbrains.kotlin.types.TypeConstructorSubstitution import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny @@ -78,9 +77,7 @@ fun ResolutionContext<*>.reportTypeMismatchDueToTypeProjection( TypeConstructorSubstitution .create(receiverType) .wrapWithCapturingSubstitution(needApproximation = false) - .buildSubstitutor().apply { - setSubstitutingScopeProvider(SubstitutingScopeProvider.DEFAULT) - }.let { callableDescriptor.substitute(it) } ?: return false + .buildSubstitutor().let { callableDescriptor.substitute(it) } ?: return false val nonApproximatedExpectedType = correspondingNotApproximatedTypeByDescriptor(substitutedDescriptor) ?: return false if (!TypeUtils.contains(nonApproximatedExpectedType) { it.isCaptured() }) return false diff --git a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt index f13b6a77188..016acb338b2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt @@ -34,7 +34,6 @@ import org.jetbrains.kotlin.resolve.calls.tower.KotlinResolutionStatelessCallbac import org.jetbrains.kotlin.resolve.checkers.ExperimentalUsageChecker import org.jetbrains.kotlin.resolve.lazy.* import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory -import org.jetbrains.kotlin.types.SubstitutingScopeProviderImpl import org.jetbrains.kotlin.types.expressions.DeclarationScopeProviderForLocalClassifierAnalyzer import org.jetbrains.kotlin.types.expressions.LocalClassDescriptorHolder import org.jetbrains.kotlin.types.expressions.LocalLazyDeclarationResolver @@ -118,7 +117,6 @@ fun createContainerForBodyResolve( useImpl() useImpl() - useImpl() } fun createContainerForLazyBodyResolve( @@ -138,7 +136,6 @@ fun createContainerForLazyBodyResolve( useImpl() useImpl() useImpl() - useImpl() } fun createContainerForLazyLocalClassifierAnalyzer( @@ -169,7 +166,6 @@ fun createContainerForLazyLocalClassifierAnalyzer( useImpl() useImpl() - useImpl() useInstance(statementFilter) } @@ -187,7 +183,6 @@ fun createContainerForLazyResolve( configureStandardResolveComponents() useInstance(declarationProviderFactory) - useImpl() targetEnvironment.configure(this) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index 7bf482f9d3d..1ceb21ad25c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -911,8 +911,7 @@ public class DescriptorResolver { container instanceof ClassDescriptor && ((ClassDescriptor) container).isExpect(), modifierList != null && PsiUtilsKt.hasActualModifier(modifierList), modifierList != null && modifierList.hasModifier(KtTokens.EXTERNAL_KEYWORD), - propertyInfo.getHasDelegate(), - new SubstitutingScopeProviderImpl(languageVersionSettings) + propertyInfo.getHasDelegate() ); List typeParameterDescriptors; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinToResolvedCallTransformer.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinToResolvedCallTransformer.kt index 795dc5ca040..75d02c765a5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinToResolvedCallTransformer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinToResolvedCallTransformer.kt @@ -8,8 +8,6 @@ package org.jetbrains.kotlin.resolve.calls.tower import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl -import org.jetbrains.kotlin.descriptors.impl.PropertySetterDescriptorImpl import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.* @@ -25,13 +23,12 @@ import org.jetbrains.kotlin.resolve.calls.components.AdditionalDiagnosticReporte import org.jetbrains.kotlin.resolve.calls.components.isVararg import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext import org.jetbrains.kotlin.resolve.calls.context.CallPosition -import org.jetbrains.kotlin.resolve.calls.inference.approximateCapturedTypes import org.jetbrains.kotlin.resolve.calls.inference.buildResultingSubstitutor import org.jetbrains.kotlin.resolve.calls.inference.components.FreshVariableNewTypeSubstitutor import org.jetbrains.kotlin.resolve.calls.inference.components.NewTypeSubstitutor import org.jetbrains.kotlin.resolve.calls.inference.model.* import org.jetbrains.kotlin.resolve.calls.inference.substitute -import org.jetbrains.kotlin.resolve.calls.inference.substituteAndApproximateIntegerLiteralTypes +import org.jetbrains.kotlin.resolve.calls.inference.substituteAndApproximateCapturedTypes import org.jetbrains.kotlin.resolve.calls.model.* import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.makeNullableTypeIfSafeReceiver import org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus @@ -41,13 +38,14 @@ import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor +import org.jetbrains.kotlin.resolve.constants.IntegerValueTypeConstant import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver -import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.scopes.receivers.CastImplicitClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.types.checker.NewCapturedType import org.jetbrains.kotlin.types.expressions.DataFlowAnalyzer import org.jetbrains.kotlin.types.expressions.DoubleColonExpressionResolver import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices @@ -295,14 +293,15 @@ class KotlinToResolvedCallTransformer( // todo external argument val argumentExpression = valueArgument.getArgumentExpression() ?: continue - updateRecordedType(argumentExpression, parameter, newContext) + updateRecordedType(argumentExpression, parameter, newContext, resolvedCall.isReallySuccess()) } } fun updateRecordedType( expression: KtExpression, parameter: ValueParameterDescriptor?, - context: BasicCallResolutionContext + context: BasicCallResolutionContext, + reportErrorForTypeMismatch: Boolean ): KotlinType? { val deparenthesized = expression.let { KtPsiUtil.getLastElementDeparenthesized(it, context.statementFilter) @@ -319,6 +318,9 @@ class KotlinToResolvedCallTransformer( updatedType = argumentTypeResolver.updateResultArgumentTypeIfNotDenotable(context, deparenthesized) ?: updatedType } + + var reportErrorDuringTypeCheck = reportErrorForTypeMismatch + if (parameter != null && ImplicitIntegerCoercion.isEnabledForParameter(parameter)) { val argumentCompileTimeValue = context.trace[BindingContext.COMPILE_TIME_VALUE, deparenthesized] if (argumentCompileTimeValue != null && argumentCompileTimeValue.parameters.isConvertableConstVal) { @@ -327,6 +329,7 @@ class KotlinToResolvedCallTransformer( updatedType = argumentTypeResolver.updateResultArgumentTypeIfNotDenotable( context.trace, context.statementFilter, context.expectedType, generalNumberType, expression ) + reportErrorDuringTypeCheck = true } } @@ -334,7 +337,7 @@ class KotlinToResolvedCallTransformer( updatedType = updateRecordedTypeForArgument(updatedType, recordedType, expression, context) - dataFlowAnalyzer.checkType(updatedType, deparenthesized, context, false) + dataFlowAnalyzer.checkType(updatedType, deparenthesized, context, reportErrorDuringTypeCheck) return updatedType } @@ -687,44 +690,32 @@ class NewResolvedCallImpl( @Suppress("UNCHECKED_CAST") resultingDescriptor = run { val candidateDescriptor = resolvedCallAtom.candidateDescriptor - val containsIntegerLiteralTypes = resolvedCallAtom.candidateDescriptor.returnType?.contains { - it.constructor is IntegerLiteralTypeConstructor - } ?: false + val containsCapturedTypes = resolvedCallAtom.candidateDescriptor.returnType?.contains { it is NewCapturedType } ?: false + val containsIntegerLiteralTypes = resolvedCallAtom.candidateDescriptor.returnType?.contains { it.constructor is IntegerLiteralTypeConstructor } ?: false when { candidateDescriptor is FunctionDescriptor || - (candidateDescriptor is PropertyDescriptor && candidateDescriptor.typeParameters.isNotEmpty() || containsIntegerLiteralTypes) -> + (candidateDescriptor is PropertyDescriptor && (candidateDescriptor.typeParameters.isNotEmpty() || containsCapturedTypes || containsIntegerLiteralTypes)) -> // this code is very suspicious. Now it is very useful for BE, because they cannot do nothing with captured types, // but it seems like temporary solution. - candidateDescriptor.substituteAndApproximateIntegerLiteralTypes(resolvedCallAtom.substitutor).let { - if (substitutor != null) { - it.substitute(substitutor) - } else { - it - } - } - + candidateDescriptor.substitute(resolvedCallAtom.substitutor).substituteAndApproximateCapturedTypes( + substitutor ?: FreshVariableNewTypeSubstitutor.Empty + ) else -> candidateDescriptor } } as D typeArguments = resolvedCallAtom.substitutor.freshVariables.map { - (substitutor ?: FreshVariableNewTypeSubstitutor.Empty).safeSubstitute(it.defaultType) + val substituted = (substitutor ?: FreshVariableNewTypeSubstitutor.Empty).safeSubstitute(it.defaultType) + TypeApproximator(substituted.constructor.builtIns) + .approximateToSuperType(substituted, TypeApproximatorConfiguration.IntegerLiteralsTypesApproximation) + ?: substituted } calculateExpectedTypeForSamConvertedArgumentMap(substitutor) } - fun approximateCapturedTypesAndHackSetters() { - val approximator = TypeApproximator(resultingDescriptor.builtIns) - resultingDescriptor = resultingDescriptor.hackSettersAccordingToCapturedOutTypes() - resultingDescriptor = resultingDescriptor.approximateCapturedTypes() - typeArguments = typeArguments.map { - approximator.approximateToSuperType(it, TypeApproximatorConfiguration.CapturedAndIntegerLiteralsTypesApproximation) ?: it - } - } - fun getExpectedTypeForSamConvertedArgument(valueArgument: ValueArgument): UnwrappedType? = expedtedTypeForSamConvertedArgumentMap?.get(valueArgument) @@ -817,41 +808,3 @@ fun NewResolvedCallImpl<*>.hasInferredReturnType(): Boolean { val returnType = this.resultingDescriptor.returnType ?: return false return !returnType.contains { ErrorUtils.isUninferredParameter(it) } } - -fun ResolvedCall<*>.approximateCapturedTypesAndHackSetters() { - when (this) { - is NewResolvedCallImpl<*> -> approximateCapturedTypesAndHackSetters() - is NewVariableAsFunctionResolvedCallImpl -> { - functionCall.approximateCapturedTypesAndHackSetters() - variableCall.approximateCapturedTypesAndHackSetters() - } - else -> throw UnsupportedOperationException("Illegal resolved call: $this") - } -} - -fun D.hackSettersAccordingToCapturedOutTypes(): D { - return when (this) { - is PropertyDescriptorImpl -> hackSettersAccordingToCapturedOutTypes() as D - else -> this - } -} - -private fun PropertyDescriptorImpl.hackSettersAccordingToCapturedOutTypes(): PropertyDescriptor { - val setter = setter ?: return this - val valueParameter = setter.valueParameters.first() - val inputType = valueParameter.type - val approximatedType = TypeApproximator(builtIns).approximateToSubType( - inputType.unwrap(), - TypeApproximatorConfiguration.CapturedAndIntegerLiteralsTypesApproximation - ) ?: return this - - val newProperty = newCopyBuilder().setOriginal(original).build() as PropertyDescriptorImpl - - val newSetter = with(setter) { - PropertySetterDescriptorImpl(newProperty, annotations, modality, visibility, isDefault, isExternal, isInline, kind, original, source) - } - newSetter.initialize(PropertySetterDescriptorImpl.createSetterParameter(newSetter, approximatedType, setter.annotations)) - newProperty.initialize(getter, newSetter, backingField, delegateField) - newProperty.isSetterProjectedOut = true - return newProperty -} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt index ea676f0a304..0aee6b6e18b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt @@ -382,7 +382,6 @@ class PSICallResolver( return cache.getOrPut(implicitReceiver) { context.transformToReceiverWithSmartCastInfo(implicitReceiver.value) - .prepareReceiverRegardingCaptureTypes() } } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt index ecb6ab5e145..2750f5d521c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt @@ -110,7 +110,6 @@ class ResolvedAtomCompleter( kotlinToResolvedCallTransformer.reportDiagnostics(topLevelCallContext, topLevelTrace, resolvedCall, diagnostics) - resolvedCall.approximateCapturedTypesAndHackSetters() return resolvedCall } @@ -156,7 +155,9 @@ class ResolvedAtomCompleter( .replaceBindingTrace(topLevelTrace) val argumentExpression = resultValueArgument.valueArgument.getArgumentExpression() ?: continue - kotlinToResolvedCallTransformer.updateRecordedType(argumentExpression, parameter = null, context = newContext) + kotlinToResolvedCallTransformer.updateRecordedType( + argumentExpression, parameter = null, context = newContext, reportErrorForTypeMismatch = true + ) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyClassContext.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyClassContext.kt index 0fdb6790ce1..fb37ff382a0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyClassContext.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyClassContext.kt @@ -24,12 +24,10 @@ import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.storage.StorageManager -import org.jetbrains.kotlin.types.SubstitutingScopeProvider import org.jetbrains.kotlin.types.WrappedTypeFactory interface LazyClassContext { val declarationScopeProvider: DeclarationScopeProvider - val substitutingScopeProvider: SubstitutingScopeProvider val storageManager: StorageManager val trace: BindingTrace diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSession.java index 6213f45e639..613a11b9815 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSession.java @@ -44,7 +44,6 @@ import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor; import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import org.jetbrains.kotlin.resolve.scopes.MemberScope; import org.jetbrains.kotlin.storage.*; -import org.jetbrains.kotlin.types.SubstitutingScopeProvider; import org.jetbrains.kotlin.types.WrappedTypeFactory; import org.jetbrains.kotlin.utils.SmartList; @@ -82,7 +81,6 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext { private DelegationFilter delegationFilter; private WrappedTypeFactory wrappedTypeFactory; private PlatformDiagnosticSuppressor platformDiagnosticSuppressor; - private SubstitutingScopeProvider substitutingScopeProvider; private final SyntheticResolveExtension syntheticResolveExtension; @@ -148,17 +146,6 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext { this.platformDiagnosticSuppressor = platformDiagnosticSuppressor; } - @NotNull - @Override - public SubstitutingScopeProvider getSubstitutingScopeProvider() { - return substitutingScopeProvider; - } - - @Inject - public void setSubstitutingScopeProvider(SubstitutingScopeProvider substitutingScopeProvider) { - this.substitutingScopeProvider = substitutingScopeProvider; - } - // Only calls from injectors expected @Deprecated public ResolveSession( diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java index 755b5862b52..06513e7087f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -113,7 +113,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes ) { super(c.getStorageManager(), containingDeclaration, name, KotlinSourceElementKt.toSourceElement(classLikeInfo.getCorrespondingClassOrObject()), - isExternal, c.getSubstitutingScopeProvider() + isExternal ); this.c = c; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/SubstitutingScopeProviderImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/SubstitutingScopeProviderImpl.kt deleted file mode 100644 index c1214cd242c..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/SubstitutingScopeProviderImpl.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. 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.types - -import org.jetbrains.kotlin.config.LanguageFeature -import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.resolve.calls.inference.OldCapturedTypeCreator -import org.jetbrains.kotlin.resolve.scopes.MemberScope -import org.jetbrains.kotlin.resolve.scopes.SubstitutingScope -import org.jetbrains.kotlin.types.typesApproximation.OldCaptureTypeApproximator - -class SubstitutingScopeProviderImpl(private val languageVersionSettings: LanguageVersionSettings) : SubstitutingScopeProvider { - override val isNewInferenceEnabled: Boolean get() = languageVersionSettings.supportsFeature(LanguageFeature.NewInference) - - override fun createSubstitutingScope(workerScope: MemberScope, givenSubstitutor: TypeSubstitutor): SubstitutingScope { - return SubstitutingScope(workerScope, givenSubstitutor, this) - } - - override fun provideApproximator(): CapturedTypeApproximator { - return if (isNewInferenceEnabled) { - NoCapturedTypeApproximator - } else { - OldCaptureTypeApproximator() - } - } - - override fun provideCapturedTypeCreator(): CapturedTypeCreator { - return if (isNewInferenceEnabled) { - NoCapturedTypeCreator - } else { - OldCapturedTypeCreator - } - } -} - -object NoCapturedTypeCreator : CapturedTypeCreator { - override fun createCapturedType(typeProjection: TypeProjection): TypeProjection { - return typeProjection - } -} - -object NoCapturedTypeApproximator : CapturedTypeApproximator { - override fun approximateCapturedTypes(typeProjection: TypeProjection?, approximateContravariant: Boolean): TypeProjection? { - return typeProjection - } -} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java index ed37ce267a9..5c811498c48 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java @@ -964,7 +964,6 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { boolean result = true; KtExpression reportOn = expression != null ? expression : expressionWithParenthesis; - KtExpression originalReportOn = reportOn; if (reportOn instanceof KtQualifiedExpression) { KtExpression selector = ((KtQualifiedExpression) reportOn).getSelectorExpression(); if (selector != null) @@ -975,19 +974,14 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variable; PropertySetterDescriptor setter = propertyDescriptor.getSetter(); if (propertyDescriptor.isSetterProjectedOut()) { - trace.report(SETTER_PROJECTED_OUT.on(originalReportOn, propertyDescriptor)); + trace.report(SETTER_PROJECTED_OUT.on(reportOn, propertyDescriptor)); result = false; } else if (setter != null) { ResolvedCall resolvedCall = CallUtilKt.getResolvedCall(expressionWithParenthesis, context.trace.getBindingContext()); assert resolvedCall != null : "Call is not resolved for property setter: " + PsiUtilsKt.getElementTextWithContext(expressionWithParenthesis); - if (((PropertyDescriptor)resolvedCall.getResultingDescriptor()).isSetterProjectedOut()) { - trace.report(SETTER_PROJECTED_OUT.on(originalReportOn, propertyDescriptor)); - result = false; - } else { - checkPropertySetterCall(context.replaceBindingTrace(trace), setter, resolvedCall, reportOn); - } + checkPropertySetterCall(context.replaceBindingTrace(trace), setter, resolvedCall, reportOn); } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt index e3b9b93a518..de12cedf135 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt @@ -50,7 +50,6 @@ import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope import org.jetbrains.kotlin.storage.StorageManager -import org.jetbrains.kotlin.types.SubstitutingScopeProvider import org.jetbrains.kotlin.types.WrappedTypeFactory class LocalClassifierAnalyzer( @@ -66,8 +65,7 @@ class LocalClassifierAnalyzer( private val supertypeLoopChecker: SupertypeLoopChecker, private val languageVersionSettings: LanguageVersionSettings, private val delegationFilter: DelegationFilter, - private val wrappedTypeFactory: WrappedTypeFactory, - private val substitutingScopeProvider: SubstitutingScopeProvider + private val wrappedTypeFactory: WrappedTypeFactory ) { fun processClassOrObject( scope: LexicalWritableScope?, @@ -100,8 +98,7 @@ class LocalClassifierAnalyzer( languageVersionSettings, SyntheticResolveExtension.getInstance(project), delegationFilter, - wrappedTypeFactory, - substitutingScopeProvider + wrappedTypeFactory ), analyzerServices ) @@ -129,8 +126,7 @@ class LocalClassDescriptorHolder( val languageVersionSettings: LanguageVersionSettings, val syntheticResolveExtension: SyntheticResolveExtension, val delegationFilter: DelegationFilter, - val wrappedTypeFactory: WrappedTypeFactory, - val substitutingScopeProvider: SubstitutingScopeProvider + val wrappedTypeFactory: WrappedTypeFactory ) { // We do not need to synchronize here, because this code is used strictly from one thread private var classDescriptor: ClassDescriptor? = null @@ -170,7 +166,6 @@ class LocalClassDescriptorHolder( override val syntheticResolveExtension = this@LocalClassDescriptorHolder.syntheticResolveExtension override val delegationFilter: DelegationFilter = this@LocalClassDescriptorHolder.delegationFilter override val wrappedTypeFactory: WrappedTypeFactory = this@LocalClassDescriptorHolder.wrappedTypeFactory - override val substitutingScopeProvider: SubstitutingScopeProvider = this@LocalClassDescriptorHolder.substitutingScopeProvider }, containingDeclaration, classOrObject.nameAsSafeName, diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/InferenceUtils.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/InferenceUtils.kt index 6cac42b40e6..e7528ab7bb1 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/InferenceUtils.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/InferenceUtils.kt @@ -60,20 +60,6 @@ val CallableDescriptor.returnTypeOrNothing: UnwrappedType fun TypeSubstitutor.substitute(type: UnwrappedType): UnwrappedType = safeSubstitute(type, Variance.INVARIANT).unwrap() -fun CallableDescriptor.substituteAndApproximateIntegerLiteralTypes(substitutor: NewTypeSubstitutor): CallableDescriptor { - val wrappedSubstitution = object : TypeSubstitution() { - override fun get(key: KotlinType): TypeProjection? = null - - override fun prepareTopLevelType(topLevelType: KotlinType, position: Variance) = - substitutor.safeSubstitute(topLevelType.unwrap()).let { substitutedType -> - TypeApproximator(builtIns).approximateToSuperType(substitutedType, TypeApproximatorConfiguration.IntegerLiteralsTypesApproximation) - ?: substitutedType - } - } - - return substitute(TypeSubstitutor.create(wrappedSubstitution)) -} - fun CallableDescriptor.substitute(substitutor: NewTypeSubstitutor): CallableDescriptor { val wrappedSubstitution = object : TypeSubstitution() { override fun get(key: KotlinType): TypeProjection? = null @@ -82,25 +68,18 @@ fun CallableDescriptor.substitute(substitutor: NewTypeSubstitutor): CallableDesc return substitute(TypeSubstitutor.create(wrappedSubstitution)) } -fun D.approximateCapturedTypes(): D { - val approximator = TypeApproximator(builtIns) - var anyChanges = false +fun CallableDescriptor.substituteAndApproximateCapturedTypes(substitutor: NewTypeSubstitutor): CallableDescriptor { val wrappedSubstitution = object : TypeSubstitution() { override fun get(key: KotlinType): TypeProjection? = null - override fun prepareTopLevelType(topLevelType: KotlinType, position: Variance): KotlinType { - val type = topLevelType.unwrap() - val approximatedType = - approximator.approximateToSuperType(type, TypeApproximatorConfiguration.CapturedAndIntegerLiteralsTypesApproximation) - if (approximatedType != null) { - anyChanges = true + override fun prepareTopLevelType(topLevelType: KotlinType, position: Variance) = + substitutor.safeSubstitute(topLevelType.unwrap()).let { substitutedType -> + TypeApproximator(builtIns).approximateToSuperType(substitutedType, TypeApproximatorConfiguration.CapturedAndIntegerLiteralsTypesApproximation) + ?: substitutedType } - return approximatedType as? KotlinType ?: type - } } - val substitutedDescriptor = substitute(TypeSubstitutor.create(wrappedSubstitution)) as D - return if (anyChanges) substitutedDescriptor else this + return substitute(TypeSubstitutor.create(wrappedSubstitution)) } -internal fun MutableList.trimToSize(newSize: Int) = subList(newSize, size).clear() \ No newline at end of file +internal fun MutableList.trimToSize(newSize: Int) = subList(newSize, size).clear() diff --git a/compiler/resolution/src/org/jetbrains/kotlin/types/TypeApproximator.kt b/compiler/resolution/src/org/jetbrains/kotlin/types/TypeApproximator.kt index 58592e5e654..22f58767ba9 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/types/TypeApproximator.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/types/TypeApproximator.kt @@ -21,10 +21,14 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator import org.jetbrains.kotlin.resolve.calls.components.ClassicTypeSystemContextForCS +import org.jetbrains.kotlin.resolve.calls.inference.model.TypeVariableTypeConstructor +import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor import org.jetbrains.kotlin.types.TypeApproximatorConfiguration.IntersectionStrategy.* +import org.jetbrains.kotlin.types.checker.NewCapturedType import org.jetbrains.kotlin.types.checker.NewCapturedTypeConstructor import org.jetbrains.kotlin.types.model.* import org.jetbrains.kotlin.types.model.CaptureStatus.* +import org.jetbrains.kotlin.types.typeUtil.builtIns open class TypeApproximatorConfiguration { @@ -424,8 +428,6 @@ abstract class AbstractTypeApproximator(val ctx: TypeSystemInferenceExtensionCon if (argument.isStarProjection()) continue val argumentType = argument.getType()//.unwrap() - val argumentTypeIsNullable = argumentType.asSimpleType()?.isMarkedNullable() ?: false - val effectiveVariance = AbstractTypeChecker.effectiveVariance(parameter.getVariance(), argument.getVariance()) when (effectiveVariance) { null -> { @@ -489,7 +491,7 @@ abstract class AbstractTypeApproximator(val ctx: TypeSystemInferenceExtensionCon */ if (argumentType.typeConstructor() is NewCapturedTypeConstructor) { val subType = approximateToSubType(argumentType, conf, depth) ?: continue@loop - if (!subType.isTrivialSub(argumentTypeIsNullable)) { + if (!subType.isTrivialSub()) { newArguments[index] = createTypeArgument(subType, TypeVariance.IN) continue@loop } @@ -500,7 +502,7 @@ abstract class AbstractTypeApproximator(val ctx: TypeSystemInferenceExtensionCon if (approximatedSuperType.isTrivialSuper()) { val approximatedSubType = approximateToSubType(argumentType, conf, depth) ?: continue@loop // seems like this is never null - if (!approximatedSubType.isTrivialSub(argumentTypeIsNullable)) { + if (!approximatedSubType.isTrivialSub()) { newArguments[index] = createTypeArgument(approximatedSubType, TypeVariance.IN) continue@loop } @@ -529,12 +531,7 @@ abstract class AbstractTypeApproximator(val ctx: TypeSystemInferenceExtensionCon private fun KotlinTypeMarker.isTrivialSuper() = upperBoundIfFlexible().isNullableAny() // Nothing or Nothing! - private fun KotlinTypeMarker.isTrivialSub(originalIsNullable: Boolean) = lowerBoundIfFlexible().let { - if (originalIsNullable) - it.isNothing() || it.isNullableNothing() - else - it.isNothing() - } + private fun KotlinTypeMarker.isTrivialSub() = lowerBoundIfFlexible().isNothing() } // //internal fun KotlinTypeMarker.typeDepth() = diff --git a/compiler/testData/diagnostics/tests/callableReference/sam.kt b/compiler/testData/diagnostics/tests/callableReference/sam.kt index 20febc37ae6..e733d9060f1 100644 --- a/compiler/testData/diagnostics/tests/callableReference/sam.kt +++ b/compiler/testData/diagnostics/tests/callableReference/sam.kt @@ -1,6 +1,4 @@ // FILE: test/GenericSam.java -// !WITH_NEW_INFERENCE -// NI_EXPECTED_FILE package test; @@ -18,7 +16,7 @@ fun f3() = java.lang.Runnable::class fun f4() = java.lang.Runnable::run fun f5() = GenericSam::class -fun f6() = GenericSam<*>::invoke +fun f6() = GenericSam<*>::invoke fun f7() = test.GenericSam::class fun f8() = test.GenericSam::invoke diff --git a/compiler/testData/diagnostics/tests/callableReference/sam.ni.txt b/compiler/testData/diagnostics/tests/callableReference/sam.ni.txt deleted file mode 100644 index 51df5db7bd1..00000000000 --- a/compiler/testData/diagnostics/tests/callableReference/sam.ni.txt +++ /dev/null @@ -1,28 +0,0 @@ -package - -public fun f1(): kotlin.reflect.KClass -public fun f2(): kotlin.reflect.KFunction1 -public fun f3(): kotlin.reflect.KClass -public fun f4(): kotlin.reflect.KFunction1 -public fun f5(): kotlin.reflect.KClass> -public fun f6(): kotlin.reflect.KFunction0<[ERROR : ]> -public fun f7(): kotlin.reflect.KClass> -public fun f8(): kotlin.reflect.KFunction2, @kotlin.ParameterName(name = "t") kotlin.String!, kotlin.Unit> -public fun g1(): kotlin.reflect.KClass -public fun g2(): kotlin.reflect.KFunction0 -public fun g3(): kotlin.reflect.KClass -public fun g4(): kotlin.reflect.KFunction0 -public fun g5(): kotlin.reflect.KClass> -public fun g6(): kotlin.reflect.KFunction1<@kotlin.ParameterName(name = "t") kotlin.String!, kotlin.Unit> -public fun g7(): kotlin.reflect.KClass> -public fun g8(): kotlin.reflect.KFunction1<@kotlin.ParameterName(name = "t") kotlin.String!, kotlin.Unit> - -package test { - - public interface GenericSam { - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public abstract operator fun invoke(/*0*/ t: T!): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } -} diff --git a/compiler/testData/diagnostics/tests/collectionLiterals/collectionLiteralsWithVarargs.kt b/compiler/testData/diagnostics/tests/collectionLiterals/collectionLiteralsWithVarargs.kt index 8459ffc2188..2da19fbbd30 100644 --- a/compiler/testData/diagnostics/tests/collectionLiterals/collectionLiteralsWithVarargs.kt +++ b/compiler/testData/diagnostics/tests/collectionLiterals/collectionLiteralsWithVarargs.kt @@ -37,5 +37,5 @@ annotation class AnnArray(val a: Array) @AnnArray(*["/"]) fun testArray() {} -@Ann1([""]) +@Ann1([""]) fun testVararg() {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/elvisNotProcessed.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/elvisNotProcessed.kt index 03e5d977eca..e17ee5b0c38 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/elvisNotProcessed.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/elvisNotProcessed.kt @@ -34,6 +34,6 @@ val bbb = null ?: ( l() ?: null) val bbbb = ( l() ?: null) ?: ( l() ?: null) fun f(x : Long?): Long { - var a = x ?: (fun() {} ?: fun() {}) + var a = x ?: (fun() {} ?: fun() {}) return a } diff --git a/compiler/testData/diagnostics/tests/functionLiterals/ExpectedParametersTypesMismatch.kt b/compiler/testData/diagnostics/tests/functionLiterals/ExpectedParametersTypesMismatch.kt index 601b19e0e55..cc3dc836f84 100644 --- a/compiler/testData/diagnostics/tests/functionLiterals/ExpectedParametersTypesMismatch.kt +++ b/compiler/testData/diagnostics/tests/functionLiterals/ExpectedParametersTypesMismatch.kt @@ -26,7 +26,7 @@ fun test1() { x, y -> "" } foo1 { - -> 42 + -> 42 } @@ -40,6 +40,6 @@ fun test1() { x -> "" } foo2 { - -> 42 + -> 42 } } diff --git a/compiler/testData/diagnostics/tests/functionLiterals/return/LocalReturnsWithExplicitReturnType.kt b/compiler/testData/diagnostics/tests/functionLiterals/return/LocalReturnsWithExplicitReturnType.kt index 955b61ef6f6..ea7ca3be1ac 100644 --- a/compiler/testData/diagnostics/tests/functionLiterals/return/LocalReturnsWithExplicitReturnType.kt +++ b/compiler/testData/diagnostics/tests/functionLiterals/return/LocalReturnsWithExplicitReturnType.kt @@ -1,10 +1,10 @@ // !WITH_NEW_INFERENCE fun test(a: Int) { runf@{ - if (a > 0) return@f "" + if (a > 0) return@f "" return@f 1 } - run{ "" } + run{ "" } run{ 1 } } diff --git a/compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.kt b/compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.kt deleted file mode 100644 index 408d89fd5b5..00000000000 --- a/compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.kt +++ /dev/null @@ -1,20 +0,0 @@ -// !WITH_NEW_INFERENCE -// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION - -interface Inv -class InvImpl : Inv -open class OpenInv - -class A { - fun > foo(x: F) = 1 - -} -class B { - fun > foo(x: F) = 1 - -} - -fun test(a: A, b: B) { - a.foo(OpenInv()) - b.foo(InvImpl()) -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.txt b/compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.txt deleted file mode 100644 index d79bf9b7038..00000000000 --- a/compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.txt +++ /dev/null @@ -1,39 +0,0 @@ -package - -public fun test(/*0*/ a: A, /*1*/ b: B): kotlin.Unit - -public final class A { - public constructor A() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final fun > foo(/*0*/ x: F): kotlin.Int - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public final class B { - public constructor B() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final fun > foo(/*0*/ x: F): kotlin.Int - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public interface Inv { - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public final class InvImpl : Inv { - public constructor InvImpl() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public open class OpenInv { - public constructor OpenInv() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/innerUncheckedCast.kt b/compiler/testData/diagnostics/tests/generics/innerClasses/innerUncheckedCast.kt index 7e12d47c989..d766cbcf95a 100644 --- a/compiler/testData/diagnostics/tests/generics/innerClasses/innerUncheckedCast.kt +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/innerUncheckedCast.kt @@ -20,7 +20,7 @@ class Outer { } if (y is Outer<*>.Inner<*>) { - y.prop.checkType { _() } + y.prop.checkType { _() } } } diff --git a/compiler/testData/diagnostics/tests/generics/projectionsScope/projectedOutSmartCast.kt b/compiler/testData/diagnostics/tests/generics/projectionsScope/projectedOutSmartCast.kt index 8bbceb6bf69..32877a619a6 100644 --- a/compiler/testData/diagnostics/tests/generics/projectionsScope/projectedOutSmartCast.kt +++ b/compiler/testData/diagnostics/tests/generics/projectionsScope/projectedOutSmartCast.kt @@ -9,7 +9,7 @@ fun foo(x: Any?, y: C<*>) { y.bindTo("") if (x is C<*>) { - x.bindTo("") + x.bindTo("") with(x) { bindTo("") } @@ -17,7 +17,7 @@ fun foo(x: Any?, y: C<*>) { with(x) { if (this is C<*>) { - bindTo("") + bindTo("") } } } diff --git a/compiler/testData/diagnostics/tests/generics/projectionsScope/typeMismatchInLambda.kt b/compiler/testData/diagnostics/tests/generics/projectionsScope/typeMismatchInLambda.kt index 8c48d77c1f9..be388ac63a8 100644 --- a/compiler/testData/diagnostics/tests/generics/projectionsScope/typeMismatchInLambda.kt +++ b/compiler/testData/diagnostics/tests/generics/projectionsScope/typeMismatchInLambda.kt @@ -14,14 +14,14 @@ class A { fun test(a: A, z: Out) { a.foo { val x: String = 1 // Should be no TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS - "" + "" } - a.bar { Out() } + a.bar { Out() } a.bar { Out() } - a.bar { z.id() } + a.bar { z.id() } a.foo { - z.foobar(if (1 > 2) return@foo "" else "") - "" + z.foobar(if (1 > 2) return@foo "" else "") + "" } } diff --git a/compiler/testData/diagnostics/tests/generics/projectionsScope/typeParameterBounds.kt b/compiler/testData/diagnostics/tests/generics/projectionsScope/typeParameterBounds.kt index 9f5b7458d9c..e5d8d0dc248 100644 --- a/compiler/testData/diagnostics/tests/generics/projectionsScope/typeParameterBounds.kt +++ b/compiler/testData/diagnostics/tests/generics/projectionsScope/typeParameterBounds.kt @@ -14,14 +14,14 @@ class A { fun foo2(a: A, b: A) { a.foo1(Out()) - a.foo1<Out>(Out()) + a.foo1<Out>(Out()) a.foo1(Out()) a.foo1(Out()) - a.foo2(Inv()) + a.foo2(Inv()) a.foo2(Inv()) - a.foo2<Inv>(Inv()) + a.foo2<Inv>(Inv()) a.foo3(In()) a.foo3(In()) @@ -31,13 +31,13 @@ fun foo2(a: A, b: A) { b.foo1(Out()) b.foo1>(Out()) - b.foo2(Inv()) + b.foo2(Inv()) b.foo2(Inv()) - b.foo2<Inv>(Inv()) + b.foo2<Inv>(Inv()) b.foo3(In()) - b.foo3<In>(In()) + b.foo3<In>(In()) b.foo3(In()) b.foo3(In()) diff --git a/compiler/testData/diagnostics/tests/generics/starProjections/invalid.kt b/compiler/testData/diagnostics/tests/generics/starProjections/invalid.kt index 8ea991b53aa..6c61d165fb9 100644 --- a/compiler/testData/diagnostics/tests/generics/starProjections/invalid.kt +++ b/compiler/testData/diagnostics/tests/generics/starProjections/invalid.kt @@ -13,8 +13,8 @@ class Inv2<T : Inv2>(val x: T) fun main(a: A<*>, j: JavaClass<*>, i2: Inv2<*>) { // Probably it's too restrictive to suppose star projection type here as Any?, // but looks like we can refine it later - a.foo() checkType { _() } - j.foo() checkType { _() } + a.foo() checkType { _() } + j.foo() checkType { _() } i2.x checkType { _() } j.bar(1, 2, Any()) diff --git a/compiler/testData/diagnostics/tests/generics/varProjection/setterNotProjectedOutAssign.kt b/compiler/testData/diagnostics/tests/generics/varProjection/setterNotProjectedOutAssign.kt index b72c5e14314..3a985d9f749 100644 --- a/compiler/testData/diagnostics/tests/generics/varProjection/setterNotProjectedOutAssign.kt +++ b/compiler/testData/diagnostics/tests/generics/varProjection/setterNotProjectedOutAssign.kt @@ -5,6 +5,6 @@ interface Tr { } fun test(t: Tr<*>) { - t.v = t + t.v = t t.v checkType { _>() } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssign.kt b/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssign.kt index 96de789cab7..d2d740e37ec 100644 --- a/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssign.kt +++ b/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssign.kt @@ -7,9 +7,8 @@ interface Tr { } fun test(t: Tr<*>) { - t.v = null!! - t.v = "" - t.v = null - + t.v = null!! + t.v = "" + t.v = null t.v checkType { _() } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.kt b/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.kt deleted file mode 100644 index e6460450cae..00000000000 --- a/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.kt +++ /dev/null @@ -1,16 +0,0 @@ -// !WITH_NEW_INFERENCE -// Issue: KT-31594 - -// FILE: Tr.java - -public class Tr { - public T getV() { return null; } - public void setV(T value) {} -} - -// FILE: main.kt - -fun test(t: Tr<*>) { - t.v = null - t.v = "" -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.txt b/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.txt deleted file mode 100644 index c8bda9b4c28..00000000000 --- a/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.txt +++ /dev/null @@ -1,12 +0,0 @@ -package - -public fun test(/*0*/ t: Tr<*>): kotlin.Unit - -public open class Tr { - public constructor Tr() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open fun getV(): T! - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open fun setV(/*0*/ value: T!): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} diff --git a/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutNoPlusAssign.kt b/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutNoPlusAssign.kt index c59994c6b28..b2046304041 100644 --- a/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutNoPlusAssign.kt +++ b/compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutNoPlusAssign.kt @@ -7,5 +7,5 @@ interface Tr { fun test(t: Tr) { // resolved as t.v = t.v + null!!, where type of right operand is String, // so TYPE_MISMATCH: String is not <: of Captured(out String) - t.v += null!! + t.v += null!! } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/capturedTypes/captureForNullableTypes.kt b/compiler/testData/diagnostics/tests/inference/capturedTypes/captureForNullableTypes.kt index 1f1c83f0fbf..87da35a3390 100644 --- a/compiler/testData/diagnostics/tests/inference/capturedTypes/captureForNullableTypes.kt +++ b/compiler/testData/diagnostics/tests/inference/capturedTypes/captureForNullableTypes.kt @@ -5,15 +5,15 @@ fun bar(a: Array): Array = null!! fun test1(a: Array) { - val r: Array = bar(a) - val t = bar(a) - t checkType { _>() } + val r: Array = bar(a) + val t = bar(a) + t checkType { _>() } } fun foo(l: Array): Array> = null!! fun test2(a: Array) { - val r: Array> = foo(a) - val t = foo(a) - t checkType { _>>() } + val r: Array> = foo(a) + val t = foo(a) + t checkType { _>>() } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/commonSystem/cstFromNullableChildAndNonParameterizedType.kt b/compiler/testData/diagnostics/tests/inference/commonSystem/cstFromNullableChildAndNonParameterizedType.kt index 1eb687629b7..efa24dd7bea 100644 --- a/compiler/testData/diagnostics/tests/inference/commonSystem/cstFromNullableChildAndNonParameterizedType.kt +++ b/compiler/testData/diagnostics/tests/inference/commonSystem/cstFromNullableChildAndNonParameterizedType.kt @@ -16,5 +16,5 @@ fun test1(a: ParameterizedChild?, b: Child): Base = myRun { } fun test2(a: S?, b: S): S = myRun { - select(a, b) + select(a, b) } diff --git a/compiler/testData/diagnostics/tests/inference/regressions/kt2283.kt b/compiler/testData/diagnostics/tests/inference/regressions/kt2283.kt index 4dabb621a93..7ead3c4ae8b 100644 --- a/compiler/testData/diagnostics/tests/inference/regressions/kt2283.kt +++ b/compiler/testData/diagnostics/tests/inference/regressions/kt2283.kt @@ -10,5 +10,5 @@ fun Foo.map(f: (A) -> B): Foo = object : Foo fun foo() { val l: Foo = object : Foo {} - val m: Foo = l.map { ppp -> 1 } + val m: Foo = l.map { ppp -> 1 } } diff --git a/compiler/testData/diagnostics/tests/j+k/sam/enhancedSamConstructor.kt b/compiler/testData/diagnostics/tests/j+k/sam/enhancedSamConstructor.kt index b08bed6f734..472abc6bf48 100644 --- a/compiler/testData/diagnostics/tests/j+k/sam/enhancedSamConstructor.kt +++ b/compiler/testData/diagnostics/tests/j+k/sam/enhancedSamConstructor.kt @@ -18,11 +18,11 @@ public interface J2 extends J { fun main() { J { s: String -> s} // should be prohibited, because SAM value parameter has nullable type J { "" + it.length } - J { null } - J { it?.length?.toString() } + J { null } + J { it?.length?.toString() } J2 { s: String -> s} J2 { "" + it.length } - J2 { null } - J2 { it?.length?.toString() } + J2 { null } + J2 { it?.length?.toString() } } diff --git a/compiler/testData/diagnostics/tests/j+k/samByProjectedType/genericInReturnType.kt b/compiler/testData/diagnostics/tests/j+k/samByProjectedType/genericInReturnType.kt index 7574984c51e..d5cbb3e3f9b 100644 --- a/compiler/testData/diagnostics/tests/j+k/samByProjectedType/genericInReturnType.kt +++ b/compiler/testData/diagnostics/tests/j+k/samByProjectedType/genericInReturnType.kt @@ -34,7 +34,7 @@ fun main() { } A.baz { - x -> x.hashCode() + x -> x.hashCode() } val block: (String) -> Any? = { diff --git a/compiler/testData/diagnostics/tests/kt13401.kt b/compiler/testData/diagnostics/tests/kt13401.kt index 3989d8d1d37..e9ccffb6966 100644 --- a/compiler/testData/diagnostics/tests/kt13401.kt +++ b/compiler/testData/diagnostics/tests/kt13401.kt @@ -14,5 +14,5 @@ class Owner { fun getT() = u } - fun foo(arg: Inner<*>) = arg.getT() + fun foo(arg: Inner<*>) = arg.getT() } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/kt13401.ni.txt b/compiler/testData/diagnostics/tests/kt13401.ni.txt index fc8d60240d2..879c71b95a9 100644 --- a/compiler/testData/diagnostics/tests/kt13401.ni.txt +++ b/compiler/testData/diagnostics/tests/kt13401.ni.txt @@ -3,7 +3,7 @@ package public final class Owner { public constructor Owner() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final fun foo(/*0*/ arg: Owner.Inner<*>): T + public final fun foo(/*0*/ arg: Owner.Inner<*>): kotlin.Any? public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String @@ -26,7 +26,7 @@ public interface Rec> { public interface Super { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open fun foo(/*0*/ p: Rec<*>): Rec>>>>> + public open fun foo(/*0*/ p: Rec<*>): Rec<*> public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } diff --git a/compiler/testData/diagnostics/tests/operatorRem/noWarningForModFromBuiltinsWhenApi1_0_after.kt b/compiler/testData/diagnostics/tests/operatorRem/noWarningForModFromBuiltinsWhenApi1_0_after.kt index 66b5b196c6f..74e040d2fff 100644 --- a/compiler/testData/diagnostics/tests/operatorRem/noWarningForModFromBuiltinsWhenApi1_0_after.kt +++ b/compiler/testData/diagnostics/tests/operatorRem/noWarningForModFromBuiltinsWhenApi1_0_after.kt @@ -29,9 +29,9 @@ class WithMod { operator fun mod(other: WithMod) = this fun test() { - val a = this % this + val a = this % this var b = this.mod(this) - b %= this + b %= this } } @@ -43,6 +43,6 @@ fun builtIns(b: Byte, s: Short) { var a = 1 % 2 a %= 3 1.mod(2) - b % s - 1.0 % 2.0 + b % s + 1.0 % 2.0 } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/operatorRem/noWarningForModFromBuiltinsWhenApi1_0_before.kt b/compiler/testData/diagnostics/tests/operatorRem/noWarningForModFromBuiltinsWhenApi1_0_before.kt index ba596d33333..26591343801 100644 --- a/compiler/testData/diagnostics/tests/operatorRem/noWarningForModFromBuiltinsWhenApi1_0_before.kt +++ b/compiler/testData/diagnostics/tests/operatorRem/noWarningForModFromBuiltinsWhenApi1_0_before.kt @@ -29,9 +29,9 @@ class WithMod { operator fun mod(other: WithMod) = this fun test() { - val a = this % this + val a = this % this var b = this.mod(this) - b %= this + b %= this } } @@ -43,6 +43,6 @@ fun builtIns(b: Byte, s: Short) { var a = 1 % 2 a %= 3 1.mod(2) - b % s - 1.0 % 2.0 + b % s + 1.0 % 2.0 } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/platformTypes/notNullTypeParameter/methodTypeParameter.kt b/compiler/testData/diagnostics/tests/platformTypes/notNullTypeParameter/methodTypeParameter.kt index b3cfaecde22..7629ccbec8c 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/notNullTypeParameter/methodTypeParameter.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/notNullTypeParameter/methodTypeParameter.kt @@ -15,11 +15,5 @@ fun test() { A.bar(null, "") A.bar(null, "") - A.bar("", "") - A.bar(null, A.platformString()) - - val x: String? = null - A.bar(x, "") - A.bar(null, "") } diff --git a/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.kt b/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.kt index 6b103f7e083..8fa76806ef3 100644 --- a/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.kt +++ b/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.kt @@ -2,7 +2,7 @@ // !DIAGNOSTICS: -UNUSED_PARAMETER fun test(a: Int, b: Boolean) { - bar(a.foo(b)) + bar(a.foo(b)) } fun T.foo(l: (T) -> R): R = TODO() diff --git a/compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.kt b/compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.kt deleted file mode 100644 index dd78dcf4a14..00000000000 --- a/compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.kt +++ /dev/null @@ -1,29 +0,0 @@ -// !LANGUAGE: -NewInference -// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION -// !WITH_NEW_INFERENCE - -abstract class A> { - val x: X = TODO() - - fun getGetX(): X = TODO() -} - -class B : A>() - -class C : A() - -interface X { - fun foo() -} - -fun B<*>.checkValueArguments() { - this.x.foo() - x.foo() - - this.getGetX().foo() - getGetX().foo() -} - -fun C.test() { - x.foo() -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.txt b/compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.txt deleted file mode 100644 index 2e32585f593..00000000000 --- a/compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.txt +++ /dev/null @@ -1,38 +0,0 @@ -package - -public fun B<*>.checkValueArguments(): kotlin.Unit -public fun C.test(): kotlin.Unit - -public abstract class A> { - public constructor A>() - public final val x: X - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final fun getGetX(): X - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public final class B : A> { - public constructor B() - public final override /*1*/ /*fake_override*/ val x: X - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final override /*1*/ /*fake_override*/ fun getGetX(): X - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public final class C : A { - public constructor C() - public final override /*1*/ /*fake_override*/ val x: X - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final override /*1*/ /*fake_override*/ fun getGetX(): X - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public interface X { - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public abstract fun foo(): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} diff --git a/compiler/testData/diagnostics/tests/resolve/specialConstructions/constantsInIf.kt b/compiler/testData/diagnostics/tests/resolve/specialConstructions/constantsInIf.kt index a25eabd0684..2cabddea8fd 100644 --- a/compiler/testData/diagnostics/tests/resolve/specialConstructions/constantsInIf.kt +++ b/compiler/testData/diagnostics/tests/resolve/specialConstructions/constantsInIf.kt @@ -8,7 +8,7 @@ fun test() { 2 }) - bar(1 ?: 2) + bar(1 ?: 2) } fun bar(s: String) = s \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/samConversions/kt25290.kt b/compiler/testData/diagnostics/tests/samConversions/kt25290.kt deleted file mode 100644 index 854776fbe1d..00000000000 --- a/compiler/testData/diagnostics/tests/samConversions/kt25290.kt +++ /dev/null @@ -1,29 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_PARAMETER -// !WITH_NEW_INFERENCE - -// FILE: JavaFace.java -public interface JavaFace { - void singleMethod(); -} - -// FILE: JavaFaceUser.java -public class JavaFaceUser { - public void use1(JavaFace face) {} - public void use2(JavaFace face) {} -} - -// FILE: KotlinSamUser.kt -fun JavaFaceUser.useOut() { - use1 {} - use2 {} -} - -fun JavaFaceUser.useIn() { - use1 {} - use2 {} -} - -fun JavaFaceUser.useInv() { - use1 {} - use2 {} -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/samConversions/kt25290.txt b/compiler/testData/diagnostics/tests/samConversions/kt25290.txt deleted file mode 100644 index 246e191fad0..00000000000 --- a/compiler/testData/diagnostics/tests/samConversions/kt25290.txt +++ /dev/null @@ -1,21 +0,0 @@ -package - -public fun JavaFaceUser.useIn(): kotlin.Unit -public fun JavaFaceUser.useInv(): kotlin.Unit -public fun JavaFaceUser.useOut(): kotlin.Unit - -public interface JavaFace { - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public abstract fun singleMethod(): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public open class JavaFaceUser { - public constructor JavaFaceUser() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - public open fun use1(/*0*/ face: JavaFace!): kotlin.Unit - public open fun use2(/*0*/ face: JavaFace!): kotlin.Unit -} diff --git a/compiler/testData/diagnostics/tests/substitutions/starProjections.kt b/compiler/testData/diagnostics/tests/substitutions/starProjections.kt index 932d99dc1d3..d09276c0c03 100644 --- a/compiler/testData/diagnostics/tests/substitutions/starProjections.kt +++ b/compiler/testData/diagnostics/tests/substitutions/starProjections.kt @@ -17,9 +17,9 @@ interface B, T>> { } fun testB(b: B<*, *>) { - b.r().checkType { _() } - b.t().checkType { _, *>>() } + b.r().checkType { _() } + b.t().checkType { _, *>>() } - b.t().r().size + b.t().r().size } diff --git a/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.kt b/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.kt index 3d538e89007..fdf985cc372 100644 --- a/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.kt +++ b/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.kt @@ -21,21 +21,21 @@ fun test2() {} @Ann(s = arrayOf(1)) fun test3() {} -@Ann(s = ["value"]) +@Ann(s = ["value"]) fun test5() {} @JavaAnn(value = arrayOf("value")) fun jTest1() {} -@JavaAnn(value = ["value"]) +@JavaAnn(value = ["value"]) fun jTest2() {} -@JavaAnn(value = ["value"], path = ["path"]) +@JavaAnn(value = ["value"], path = ["path"]) fun jTest3() {} annotation class IntAnn(vararg val i: Int) -@IntAnn(i = [1, 2]) +@IntAnn(i = [1, 2]) fun foo1() {} @IntAnn(i = intArrayOf(0)) diff --git a/compiler/testData/loadJava/compiledKotlin/class/RecursiveGeneric.txt b/compiler/testData/loadJava/compiledKotlin/class/RecursiveGeneric.txt index 3ff8c1ad4bb..fe5962fe7ec 100644 --- a/compiler/testData/loadJava/compiledKotlin/class/RecursiveGeneric.txt +++ b/compiler/testData/loadJava/compiledKotlin/class/RecursiveGeneric.txt @@ -5,5 +5,5 @@ public interface Rec> { } public interface Super { - public open fun foo(/*0*/ p: test.Rec<*, *>): test.Rec>>>> + public open fun foo(/*0*/ p: test.Rec<*, *>): test.Rec<*, *> } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/tests/di/injection.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/tests/di/injection.kt index 82b6099c691..b85812faf8b 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/tests/di/injection.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/tests/di/injection.kt @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices -import org.jetbrains.kotlin.types.SubstitutingScopeProviderImpl import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices import org.jetbrains.kotlin.types.expressions.FakeCallResolver @@ -41,7 +40,6 @@ fun createContainerForTests(project: Project, module: ModuleDescriptor): Contain BindingTraceContext(), LanguageVersionSettingsImpl.DEFAULT ) - useImpl() useImpl() }) } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/38.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/38.kt index 9ef6265551f..9e049683f51 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/38.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/38.kt @@ -83,7 +83,7 @@ fun case_5(x: Any?) { & kotlin.Any?"), DEBUG_INFO_SMARTCAST!>x.x x.y x.z - & InterfaceWithTwoTypeParameters<*, *> & kotlin.Any & kotlin.Any?")!>x.ip2test() + & kotlin.Any?"), DEBUG_INFO_SMARTCAST!>x.ip2test() & InterfaceWithTwoTypeParameters<*, *> & kotlin.Any & kotlin.Any?")!>x & kotlin.Any?"), DEBUG_INFO_SMARTCAST!>x.x } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/50.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/50.kt index 4b51a667e80..f0ee96c8535 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/50.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/50.kt @@ -14,18 +14,18 @@ // TESTCASE NUMBER: 1 fun Any.case_1() { if (this is Inv<*>) { - & kotlin.Any"), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>this.test() - & kotlin.Any"), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>this.prop_4 - & kotlin.Any"), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>this.prop_4.inv() - prop_4 - prop_4.inv() + "), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any"), DEBUG_INFO_SMARTCAST!>this.test() + "), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any"), DEBUG_INFO_SMARTCAST!>this.prop_4 + "), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any"), DEBUG_INFO_SMARTCAST!>this.prop_4.inv() + prop_4 + prop_4.inv() } } // TESTCASE NUMBER: 2 fun Any.case_2() { if (this is ClassWithSixTypeParameters<*, *, *, *, *, *>) { - & kotlin.Any"), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>this.test() + "), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any"), DEBUG_INFO_SMARTCAST!>this.test() "), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any"), DEBUG_INFO_SMARTCAST!>this.x "), DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any"), DEBUG_INFO_SMARTCAST!>this.y x @@ -36,18 +36,18 @@ fun Any.case_2() { // TESTCASE NUMBER: 3 fun T.case_3() { if (this is Inv<*>) { - & T & T!!"), DEBUG_INFO_EXPRESSION_TYPE("T")!>this.test() - & T & T!!"), DEBUG_INFO_EXPRESSION_TYPE("T")!>this.prop_4 - & T & T!!"), DEBUG_INFO_EXPRESSION_TYPE("T")!>this.prop_4.inv() - prop_4 - prop_4.inv() + "), DEBUG_INFO_EXPRESSION_TYPE("T"), DEBUG_INFO_SMARTCAST!>this.test() + "), DEBUG_INFO_EXPRESSION_TYPE("T"), DEBUG_INFO_SMARTCAST!>this.prop_4 + "), DEBUG_INFO_EXPRESSION_TYPE("T"), DEBUG_INFO_SMARTCAST!>this.prop_4.inv() + prop_4 + prop_4.inv() } } // TESTCASE NUMBER: 4 fun T?.case_4() { if (this is ClassWithSixTypeParameters<*, *, *, *, *, *>) { - & T!! & T?"), DEBUG_INFO_EXPRESSION_TYPE("T?")!>this.test() + "), DEBUG_INFO_EXPRESSION_TYPE("T?"), DEBUG_INFO_SMARTCAST!>this.test() "), DEBUG_INFO_EXPRESSION_TYPE("T?"), DEBUG_INFO_SMARTCAST!>this.x "), DEBUG_INFO_EXPRESSION_TYPE("T?"), DEBUG_INFO_SMARTCAST!>this.y x diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/9.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/9.kt index bee0f0dfa52..ba8e133e7e1 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/9.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/9.kt @@ -36,26 +36,26 @@ fun case_2(a: Out<out Out<out if (a != null) { val b = ?>?>?>?>?> & Out?>?>?>?>?>?")!>a.get() if (b != null) { - val c = ?>?>?>?> & Out?>?>?>?>?"), DEBUG_INFO_SMARTCAST!>b.get() + val c = ?>?>?>?> & Out?>?>?>?>?"), DEBUG_INFO_SMARTCAST!>b.get() if (c != null) { - val d = ?>?>?> & Out?>?>?>?"), DEBUG_INFO_SMARTCAST!>c.get() + val d = ?>?>?> & Out?>?>?>?"), DEBUG_INFO_SMARTCAST!>c.get() if (d != null) { - val e = ?>?> & Out?>?>?"), DEBUG_INFO_SMARTCAST!>d.get() + val e = ?>?> & Out?>?>?"), DEBUG_INFO_SMARTCAST!>d.get() if (e != null) { - val f = ?> & Out?>?"), DEBUG_INFO_SMARTCAST!>e.get() + val f = ?> & Out?>?"), DEBUG_INFO_SMARTCAST!>e.get() if (f != null) { - val g = & Out?"), DEBUG_INFO_SMARTCAST!>f.get() + val g = & Out?"), DEBUG_INFO_SMARTCAST!>f.get() if (g != null) { - g - g.equals(null) - g.propT - g.propAny - g.propNullableT - g.propNullableAny - g.funT() - g.funAny() - g.funNullableT() - g.funNullableAny() + g + g.equals(null) + g.propT + g.propAny + g.propNullableT + g.propNullableAny + g.funT() + g.funAny() + g.funNullableT() + g.funNullableAny() } } } @@ -392,26 +392,26 @@ fun case_17(a: Inv?>?>?>?>?>?) { if (a != null) { val b = ?>?>?>?>?> & Inv?>?>?>?>?>?")!>a.get() if (b != null) { - val c = ?>?>?>?> & Out?>?>?>?>?"), DEBUG_INFO_SMARTCAST!>b.get() + val c = ?>?>?>?> & Out?>?>?>?>?"), DEBUG_INFO_SMARTCAST!>b.get() if (c != null) { - val d = ?>?>?> & Out?>?>?>?"), DEBUG_INFO_SMARTCAST!>c.get() + val d = ?>?>?> & Out?>?>?>?"), DEBUG_INFO_SMARTCAST!>c.get() if (d != null) { - val e = ?>?> & Out?>?>?"), DEBUG_INFO_SMARTCAST!>d.get() + val e = ?>?> & Out?>?>?"), DEBUG_INFO_SMARTCAST!>d.get() if (e != null) { - val f = ?> & Out?>?"), DEBUG_INFO_SMARTCAST!>e.get() + val f = ?> & Out?>?"), DEBUG_INFO_SMARTCAST!>e.get() if (f != null) { - val g = & Out?"), DEBUG_INFO_SMARTCAST!>f.get() + val g = & Out?"), DEBUG_INFO_SMARTCAST!>f.get() if (g != null) { - g - g.equals(null) - g.propT - g.propAny - g.propNullableT - g.propNullableAny - g.funT() - g.funAny() - g.funNullableT() - g.funNullableAny() + g + g.equals(null) + g.propT + g.propAny + g.propNullableT + g.propNullableAny + g.funT() + g.funAny() + g.funNullableT() + g.funNullableAny() } } } diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index ec21739c8ed..22b88e98256 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -8093,11 +8093,6 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/generics/argumentsForT.kt"); } - @TestMetadata("capturedTypeInInputPosition.kt") - public void testCapturedTypeInInputPosition() throws Exception { - runTest("compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.kt"); - } - @TestMetadata("commonSupertypeContravariant.kt") public void testCommonSupertypeContravariant() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/commonSupertypeContravariant.kt"); @@ -8937,11 +8932,6 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssign.kt"); } - @TestMetadata("setterProjectedOutAssignFromJava.kt") - public void testSetterProjectedOutAssignFromJava() throws Exception { - runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.kt"); - } - @TestMetadata("setterProjectedOutNoPlusAssign.kt") public void testSetterProjectedOutNoPlusAssign() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutNoPlusAssign.kt"); @@ -17395,11 +17385,6 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.kt"); } - @TestMetadata("implicitAndExplicitThis.kt") - public void testImplicitAndExplicitThis() throws Exception { - runTest("compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.kt"); - } - @TestMetadata("implicitReceiverProperty.kt") public void testImplicitReceiverProperty() throws Exception { runTest("compiler/testData/diagnostics/tests/resolve/implicitReceiverProperty.kt"); @@ -18117,11 +18102,6 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/samConversions/GenericSubstitutionKT.kt"); } - @TestMetadata("kt25290.kt") - public void testKt25290() throws Exception { - runTest("compiler/testData/diagnostics/tests/samConversions/kt25290.kt"); - } - @TestMetadata("OverloadPriority.kt") public void testOverloadPriority() throws Exception { runTest("compiler/testData/diagnostics/tests/samConversions/OverloadPriority.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index a9c4b2207af..13616606c39 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -8088,11 +8088,6 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/generics/argumentsForT.kt"); } - @TestMetadata("capturedTypeInInputPosition.kt") - public void testCapturedTypeInInputPosition() throws Exception { - runTest("compiler/testData/diagnostics/tests/generics/capturedTypeInInputPosition.kt"); - } - @TestMetadata("commonSupertypeContravariant.kt") public void testCommonSupertypeContravariant() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/commonSupertypeContravariant.kt"); @@ -8932,11 +8927,6 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssign.kt"); } - @TestMetadata("setterProjectedOutAssignFromJava.kt") - public void testSetterProjectedOutAssignFromJava() throws Exception { - runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutAssignFromJava.kt"); - } - @TestMetadata("setterProjectedOutNoPlusAssign.kt") public void testSetterProjectedOutNoPlusAssign() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/varProjection/setterProjectedOutNoPlusAssign.kt"); @@ -17385,11 +17375,6 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.kt"); } - @TestMetadata("implicitAndExplicitThis.kt") - public void testImplicitAndExplicitThis() throws Exception { - runTest("compiler/testData/diagnostics/tests/resolve/implicitAndExplicitThis.kt"); - } - @TestMetadata("implicitReceiverProperty.kt") public void testImplicitReceiverProperty() throws Exception { runTest("compiler/testData/diagnostics/tests/resolve/implicitReceiverProperty.kt"); @@ -18107,11 +18092,6 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/samConversions/GenericSubstitutionKT.kt"); } - @TestMetadata("kt25290.kt") - public void testKt25290() throws Exception { - runTest("compiler/testData/diagnostics/tests/samConversions/kt25290.kt"); - } - @TestMetadata("OverloadPriority.kt") public void testOverloadPriority() throws Exception { runTest("compiler/testData/diagnostics/tests/samConversions/OverloadPriority.kt"); diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/context.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/context.kt index 0aa53821404..c1b5e3a7b41 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/context.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/context.kt @@ -42,7 +42,6 @@ import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter import org.jetbrains.kotlin.storage.StorageManager -import org.jetbrains.kotlin.types.SubstitutingScopeProvider import java.util.* class JavaResolverComponents( @@ -65,8 +64,7 @@ class JavaResolverComponents( val annotationTypeQualifierResolver: AnnotationTypeQualifierResolver, val signatureEnhancement: SignatureEnhancement, val javaClassesTracker: JavaClassesTracker, - val settings: JavaResolverSettings, - val substitutingScopeProvider: SubstitutingScopeProvider + val settings: JavaResolverSettings ) { fun replace( javaResolverCache: JavaResolverCache = this.javaResolverCache @@ -75,7 +73,7 @@ class JavaResolverComponents( signaturePropagator, errorReporter, javaResolverCache, javaPropertyInitializerEvaluator, samConversionResolver, sourceElementFactory, moduleClassResolver, packagePartProvider, supertypeLoopChecker, lookupTracker, module, reflectionTypes, - annotationTypeQualifierResolver, signatureEnhancement, javaClassesTracker, settings, substitutingScopeProvider + annotationTypeQualifierResolver, signatureEnhancement, javaClassesTracker, settings ) } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt index 8c7cc5cfd74..ac4bbf67334 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt @@ -46,8 +46,7 @@ class LazyJavaClassDescriptor( ) : ClassDescriptorBase( outerContext.storageManager, containingDeclaration, jClass.name, outerContext.components.sourceElementFactory.source(jClass), - /* isExternal = */ false, - outerContext.components.substitutingScopeProvider + /* isExternal = */ false ), JavaClassDescriptor { companion object { diff --git a/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/RuntimeModuleData.kt b/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/RuntimeModuleData.kt index 6bb98066a41..45bcf3391f5 100644 --- a/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/RuntimeModuleData.kt +++ b/core/descriptors.runtime/src/kotlin/reflect/jvm/internal/components/RuntimeModuleData.kt @@ -43,7 +43,6 @@ import org.jetbrains.kotlin.serialization.deserialization.ContractDeserializer import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.storage.LockBasedStorageManager -import org.jetbrains.kotlin.types.SubstitutingScopeProvider import org.jetbrains.kotlin.utils.Jsr305State class RuntimeModuleData private constructor( @@ -71,7 +70,7 @@ class RuntimeModuleData private constructor( singleModuleClassResolver, PackagePartProvider.Empty, SupertypeLoopChecker.EMPTY, LookupTracker.DO_NOTHING, module, ReflectionTypes(module, notFoundClasses), annotationTypeQualifierResolver, SignatureEnhancement(annotationTypeQualifierResolver, Jsr305State.DISABLED), - JavaClassesTracker.Default, JavaResolverSettings.Default, SubstitutingScopeProvider.DEFAULT + JavaClassesTracker.Default, JavaResolverSettings.Default ) val lazyJavaPackageFragmentProvider = LazyJavaPackageFragmentProvider(javaResolverComponents) diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractClassDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractClassDescriptor.java index ddeef6efd43..59d62742da0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractClassDescriptor.java @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.resolve.scopes.InnerClassesScopeWrapper; import org.jetbrains.kotlin.resolve.scopes.MemberScope; +import org.jetbrains.kotlin.resolve.scopes.SubstitutingScope; import org.jetbrains.kotlin.storage.NotNullLazyValue; import org.jetbrains.kotlin.storage.StorageManager; import org.jetbrains.kotlin.types.*; @@ -33,11 +34,10 @@ import java.util.List; public abstract class AbstractClassDescriptor implements ClassDescriptor { private final Name name; protected final NotNullLazyValue defaultType; - protected final SubstitutingScopeProvider substitutingScopeProvider; private final NotNullLazyValue unsubstitutedInnerClassesScope; private final NotNullLazyValue thisAsReceiverParameter; - public AbstractClassDescriptor(@NotNull StorageManager storageManager, @NotNull Name name, @NotNull SubstitutingScopeProvider substitutingScopeProvider) { + public AbstractClassDescriptor(@NotNull StorageManager storageManager, @NotNull Name name) { this.name = name; this.defaultType = storageManager.createLazyValue(new Function0() { @Override @@ -57,11 +57,6 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor { return new LazyClassReceiverParameterDescriptor(AbstractClassDescriptor.this); } }); - this.substitutingScopeProvider = substitutingScopeProvider; - } - - public AbstractClassDescriptor(@NotNull StorageManager storageManager, @NotNull Name name) { - this(storageManager, name, SubstitutingScopeProvider.Companion.getDEFAULT()); } @NotNull @@ -97,7 +92,7 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor { if (typeArguments.isEmpty()) return getUnsubstitutedMemberScope(); TypeSubstitutor substitutor = TypeConstructorSubstitution.create(getTypeConstructor(), typeArguments).buildSubstitutor(); - return substitutingScopeProvider.createSubstitutingScope(getUnsubstitutedMemberScope(), substitutor); + return new SubstitutingScope(getUnsubstitutedMemberScope(), substitutor); } @NotNull @@ -106,7 +101,7 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor { if (typeSubstitution.isEmpty()) return getUnsubstitutedMemberScope(); TypeSubstitutor substitutor = TypeSubstitutor.create(typeSubstitution); - return substitutingScopeProvider.createSubstitutingScope(getUnsubstitutedMemberScope(), substitutor); + return new SubstitutingScope(getUnsubstitutedMemberScope(), substitutor); } @NotNull @@ -115,7 +110,7 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor { if (substitutor.isEmpty()) { return this; } - return new LazySubstitutingClassDescriptor(this, substitutor, substitutingScopeProvider); + return new LazySubstitutingClassDescriptor(this, substitutor); } @NotNull diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorBase.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorBase.java index 5d8f9220c96..f4b4c75f8b2 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorBase.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassDescriptorBase.java @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.descriptors.SourceElement; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.storage.StorageManager; -import org.jetbrains.kotlin.types.SubstitutingScopeProvider; public abstract class ClassDescriptorBase extends AbstractClassDescriptor { @@ -36,18 +35,7 @@ public abstract class ClassDescriptorBase extends AbstractClassDescriptor { @NotNull SourceElement source, boolean isExternal ) { - this(storageManager, containingDeclaration, name, source, isExternal, SubstitutingScopeProvider.Companion.getDEFAULT()); - } - - protected ClassDescriptorBase( - @NotNull StorageManager storageManager, - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull Name name, - @NotNull SourceElement source, - boolean isExternal, - @NotNull SubstitutingScopeProvider substitutingScopeProvider - ) { - super(storageManager, name, substitutingScopeProvider); + super(storageManager, name); this.containingDeclaration = containingDeclaration; this.source = source; this.isExternal = isExternal; diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java index 1010090c4b0..2842c4f1fcd 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -324,21 +324,11 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo } @Override - @Nullable public FunctionDescriptor substitute(@NotNull TypeSubstitutor originalSubstitutor) { - return substitute(originalSubstitutor, SubstitutingScopeProvider.Companion.getDEFAULT()); - } - - @Nullable - public FunctionDescriptor substitute(@NotNull TypeSubstitutor originalSubstitutor, SubstitutingScopeProvider substitutingScopeProvider) { if (originalSubstitutor.isEmpty()) { return this; } - return newCopyBuilder(originalSubstitutor) - .setOriginal(getOriginal()) - .setJustForTypeSubstitution(true) - .setSubstitutingScopeProvider(substitutingScopeProvider) - .build(); + return newCopyBuilder(originalSubstitutor).setOriginal(getOriginal()).setJustForTypeSubstitution(true).build(); } @Nullable @@ -375,7 +365,6 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo private Map, Object> userDataMap = new LinkedHashMap, Object>(); private Boolean newHasSynthesizedParameterNames = null; protected boolean justForTypeSubstitution = false; - protected @NotNull SubstitutingScopeProvider substitutingScopeProvider; public CopyConfiguration( @NotNull TypeSubstitution substitution, @@ -397,7 +386,6 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.newExtensionReceiverParameter = newExtensionReceiverParameter; this.newReturnType = newReturnType; this.name = name; - substitutingScopeProvider = SubstitutingScopeProvider.Companion.getDEFAULT(); } @Override @@ -566,12 +554,6 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo justForTypeSubstitution = value; return this; } - - @NotNull - public CopyConfiguration setSubstitutingScopeProvider(@NotNull SubstitutingScopeProvider substitutingScopeProvider) { - this.substitutingScopeProvider = substitutingScopeProvider; - return this; - } } @Override @@ -609,8 +591,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo List substitutedTypeParameters = new ArrayList(unsubstitutedTypeParameters.size()); final TypeSubstitutor substitutor = DescriptorSubstitutor.substituteTypeParameters( - unsubstitutedTypeParameters, configuration.substitution, substitutedDescriptor, substitutedTypeParameters, - wereChanges, configuration.substitutingScopeProvider + unsubstitutedTypeParameters, configuration.substitution, substitutedDescriptor, substitutedTypeParameters, wereChanges ); if (substitutor == null) return null; diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java index 88d613d6ca8..aa45dbbaa04 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazySubstitutingClassDescriptor.java @@ -28,12 +28,10 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { private List typeConstructorParameters; private List declaredTypeParameters; private TypeConstructor typeConstructor; - private final SubstitutingScopeProvider substitutingScopeProvider; - public LazySubstitutingClassDescriptor(ClassDescriptor descriptor, TypeSubstitutor substitutor, SubstitutingScopeProvider substitutingScopeProvider) { + public LazySubstitutingClassDescriptor(ClassDescriptor descriptor, TypeSubstitutor substitutor) { this.original = descriptor; this.originalSubstitutor = substitutor; - this.substitutingScopeProvider = substitutingScopeProvider; } private TypeSubstitutor getSubstitutor() { @@ -89,7 +87,7 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { if (originalSubstitutor.isEmpty()) { return memberScope; } - return substitutingScopeProvider.createSubstitutingScope(memberScope, getSubstitutor()); + return new SubstitutingScope(memberScope, getSubstitutor()); } @NotNull @@ -99,7 +97,7 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { if (originalSubstitutor.isEmpty()) { return memberScope; } - return substitutingScopeProvider.createSubstitutingScope(memberScope, getSubstitutor()); + return new SubstitutingScope(memberScope, getSubstitutor()); } @NotNull @@ -109,7 +107,7 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { if (originalSubstitutor.isEmpty()) { return memberScope; } - return substitutingScopeProvider.createSubstitutingScope(memberScope, getSubstitutor()); + return new SubstitutingScope(memberScope, getSubstitutor()); } @NotNull @@ -177,7 +175,7 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { @Override public ClassDescriptor substitute(@NotNull TypeSubstitutor substitutor) { if (substitutor.isEmpty()) return this; - return new LazySubstitutingClassDescriptor(this, TypeSubstitutor.createChainedSubstitutor(substitutor.getSubstitution(), getSubstitutor().getSubstitution()), substitutingScopeProvider); + return new LazySubstitutingClassDescriptor(this, TypeSubstitutor.createChainedSubstitutor(substitutor.getSubstitution(), getSubstitutor().getSubstitution())); } @Override diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java index 8b688fd53ce..0a3154a4f70 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java @@ -47,8 +47,6 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp private final boolean isExternal; private final boolean isDelegated; - private final SubstitutingScopeProvider substitutingScopeProvider; - private ReceiverParameterDescriptor dispatchReceiverParameter; private ReceiverParameterDescriptor extensionReceiverParameter; private List typeParameters; @@ -74,28 +72,6 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp boolean isActual, boolean isExternal, boolean isDelegated - ) { - this(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source, - lateInit, isConst, isExpect, isActual, isExternal, isDelegated, SubstitutingScopeProvider.Companion.getDEFAULT()); - } - - protected PropertyDescriptorImpl( - @NotNull DeclarationDescriptor containingDeclaration, - @Nullable PropertyDescriptor original, - @NotNull Annotations annotations, - @NotNull Modality modality, - @NotNull Visibility visibility, - boolean isVar, - @NotNull Name name, - @NotNull Kind kind, - @NotNull SourceElement source, - boolean lateInit, - boolean isConst, - boolean isExpect, - boolean isActual, - boolean isExternal, - boolean isDelegated, - @NotNull SubstitutingScopeProvider substitutingScopeProvider ) { super(containingDeclaration, annotations, name, null, isVar, source); this.modality = modality; @@ -108,7 +84,6 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp this.isActual = isActual; this.isExternal = isExternal; this.isDelegated = isDelegated; - this.substitutingScopeProvider = substitutingScopeProvider; } @NotNull @@ -127,39 +102,10 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp boolean isActual, boolean isExternal, boolean isDelegated - ) { - return create(containingDeclaration, annotations, modality, visibility, isVar, name, kind, source, - lateInit, isConst, isExpect, isActual, isExternal, isDelegated, SubstitutingScopeProvider.Companion.getDEFAULT()); - } - - @NotNull - public static PropertyDescriptorImpl create( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull Annotations annotations, - @NotNull Modality modality, - @NotNull Visibility visibility, - boolean isVar, - @NotNull Name name, - @NotNull Kind kind, - @NotNull SourceElement source, - boolean lateInit, - boolean isConst, - boolean isExpect, - boolean isActual, - boolean isExternal, - boolean isDelegated, - @NotNull SubstitutingScopeProvider substitutingScopeProvider ) { return new PropertyDescriptorImpl(containingDeclaration, null, annotations, modality, visibility, isVar, name, kind, source, lateInit, isConst, - isExpect, isActual, isExternal, isDelegated, substitutingScopeProvider); - } - - @NotNull - public PropertyDescriptorImpl getCopy() { - return new PropertyDescriptorImpl(getContainingDeclaration(), original, getAnnotations(), - modality, visibility, isVar(), getName(), kind, getSource(), lateInit, isConst, - isExpect, isActual, isExternal, isDelegated, substitutingScopeProvider); + isExpect, isActual, isExternal, isDelegated); } public void setType( @@ -312,7 +258,6 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp private ReceiverParameterDescriptor dispatchReceiverParameter = PropertyDescriptorImpl.this.dispatchReceiverParameter; private List newTypeParameters = null; private Name name = getName(); - private boolean setterProjectedOut = PropertyDescriptorImpl.this.setterProjectedOut; @NotNull @Override @@ -419,7 +364,6 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp TypeSubstitutor substitutor = DescriptorSubstitutor.substituteTypeParameters( originalTypeParameters, copyConfiguration.substitution, substitutedDescriptor, substitutedTypeParameters ); - substitutor.setSubstitutingScopeProvider(substitutingScopeProvider); KotlinType originalOutType = getType(); KotlinType outType = substitutor.substitute(originalOutType, Variance.OUT_VARIANCE); @@ -516,8 +460,6 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp substitutedDescriptor.setCompileTimeInitializer(compileTimeInitializer); } - substitutedDescriptor.setterProjectedOut = copyConfiguration.setterProjectedOut; - return substitutedDescriptor; } @@ -528,7 +470,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp return prev; } - public static FunctionDescriptor getSubstitutedInitialSignatureDescriptor( + private static FunctionDescriptor getSubstitutedInitialSignatureDescriptor( @NotNull TypeSubstitutor substitutor, @NotNull PropertyAccessorDescriptor accessorDescriptor ) { @@ -548,7 +490,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp ) { return new PropertyDescriptorImpl( newOwner, original, getAnnotations(), newModality, newVisibility, isVar(), newName, kind, SourceElement.NO_SOURCE, - isLateInit(), isConst(), isExpect(), isActual(), isExternal(), isDelegated(), substitutingScopeProvider + isLateInit(), isConst(), isExpect(), isActual(), isExternal(), isDelegated() ); } @@ -622,9 +564,4 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp public V getUserData(UserDataKey key) { return null; } - - @NotNull - public SubstitutingScopeProvider getSubstitutingScopeProvider() { - return substitutingScopeProvider; - } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ValueParameterDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ValueParameterDescriptorImpl.kt index 74e017b181e..05f39458aae 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ValueParameterDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ValueParameterDescriptorImpl.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeSubstitutor -import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.utils.join open class ValueParameterDescriptorImpl( @@ -103,7 +102,8 @@ open class ValueParameterDescriptorImpl( override fun getOriginal() = if (original === this) this else original.original override fun substitute(substitutor: TypeSubstitutor): ValueParameterDescriptor { - return this + if (substitutor.isEmpty) return this + throw UnsupportedOperationException() // TODO } override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R { diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/CapturedTypeConstructor.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/CapturedTypeConstructor.kt index cc71ca00dea..d06a1e53ed5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/CapturedTypeConstructor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/calls/inference/CapturedTypeConstructor.kt @@ -100,25 +100,16 @@ class CapturedType( CapturedType(typeProjection, constructor, isMarkedNullable, newAnnotations) } -object OldCapturedTypeCreator : CapturedTypeCreator { - override fun createCapturedType(typeProjection: TypeProjection): TypeProjection { - return TypeProjectionImpl(CapturedType(typeProjection)) - } -} - fun createCapturedType(typeProjection: TypeProjection): KotlinType = CapturedType(typeProjection) fun KotlinType.isCaptured(): Boolean = constructor is CapturedTypeConstructor -fun TypeSubstitution.wrapWithCapturingSubstitution( - capturedTypeCreator: CapturedTypeCreator = OldCapturedTypeCreator, - needApproximation: Boolean = true -): TypeSubstitution = +fun TypeSubstitution.wrapWithCapturingSubstitution(needApproximation: Boolean = true): TypeSubstitution = if (this is IndexedParametersSubstitution) IndexedParametersSubstitution( this.parameters, this.arguments.zip(this.parameters).map { - it.first.createCapturedIfNeeded(it.second, capturedTypeCreator) + it.first.createCapturedIfNeeded(it.second) }.toTypedArray(), approximateCapturedTypes = needApproximation ) @@ -126,16 +117,10 @@ fun TypeSubstitution.wrapWithCapturingSubstitution( object : DelegatedTypeSubstitution(this@wrapWithCapturingSubstitution) { override fun approximateContravariantCapturedTypes() = needApproximation override fun get(key: KotlinType) = - super.get(key)?.createCapturedIfNeeded( - key.constructor.declarationDescriptor as? TypeParameterDescriptor, - capturedTypeCreator - ) + super.get(key)?.createCapturedIfNeeded(key.constructor.declarationDescriptor as? TypeParameterDescriptor) } -private fun TypeProjection.createCapturedIfNeeded( - typeParameterDescriptor: TypeParameterDescriptor?, - capturedTypeCreator: CapturedTypeCreator -): TypeProjection { +private fun TypeProjection.createCapturedIfNeeded(typeParameterDescriptor: TypeParameterDescriptor?): TypeProjection { if (typeParameterDescriptor == null || projectionKind == Variance.INVARIANT) return this // Treat consistent projections as invariant @@ -149,5 +134,5 @@ private fun TypeProjection.createCapturedIfNeeded( TypeProjectionImpl(this@createCapturedIfNeeded.type) } - return capturedTypeCreator.createCapturedType(this) + return TypeProjectionImpl(createCapturedType(this)) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt index de67e867a9e..7da12970861 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt @@ -18,24 +18,18 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.Substitutable -import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl import org.jetbrains.kotlin.incremental.components.LookupLocation -import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.inference.wrapWithCapturingSubstitution -import org.jetbrains.kotlin.types.ErrorUtils -import org.jetbrains.kotlin.types.SubstitutingScopeProvider import org.jetbrains.kotlin.types.TypeSubstitutor import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.newLinkedHashSetWithExpectedSize import org.jetbrains.kotlin.utils.sure import java.util.* -class SubstitutingScope(private val workerScope: MemberScope, givenSubstitutor: TypeSubstitutor, private val substitutingScopeProvider: SubstitutingScopeProvider) : MemberScope { +class SubstitutingScope(private val workerScope: MemberScope, givenSubstitutor: TypeSubstitutor) : MemberScope { - private val substitutor: TypeSubstitutor = givenSubstitutor.substitution - .wrapWithCapturingSubstitution(capturedTypeCreator = substitutingScopeProvider.provideCapturedTypeCreator()) - .buildSubstitutor().also { it.setSubstitutingScopeProvider(substitutingScopeProvider) } + private val substitutor = givenSubstitutor.substitution.wrapWithCapturingSubstitution().buildSubstitutor() private var substitutedDescriptors: MutableMap? = null @@ -49,44 +43,11 @@ class SubstitutingScope(private val workerScope: MemberScope, givenSubstitutor: } val substituted = substitutedDescriptors!!.getOrPut(descriptor) { - val assertionMessage = { - "We expect that no conflict should happen while substitution is guaranteed to generate invariant projection, " + - "but $descriptor substitution fails" - } when (descriptor) { - /* - * Here we can take null if NI enabled, because inside this place we have OI and NI collide. See following example: - * - * class Out - * - * class A { - * fun T.foo() {} - * fun Out.bar() {} - * } - * - * fun test(x: A, y: Out) { - * with(x) { - * "".foo() <-- problem is here - * } - * } - * - * Because of we don't capture type projections, in call "".foo() we have `out CharSequence` as substituted type `T` - * (instead of `CapturedType(out CharSequence)`, and `in String` as type from receiver, so we have type variance error - * and can not substitute descriptor. - * - * So, fix of it is hack - */ - is FunctionDescriptorImpl -> { - val substitutedDescriptor = descriptor.substitute(substitutor, substitutingScopeProvider) - if (substitutingScopeProvider.isNewInferenceEnabled) { - substitutedDescriptor ?: ErrorUtils.createErrorScope("Cannot substitute functional descriptor") - .getContributedFunctions(descriptor.name, NoLookupLocation.WHEN_RESOLVE_DECLARATION).first() - } else { - substitutedDescriptor.sure(assertionMessage) - } + is Substitutable<*> -> descriptor.substitute(substitutor).sure { + "We expect that no conflict should happen while substitution is guaranteed to generate invariant projection, " + + "but $descriptor substitution fails" } - - is Substitutable<*> -> descriptor.substitute(substitutor).sure(assertionMessage) else -> error("Unknown descriptor in scope: $descriptor") } } @@ -111,7 +72,7 @@ class SubstitutingScope(private val workerScope: MemberScope, givenSubstitutor: override fun getContributedVariables(name: Name, location: LookupLocation) = substitute(workerScope.getContributedVariables(name, location)) override fun getContributedClassifier(name: Name, location: LookupLocation) = - workerScope.getContributedClassifier(name, location)?.let { substitute(it) } + workerScope.getContributedClassifier(name, location)?.let { substitute(it) } override fun getContributedFunctions(name: Name, location: LookupLocation) = substitute(workerScope.getContributedFunctions(name, location)) diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/CapturedTypeApproximation.kt b/core/descriptors/src/org/jetbrains/kotlin/types/CapturedTypeApproximation.kt index 0e7cdd3600f..8498af270b8 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/CapturedTypeApproximation.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/CapturedTypeApproximation.kt @@ -28,12 +28,6 @@ import org.jetbrains.kotlin.types.checker.KotlinTypeChecker import org.jetbrains.kotlin.types.typeUtil.builtIns import java.util.* -class OldCaptureTypeApproximator : CapturedTypeApproximator { - override fun approximateCapturedTypes(typeProjection: TypeProjection?, approximateContravariant: Boolean): TypeProjection? { - return approximateCapturedTypesIfNecessary(typeProjection, approximateContravariant) - } -} - data class ApproximationBounds( val lower: T, val upper: T diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/DescriptorSubstitutor.java b/core/descriptors/src/org/jetbrains/kotlin/types/DescriptorSubstitutor.java index aa99355b6bd..0bb756907ec 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/DescriptorSubstitutor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/DescriptorSubstitutor.java @@ -40,7 +40,7 @@ public class DescriptorSubstitutor { @NotNull DeclarationDescriptor newContainingDeclaration, @NotNull @Mutable List result ) { - TypeSubstitutor substitutor = substituteTypeParameters(typeParameters, originalSubstitution, newContainingDeclaration, result, null, SubstitutingScopeProvider.Companion.getDEFAULT()); + TypeSubstitutor substitutor = substituteTypeParameters(typeParameters, originalSubstitution, newContainingDeclaration, result, null); if (substitutor == null) throw new AssertionError("Substitution failed"); return substitutor; } @@ -51,8 +51,7 @@ public class DescriptorSubstitutor { @NotNull TypeSubstitution originalSubstitution, @NotNull DeclarationDescriptor newContainingDeclaration, @NotNull @Mutable List result, - @Nullable boolean[] wereChanges, - @NotNull SubstitutingScopeProvider substitutingScopeProvider + @Nullable boolean[] wereChanges ) { Map mutableSubstitution = new HashMap(); @@ -77,7 +76,7 @@ public class DescriptorSubstitutor { TypeSubstitutor substitutor = TypeSubstitutor.createChainedSubstitutor( originalSubstitution, TypeConstructorSubstitution.createByConstructorsMap(mutableSubstitution) - ).setSubstitutingScopeProvider(substitutingScopeProvider); + ); for (TypeParameterDescriptor descriptor : typeParameters) { TypeParameterDescriptorImpl substituted = substitutedMap.get(descriptor); diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/SubstitutingScopeProvider.kt b/core/descriptors/src/org/jetbrains/kotlin/types/SubstitutingScopeProvider.kt deleted file mode 100644 index 2a17c1aa89a..00000000000 --- a/core/descriptors/src/org/jetbrains/kotlin/types/SubstitutingScopeProvider.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. 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.types - -import org.jetbrains.kotlin.resolve.calls.inference.OldCapturedTypeCreator -import org.jetbrains.kotlin.resolve.scopes.MemberScope -import org.jetbrains.kotlin.resolve.scopes.SubstitutingScope -import org.jetbrains.kotlin.types.typesApproximation.OldCaptureTypeApproximator - -interface SubstitutingScopeProvider { - fun createSubstitutingScope(workerScope: MemberScope, givenSubstitutor: TypeSubstitutor): SubstitutingScope - - fun provideCapturedTypeCreator(): CapturedTypeCreator - - fun provideApproximator(): CapturedTypeApproximator - - val isNewInferenceEnabled: Boolean - - companion object { - val DEFAULT: SubstitutingScopeProvider = object : SubstitutingScopeProvider { - override fun createSubstitutingScope(workerScope: MemberScope, givenSubstitutor: TypeSubstitutor): SubstitutingScope { - return SubstitutingScope(workerScope, givenSubstitutor, this) - } - - override fun provideCapturedTypeCreator(): CapturedTypeCreator { - return OldCapturedTypeCreator - } - - override fun provideApproximator(): CapturedTypeApproximator { - return OldCaptureTypeApproximator() - } - - override val isNewInferenceEnabled: Boolean get() = false - } - } -} - -interface CapturedTypeCreator { - fun createCapturedType(typeProjection: TypeProjection): TypeProjection -} - -interface CapturedTypeApproximator { - fun approximateCapturedTypes(typeProjection: TypeProjection?, approximateContravariant: Boolean): TypeProjection? -} \ No newline at end of file diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitutor.java b/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitutor.java index c0b5fe59141..af389bed94e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitutor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeSubstitutor.java @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.resolve.calls.inference.CapturedTypeConstructorKt; import org.jetbrains.kotlin.types.model.TypeSubstitutorMarker; import org.jetbrains.kotlin.types.typeUtil.TypeUtilsKt; +import org.jetbrains.kotlin.types.typesApproximation.CapturedTypeApproximationKt; import org.jetbrains.kotlin.utils.ExceptionUtilsKt; import java.util.ArrayList; @@ -46,14 +47,6 @@ public class TypeSubstitutor implements TypeSubstitutorMarker { } } - private @NotNull SubstitutingScopeProvider substitutingScopeProvider; - - @NotNull - public TypeSubstitutor setSubstitutingScopeProvider(@NotNull SubstitutingScopeProvider substitutingScopeProvider) { - this.substitutingScopeProvider = substitutingScopeProvider; - return this; - } - @NotNull public static TypeSubstitutor create(@NotNull TypeSubstitution substitution) { return new TypeSubstitutor(substitution); @@ -80,7 +73,6 @@ public class TypeSubstitutor implements TypeSubstitutorMarker { protected TypeSubstitutor(@NotNull TypeSubstitution substitution) { this.substitution = substitution; - this.substitutingScopeProvider = SubstitutingScopeProvider.Companion.getDEFAULT(); } public boolean isEmpty() { @@ -118,12 +110,8 @@ public class TypeSubstitutor implements TypeSubstitutorMarker { if (!substitution.approximateCapturedTypes() && !substitution.approximateContravariantCapturedTypes()) { return substitutedTypeProjection; } - - CapturedTypeApproximator approximator = substitutingScopeProvider.provideApproximator(); - return approximator.approximateCapturedTypes( - substitutedTypeProjection, - substitution.approximateContravariantCapturedTypes() - ); + return CapturedTypeApproximationKt.approximateCapturedTypesIfNecessary( + substitutedTypeProjection, substitution.approximateContravariantCapturedTypes()); } @Nullable diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java index 24e5440540e..66e37d9a706 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java @@ -55,11 +55,6 @@ public class TypeUtils { throw new IllegalStateException(name); } - @Override - public boolean isMarkedNullable() { - return false; - } - @NotNull @Override public String toString() { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt index 1c016b4ae2f..ee119fe75c1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt @@ -72,7 +72,10 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProvid import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager -import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.types.ErrorUtils +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.TypeUtils +import org.jetbrains.kotlin.types.WrappedTypeFactory import org.jetbrains.kotlin.utils.sure @@ -331,7 +334,7 @@ internal object IDELightClassContexts { }) IdeaEnvironment.configure(this) - useImpl() + useImpl() } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt index f3e5d3c96c5..8fa13456c2e 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt @@ -34,7 +34,6 @@ import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory -import org.jetbrains.kotlin.types.SubstitutingScopeProviderImpl fun createTopDownAnalyzerForJs( moduleContext: ModuleContext, @@ -56,7 +55,6 @@ fun createTopDownAnalyzerForJs( configureIncrementalCompilation(lookupTracker, expectActualTracker) configureStandardResolveComponents() - useImpl() useInstance(declarationProviderFactory) CompilerEnvironment.configure(this)