[FE 1.0] Resolve private constructors of sealed classes same as for regular classes
^KT-44866 ^KT-49729
This commit is contained in:
+5
-1
@@ -11,6 +11,7 @@ import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
|
||||
@@ -47,4 +48,7 @@ class Fe10AnalysisContext(
|
||||
|
||||
val builtIns: KotlinBuiltIns
|
||||
get() = resolveSession.moduleDescriptor.builtIns
|
||||
}
|
||||
|
||||
val languageVersionSettings: LanguageVersionSettings
|
||||
get() = resolveSession.languageVersionSettings
|
||||
}
|
||||
|
||||
+3
-3
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilityUtils.isVisibleWithAnyReceiver
|
||||
import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors
|
||||
import org.jetbrains.kotlin.util.ImplementationStatus
|
||||
|
||||
@@ -31,7 +31,7 @@ internal class KtFe10OverrideInfoProvider(
|
||||
override fun isVisible(memberSymbol: KtCallableSymbol, classSymbol: KtClassOrObjectSymbol): Boolean = withValidityAssertion {
|
||||
val memberDescriptor = getSymbolDescriptor(memberSymbol) as? DeclarationDescriptorWithVisibility ?: return false
|
||||
val classDescriptor = getSymbolDescriptor(classSymbol) ?: return false
|
||||
return DescriptorVisibilities.isVisibleWithAnyReceiver(memberDescriptor, classDescriptor)
|
||||
return isVisibleWithAnyReceiver(memberDescriptor, classDescriptor, analysisSession.analysisContext.languageVersionSettings)
|
||||
}
|
||||
|
||||
override fun getImplementationStatus(
|
||||
@@ -53,4 +53,4 @@ internal class KtFe10OverrideInfoProvider(
|
||||
val containingClassDescriptor = originalCallableDescriptor.containingDeclaration as? ClassDescriptor ?: return null
|
||||
return containingClassDescriptor.toKtClassifierSymbol(analysisContext) as? KtClassOrObjectSymbol
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+15
-7
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtVisibilityChecker
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSymbolDescriptor
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.getResolutionScope
|
||||
@@ -17,9 +17,11 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilityUtils.isVisible
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi.KtPsiUtil
|
||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||
@@ -52,14 +54,20 @@ internal class KtFe10VisibilityChecker(
|
||||
val bindingContext = analysisContext.analyze(receiverExpression, AnalysisMode.PARTIAL)
|
||||
val receiverType = bindingContext.getType(receiverExpression) ?: return false
|
||||
val explicitReceiver = ExpressionReceiver.create(receiverExpression, receiverType, bindingContext)
|
||||
return DescriptorVisibilities.isVisible(explicitReceiver, targetDescriptor, useSiteDescriptor)
|
||||
return isVisible(
|
||||
explicitReceiver,
|
||||
targetDescriptor,
|
||||
useSiteDescriptor,
|
||||
analysisContext.languageVersionSettings
|
||||
)
|
||||
} else {
|
||||
val bindingContext = analysisContext.analyze(useSiteDeclaration, AnalysisMode.FULL)
|
||||
|
||||
val lexicalScope = position.getResolutionScope(bindingContext)
|
||||
if (lexicalScope != null) {
|
||||
return lexicalScope.getImplicitReceiversHierarchy()
|
||||
.any { DescriptorVisibilities.isVisible(it.value, targetDescriptor, useSiteDescriptor) }
|
||||
return lexicalScope.getImplicitReceiversHierarchy().any {
|
||||
isVisible(it.value, targetDescriptor, useSiteDescriptor, analysisContext.languageVersionSettings)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,4 +83,4 @@ private fun findContainingNonLocalDeclaration(element: PsiElement): KtCallableDe
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user