diff options
Diffstat (limited to 'plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core')
5 files changed, 35 insertions, 30 deletions
diff --git a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt index 6c03786112d2..02ac6173c575 100644 --- a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt +++ b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt @@ -9,10 +9,10 @@ import com.intellij.psi.impl.CompositeShortNamesCache import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.PsiShortNamesCache import com.intellij.psi.stubs.StringStubIndexExtension +import org.jetbrains.kotlin.analysis.decompiler.stub.file.ClsKotlinBinaryClassCache import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.FrontendInternals -import org.jetbrains.kotlin.idea.caches.IDEKotlinBinaryClassCache import org.jetbrains.kotlin.idea.caches.KotlinShortNamesCache import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaMemberDescriptor @@ -606,7 +606,7 @@ class KotlinIndicesHelper( KotlinExceptionWithAttachments("KtElement not inside KtFile ($ktFile, is valid: ${ktFile.isValid})") .withAttachment("file", ktFile) .withAttachment("virtualFile", containingFile.virtualFile) - .withAttachment("compiledFile", IDEKotlinBinaryClassCache.getInstance().isKotlinJvmCompiledFile(containingFile.virtualFile)) + .withAttachment("compiledFile", ClsKotlinBinaryClassCache.getInstance().isKotlinJvmCompiledFile(containingFile.virtualFile)) .withAttachment("element", this) .withAttachment("type", javaClass) .withPsiAttachment("file.kt", ktFile) diff --git a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt index 0b2555b220f1..30000d225081 100644 --- a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt +++ b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.util.getParentResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch -import org.jetbrains.kotlin.types.ErrorUtils +import org.jetbrains.kotlin.types.error.ErrorUtils import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.checker.KotlinTypeChecker diff --git a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/NameValidators.kt b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/NameValidators.kt index a9b0932832da..42ff45262598 100644 --- a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/NameValidators.kt +++ b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/NameValidators.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier import org.jetbrains.kotlin.resolve.source.getPsi -import org.jetbrains.kotlin.types.ErrorUtils +import org.jetbrains.kotlin.types.error.ErrorUtils import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import java.util.* diff --git a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/Utils.kt b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/Utils.kt index 671b847a1580..3bccf37f8e89 100644 --- a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/Utils.kt +++ b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/Utils.kt @@ -8,6 +8,7 @@ import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.analysis.computeTypeInContext import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.safeAnalyzeNonSourceRootCode import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.resolveToDescriptors @@ -17,7 +18,6 @@ import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstanceToExpression import org.jetbrains.kotlin.idea.util.getResolutionScope -import org.jetbrains.kotlin.idea.util.safeAnalyzeNonSourceRootCode import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.CallableId diff --git a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt index 3643f600bc21..3ac48e3b1a6b 100644 --- a/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt +++ b/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.core @@ -36,11 +36,11 @@ import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.OverridingUtil +import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.calls.util.getParameterForArgument import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.calls.util.getValueArgumentsInParentheses import org.jetbrains.kotlin.resolve.calls.util.isFakeElement -import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.checkers.ExplicitApiDeclarationChecker import org.jetbrains.kotlin.resolve.checkers.explicitApiEnabled import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -273,7 +273,7 @@ fun PsiElement.deleteElementAndCleanParent() { // Delete element if it doesn't contain children of a given type private fun <T : PsiElement> deleteChildlessElement(element: PsiElement, childClass: Class<T>) { - if (PsiTreeUtil.getChildrenOfType<T>(element, childClass) == null) { + if (PsiTreeUtil.getChildrenOfType(element, childClass) == null) { element.delete() } } @@ -333,8 +333,9 @@ fun KtModifierListOwner.setVisibility(visibilityModifier: KtModifierKeywordToken if (visibilityModifier == defaultVisibilityKeyword) { // Fake elements do not have ModuleInfo and languageVersionSettings because they can't be analysed // Effectively, this leads to J2K not respecting explicit api mode, but this case seems to be rare anyway. - val explicitVisibilityRequired = !this.isFakeElement && this.languageVersionSettings.explicitApiEnabled - && this.resolveToDescriptorIfAny()?.let { !ExplicitApiDeclarationChecker.explicitVisibilityIsNotRequired(it) } == true + val explicitVisibilityRequired = !this.isFakeElement && + this.languageVersionSettings.explicitApiEnabled && + this.resolveToDescriptorIfAny()?.let { !ExplicitApiDeclarationChecker.explicitVisibilityIsNotRequired(it) } == true if (!explicitVisibilityRequired) { this.visibilityModifierType()?.let { removeModifier(it) } @@ -349,12 +350,16 @@ fun KtModifierListOwner.setVisibility(visibilityModifier: KtModifierKeywordToken fun KtDeclaration.implicitVisibility(): KtModifierKeywordToken? { return when { this is KtPropertyAccessor && isSetter && property.hasModifier(KtTokens.OVERRIDE_KEYWORD) -> { - (property.resolveToDescriptorIfAny() as? PropertyDescriptor)?.overriddenDescriptors?.forEach { - val visibility = it.setter?.visibility?.toKeywordToken() - if (visibility != null) return visibility - } + property.resolveToDescriptorIfAny() + ?.safeAs<PropertyDescriptor>() + ?.overriddenDescriptors?.forEach { + val visibility = it.setter?.visibility?.toKeywordToken() + if (visibility != null) return visibility + } + KtTokens.DEFAULT_VISIBILITY_KEYWORD } + this is KtConstructor<*> -> { // constructors cannot be declared in objects val klass = getContainingClassOrObject() as? KtClass ?: return KtTokens.DEFAULT_VISIBILITY_KEYWORD @@ -364,18 +369,19 @@ fun KtDeclaration.implicitVisibility(): KtModifierKeywordToken? { klass.isSealed() -> if (klass.languageVersionSettings.supportsFeature(LanguageFeature.SealedInterfaces)) KtTokens.PROTECTED_KEYWORD else KtTokens.PRIVATE_KEYWORD + else -> KtTokens.DEFAULT_VISIBILITY_KEYWORD } } + hasModifier(KtTokens.OVERRIDE_KEYWORD) -> { - (resolveToDescriptorIfAny() as? CallableMemberDescriptor) + resolveToDescriptorIfAny()?.safeAs<CallableMemberDescriptor>() ?.overriddenDescriptors ?.let { OverridingUtil.findMaxVisibility(it) } ?.toKeywordToken() } - else -> { - KtTokens.DEFAULT_VISIBILITY_KEYWORD - } + + else -> KtTokens.DEFAULT_VISIBILITY_KEYWORD } } @@ -386,12 +392,9 @@ fun KtModifierListOwner.canBePrivate(): Boolean { if (this is KtDeclaration) { if (hasActualModifier() || isExpectDeclaration()) return false - val containingClassOrObject = containingClassOrObject ?: return true - if (containingClassOrObject is KtClass && - (containingClassOrObject.isInterface() || containingClassOrObject.isAnnotation()) - ) { - return false - } + val containingClassOrObject = containingClassOrObject as? KtClass ?: return true + if (containingClassOrObject.isAnnotation()) return false + if (containingClassOrObject.isInterface() && !hasBody()) return false } return true @@ -400,12 +403,12 @@ fun KtModifierListOwner.canBePrivate(): Boolean { fun KtModifierListOwner.canBePublic(): Boolean = !isSealedClassConstructor() fun KtModifierListOwner.canBeProtected(): Boolean { - val parent = when (this) { - is KtPropertyAccessor -> this.property.parent - else -> this.parent - } - return when (parent) { - is KtClassBody -> parent.parent is KtClass && !this.isFinalClassConstructor() + return when (val parent = if (this is KtPropertyAccessor) this.property.parent else this.parent) { + is KtClassBody -> { + val parentClass = parent.parent as? KtClass + parentClass != null && !parentClass.isInterface() && !this.isFinalClassConstructor() + } + is KtParameterList -> parent.parent is KtPrimaryConstructor is KtClass -> !this.isAnnotationClassPrimaryConstructor() && !this.isFinalClassConstructor() else -> false @@ -417,6 +420,7 @@ fun KtModifierListOwner.canBeInternal(): Boolean { val objectDeclaration = getStrictParentOfType<KtObjectDeclaration>() ?: return false if (objectDeclaration.isCompanion() && hasJvmFieldAnnotation()) return false } + return !isAnnotationClassPrimaryConstructor() && !isSealedClassConstructor() } @@ -488,6 +492,7 @@ fun KtDeclaration.getModalityFromDescriptor(descriptor: DeclarationDescriptor? = if (descriptor is MemberDescriptor) { return mapModality(descriptor.modality) } + return null } |