summaryrefslogtreecommitdiff
path: root/plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core')
-rw-r--r--plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt4
-rw-r--r--plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt2
-rw-r--r--plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/NameValidators.kt2
-rw-r--r--plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/Utils.kt2
-rw-r--r--plugins/kotlin/core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt55
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
}