Replace resolveToDescriptor with unsafeResolveToDescriptor

Now unsafeResolveToDescriptor is equivalent to resolveToDescriptorIfAny
but throws exception in case no descriptor is found.
Old version of resolveToDescriptor is kept intact but made deprecated.
Some clarifying comments were added
This commit is contained in:
Mikhail Glukhikh
2017-09-12 12:15:27 +03:00
parent cd6201c5df
commit 92215b41b9
79 changed files with 196 additions and 183 deletions
@@ -30,15 +30,34 @@ import org.jetbrains.kotlin.resolve.BindingTraceContext
import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException
fun KtElement.getResolutionFacade(): ResolutionFacade =
KotlinCacheService.getInstance(project).getResolutionFacade(listOf(this))
/**
* For local declarations is equivalent to unsafeResolveToDescriptor(bodyResolveMode)
*
* But for non-local declarations it ignores bodyResolveMode and uses LazyDeclarationResolver directly
*/
@Deprecated(message = "This function has unclear semantics. Please use either unsafeResolveToDescriptor or resolveToDescriptorIfAny instead",
replaceWith = ReplaceWith("unsafeResolveToDescriptor"))
fun KtDeclaration.resolveToDescriptor(bodyResolveMode: BodyResolveMode = BodyResolveMode.FULL): DeclarationDescriptor =
getResolutionFacade().resolveToDescriptor(this, bodyResolveMode)
//TODO: BodyResolveMode.PARTIAL is not quite safe!
/**
* This function throws exception when resolveToDescriptorIfAny returns null, otherwise works equivalently.
*/
fun KtDeclaration.unsafeResolveToDescriptor(bodyResolveMode: BodyResolveMode = BodyResolveMode.FULL): DeclarationDescriptor =
resolveToDescriptorIfAny(bodyResolveMode) ?: throw NoDescriptorForDeclarationException(this)
/**
* This function first uses declaration resolvers to resolve this declaration and/or additional declarations (e.g. its parent),
* and then takes the relevant descriptor from binding context.
* The exact set of declarations to resolve depends on bodyResolveMode
*/
fun KtDeclaration.resolveToDescriptorIfAny(bodyResolveMode: BodyResolveMode = BodyResolveMode.PARTIAL): DeclarationDescriptor? {
//TODO: BodyResolveMode.PARTIAL is not quite safe!
val context = analyze(bodyResolveMode)
if (this is KtParameter && this.hasValOrVar()) {
return context.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, this)
@@ -62,7 +62,7 @@ public class QuickFixUtil {
public static KotlinType getDeclarationReturnType(KtNamedDeclaration declaration) {
PsiFile file = declaration.getContainingFile();
if (!(file instanceof KtFile)) return null;
DeclarationDescriptor descriptor = ResolutionUtils.resolveToDescriptor(declaration, BodyResolveMode.FULL);
DeclarationDescriptor descriptor = ResolutionUtils.unsafeResolveToDescriptor(declaration, BodyResolveMode.FULL);
if (!(descriptor instanceof CallableDescriptor)) return null;
KotlinType type = ((CallableDescriptor) descriptor).getReturnType();
if (type instanceof DeferredType) {
@@ -219,7 +219,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
override fun resolveToDescriptor(declaration: KtDeclaration): DeclarationDescriptor? {
try {
return declaration.resolveToDescriptor()
return declaration.unsafeResolveToDescriptor()
}
catch (e: NoDescriptorForDeclarationException) {
return null
@@ -77,7 +77,7 @@ fun PsiMember.getJavaOrKotlinMemberDescriptor(resolutionFacade: ResolutionFacade
return when (callable) {
is PsiMember -> getJavaMemberDescriptor(resolutionFacade)
is KtDeclaration -> {
val descriptor = resolutionFacade?.resolveToDescriptor(callable) ?: callable.resolveToDescriptor()
val descriptor = resolutionFacade?.resolveToDescriptor(callable) ?: callable.unsafeResolveToDescriptor()
if (descriptor is ClassDescriptor && this is PsiMethod) descriptor.unsubstitutedPrimaryConstructor else descriptor
}
else -> null
@@ -26,7 +26,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMember
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.ShortenReferences.Options
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
@@ -113,7 +113,7 @@ fun performDelayedRefactoringRequests(project: Project) {
for (requestForFile in requestsForFile) {
val elementToImport = requestForFile.elementToImportPointer.element?.unwrapped ?: continue
val descriptorToImport = when (elementToImport) {
is KtDeclaration -> elementToImport.resolveToDescriptor(BodyResolveMode.PARTIAL)
is KtDeclaration -> elementToImport.unsafeResolveToDescriptor(BodyResolveMode.PARTIAL)
is PsiMember -> elementToImport.getJavaMemberDescriptor()
else -> null
} ?: continue
@@ -20,7 +20,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.stubindex.*
@@ -50,7 +50,7 @@ class IdeSampleResolutionService(val project: Project) : SampleResolutionService
val descriptors = (functions + classes)
.filter { it.fqName == targetFqName }
.map { it.resolveToDescriptor(BodyResolveMode.PARTIAL) } // TODO Filter out not visible due dependencies config descriptors
.map { it.unsafeResolveToDescriptor(BodyResolveMode.PARTIAL) } // TODO Filter out not visible due dependencies config descriptors
.toList()
if (descriptors.isNotEmpty())
return descriptors
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.asJava.toLightMethods
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.isOverridable
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.isOverridable
import org.jetbrains.kotlin.idea.search.allScope
import org.jetbrains.kotlin.idea.search.excludeKotlinSources
@@ -122,13 +122,13 @@ private fun forEachKotlinOverride(
scope: SearchScope,
processor: (superMember: PsiElement, overridingMember: PsiElement) -> Boolean
) {
val baseClassDescriptor = runReadAction { ktClass.resolveToDescriptor() as ClassDescriptor }
val baseDescriptors = runReadAction { members.mapNotNull { it.resolveToDescriptor() as? CallableMemberDescriptor }.filter { it.isOverridable } }
val baseClassDescriptor = runReadAction { ktClass.unsafeResolveToDescriptor() as ClassDescriptor }
val baseDescriptors = runReadAction { members.mapNotNull { it.unsafeResolveToDescriptor() as? CallableMemberDescriptor }.filter { it.isOverridable } }
if (baseDescriptors.isEmpty()) return
HierarchySearchRequest(ktClass, scope.restrictToKotlinSources(), true).searchInheritors().forEach {
val inheritor = (it as? KtLightClass)?.kotlinOrigin ?: return@forEach
val inheritorDescriptor = runReadAction { inheritor.resolveToDescriptor() as ClassDescriptor }
val inheritorDescriptor = runReadAction { inheritor.unsafeResolveToDescriptor() as ClassDescriptor }
val substitutor = getTypeSubstitutor(baseClassDescriptor.defaultType, inheritorDescriptor.defaultType) ?: return@forEach
baseDescriptors.forEach {
val superMember = it.source.getPsi()!!
@@ -35,7 +35,7 @@ import org.jetbrains.android.util.AndroidUtils
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor
import org.jetbrains.kotlin.psi.KtClass
@@ -50,7 +50,7 @@ import org.jetbrains.kotlin.resolve.source.PsiSourceFile
internal fun KtClass.findComponentDeclarationInManifest(manifest: Manifest): AndroidAttributeValue<PsiClass>? {
val application = manifest.application ?: return null
val type = (resolveToDescriptor(BodyResolveMode.PARTIAL) as? ClassDescriptor)?.defaultType ?: return null
val type = (unsafeResolveToDescriptor(BodyResolveMode.PARTIAL) as? ClassDescriptor)?.defaultType ?: return null
return when {
type.isSubclassOf(AndroidUtils.ACTIVITY_BASE_CLASS_NAME) ->
@@ -35,7 +35,7 @@ import com.intellij.util.Function
import org.jetbrains.android.dom.manifest.Manifest
import org.jetbrains.android.facet.AndroidFacet
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import java.awt.event.MouseEvent
@@ -128,7 +128,7 @@ class KotlinAndroidLineMarkerProvider : LineMarkerProvider {
"android.widget.Adapter")
private fun KtClass.isClassWithLayoutXml(): Boolean {
val type = (resolveToDescriptor(BodyResolveMode.PARTIAL) as? ClassDescriptor)?.defaultType ?: return false
val type = (unsafeResolveToDescriptor(BodyResolveMode.PARTIAL) as? ClassDescriptor)?.defaultType ?: return false
return CLASSES_WITH_LAYOUT_XML.any { type.isSubclassOf(it, true) }
}
}
@@ -37,7 +37,7 @@ import org.jetbrains.android.util.AndroidUtils
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.intentions.SelfTargetingIntention
import org.jetbrains.kotlin.idea.util.application.runWriteAction
@@ -209,7 +209,7 @@ class KotlinAndroidAddStringResource : SelfTargetingIntention<KtLiteralStringTem
private fun KtClassOrObject.isInnerClass() = (this as? KtClass)?.isInner() ?: false
private fun KtFunction.isSubclassExtensionOfAny(baseClasses: Collection<String>): Boolean {
val descriptor = resolveToDescriptor() as FunctionDescriptor
val descriptor = unsafeResolveToDescriptor() as FunctionDescriptor
val extendedTypeDescriptor = descriptor.extensionReceiverParameter?.type?.constructor?.declarationDescriptor
return extendedTypeDescriptor != null && baseClasses.any { extendedTypeDescriptor.isSubclassOf(it) }
}
@@ -237,7 +237,7 @@ class KotlinIndicesHelper(
fun getKotlinEnumsByName(name: String): Collection<DeclarationDescriptor> {
return KotlinClassShortNameIndex.getInstance()[name, project, scope]
.filter { it is KtEnumEntry && it in scope }
.mapNotNull { it.resolveToDescriptor() }
.mapNotNull { it.unsafeResolveToDescriptor() }
.filter(descriptorFilter)
.toSet()
}
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.asJava.toLightElements
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch
@@ -54,7 +54,7 @@ class KotlinNameSuggestionProvider : NameSuggestionProvider {
this += KotlinNameSuggester.getCamelNames(name!!, validator, name.first().isLowerCase())
}
val callableDescriptor = element.resolveToDescriptor(BodyResolveMode.PARTIAL) as CallableDescriptor
val callableDescriptor = element.unsafeResolveToDescriptor(BodyResolveMode.PARTIAL) as CallableDescriptor
val type = callableDescriptor.returnType
if (type != null && !type.isUnit() && !KotlinBuiltIns.isPrimitiveType(type)) {
this += KotlinNameSuggester.suggestNamesByType(type, validator)
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.descriptors.*
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.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.resolve.frontendService
@@ -34,7 +34,6 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoAfter
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoBefore
import org.jetbrains.kotlin.resolve.calls.CallResolver
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
@@ -155,7 +154,7 @@ private fun expectedType(call: Call, bindingContext: BindingContext): KotlinType
}
fun KtCallableDeclaration.canOmitDeclaredType(initializerOrBodyExpression: KtExpression, canChangeTypeToSubtype: Boolean): Boolean {
val declaredType = (resolveToDescriptor() as? CallableDescriptor)?.returnType ?: return false
val declaredType = (unsafeResolveToDescriptor() as? CallableDescriptor)?.returnType ?: return false
val bindingContext = initializerOrBodyExpression.analyze()
val scope = initializerOrBodyExpression.getResolutionScope(bindingContext, initializerOrBodyExpression.getResolutionFacade())
val expressionType = initializerOrBodyExpression.computeTypeInContext(scope) ?: return false
@@ -268,7 +268,7 @@ class KotlinConsoleRunner(
replState.submitLine(psiFile)
configureFileDependencies(psiFile)
val scriptDescriptor = psiFile.script!!.resolveToDescriptor() as? LazyScriptDescriptor ?: error("Failed to analyze line:\n$text")
val scriptDescriptor = psiFile.script!!.unsafeResolveToDescriptor() as? LazyScriptDescriptor ?: error("Failed to analyze line:\n$text")
ForceResolveUtil.forceResolveAllContents(scriptDescriptor)
replState.lineSuccess(psiFile, scriptDescriptor)
@@ -41,7 +41,7 @@ import com.intellij.ui.components.JBList
import com.intellij.util.IncorrectOperationException
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
import org.jetbrains.kotlin.idea.core.insertMember
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject.BodyType
@@ -181,7 +181,7 @@ abstract class KotlinGenerateTestSupportActionBase(
}
val functionInPlace = insertMember(editor, klass, function)
val functionDescriptor = functionInPlace.resolveToDescriptor() as FunctionDescriptor
val functionDescriptor = functionInPlace.unsafeResolveToDescriptor() as FunctionDescriptor
val overriddenDescriptors = functionDescriptor.overriddenDescriptors
val bodyText = when (overriddenDescriptors.size) {
0 -> generateUnsupportedOrSuperCall(project, functionDescriptor, BodyType.EMPTY)
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.insertMembersAfter
import org.jetbrains.kotlin.idea.core.quoteIfNeeded
@@ -160,7 +160,7 @@ class KotlinGenerateToStringAction : KotlinGenerateMemberActionBase<KotlinGenera
val superToString = classDescriptor.getSuperClassOrAny().findDeclaredToString(true)!!
val memberChooserObjects = properties.map { DescriptorMemberChooserObject(it, it.resolveToDescriptor()) }.toTypedArray()
val memberChooserObjects = properties.map { DescriptorMemberChooserObject(it, it.unsafeResolveToDescriptor()) }.toTypedArray()
val headerPanel = ToStringMemberChooserHeaderPanel(!superToString.builtIns.isMemberOfAny(superToString))
val chooser = MemberChooser<DescriptorMemberChooserObject>(memberChooserObjects, true, true, project, false, headerPanel).apply {
title = "Generate toString()"
@@ -18,10 +18,9 @@ package org.jetbrains.kotlin.idea.actions.generate
import com.intellij.codeInsight.CodeInsightBundle
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.Messages
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject
import org.jetbrains.kotlin.idea.core.overrideImplement.generateMember
@@ -51,7 +50,7 @@ fun getPropertiesToUseInGeneratedMember(classOrObject: KtClassOrObject): List<Kt
return ArrayList<KtNamedDeclaration>().apply {
classOrObject.primaryConstructorParameters.filterTo(this) { it.hasValOrVar() }
classOrObject.declarations.filterIsInstance<KtProperty>().filterTo(this) {
val descriptor = it.resolveToDescriptor()
val descriptor = it.unsafeResolveToDescriptor()
when (descriptor) {
is ValueParameterDescriptor -> true
is PropertyDescriptor -> descriptor.getter?.isDefault ?: true
@@ -62,7 +62,7 @@ public class GotoSuperActionHandler implements CodeInsightActionHandler {
KtObjectDeclaration.class);
if (declaration == null) return;
DeclarationDescriptor descriptor = ResolutionUtils.resolveToDescriptor(declaration, BodyResolveMode.PARTIAL);
DeclarationDescriptor descriptor = ResolutionUtils.unsafeResolveToDescriptor(declaration, BodyResolveMode.PARTIAL);
List<PsiElement> superDeclarations = findSuperDeclarations(descriptor);
@@ -29,7 +29,7 @@ public class KtFunctionPsiElementCellRenderer extends DefaultPsiElementCellRende
public String getElementText(PsiElement element) {
if (element instanceof KtNamedFunction) {
KtNamedFunction function = (KtNamedFunction) element;
DeclarationDescriptor descriptor = ResolutionUtils.resolveToDescriptor(function, BodyResolveMode.PARTIAL);
DeclarationDescriptor descriptor = ResolutionUtils.unsafeResolveToDescriptor(function, BodyResolveMode.PARTIAL);
return DescriptorRenderer.SHORT_NAMES_IN_TYPES.render(descriptor);
}
return super.getElementText(element);
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.debugger.breakpoints.dialog
import com.intellij.psi.PsiClass
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.util.DescriptorMemberChooserObject
import org.jetbrains.kotlin.psi.KtProperty
@@ -28,7 +28,7 @@ fun PsiClass.collectProperties(): Array<DescriptorMemberChooserObject> {
val result = arrayListOf<DescriptorMemberChooserObject>()
this.files.forEach {
it.declarations.filterIsInstance<KtProperty>().forEach {
result.add(DescriptorMemberChooserObject(it, it.resolveToDescriptor()))
result.add(DescriptorMemberChooserObject(it, it.unsafeResolveToDescriptor()))
}
}
return result.toTypedArray()
@@ -37,7 +37,7 @@ fun PsiClass.collectProperties(): Array<DescriptorMemberChooserObject> {
val origin = this.kotlinOrigin
if (origin != null) {
return origin.declarations.filterIsInstance<KtProperty>().map {
DescriptorMemberChooserObject(it, it.resolveToDescriptor())
DescriptorMemberChooserObject(it, it.unsafeResolveToDescriptor())
}.toTypedArray()
}
}
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.codegen.inline.KOTLIN_STRATA_NAME
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
import org.jetbrains.kotlin.idea.debugger.*
import org.jetbrains.kotlin.idea.debugger.stepping.DexBytecode.GOTO
@@ -132,7 +132,7 @@ class KotlinSteppingCommandProvider : JvmSteppingCommandProvider() {
}
// Step over calls to lambda arguments in inline function while execution is already in that function
val containingFunctionDescriptor = kotlinSourcePosition.function.resolveToDescriptor()
val containingFunctionDescriptor = kotlinSourcePosition.function.unsafeResolveToDescriptor()
if (InlineUtil.isInline(containingFunctionDescriptor)) {
val inlineArgumentsCallsIfAny = getInlineArgumentsCallsIfAny(sourcePosition, containingFunctionDescriptor)
if (inlineArgumentsCallsIfAny != null && inlineArgumentsCallsIfAny.isNotEmpty()) {
@@ -183,7 +183,7 @@ private fun getInlineFunctionsIfAny(file: KtFile, offset: Int): List<KtNamedFunc
val elementAt = file.findElementAt(offset) ?: return emptyList()
val containingFunction = elementAt.getParentOfType<KtNamedFunction>(false) ?: return emptyList()
val descriptor = containingFunction.resolveToDescriptor()
val descriptor = containingFunction.unsafeResolveToDescriptor()
if (!InlineUtil.isInline(descriptor)) return emptyList()
return DebuggerUtils.analyzeElementWithInline(containingFunction, false).filterIsInstance<KtNamedFunction>()
@@ -24,7 +24,7 @@ import com.intellij.psi.PsiFile
import com.intellij.psi.PsiPackage
import org.jetbrains.kotlin.asJava.elements.KtLightElement
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
@@ -71,7 +71,7 @@ class KotlinFindUsagesProvider : FindUsagesProvider {
is KtProperty -> (element.name ?: "") + (element.containerDescription?.let { " of $it" } ?: "")
is KtFunction -> {
val name = element.name ?: ""
val descriptor = element.resolveToDescriptor() as FunctionDescriptor
val descriptor = element.unsafeResolveToDescriptor() as FunctionDescriptor
val renderer = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES
val paramsDescription = descriptor.valueParameters.joinToString(prefix = "(", postfix = ")") { renderer.renderType(it.type) }
val returnType = descriptor.returnType
@@ -30,7 +30,7 @@ import com.intellij.psi.PsiReference
import com.intellij.psi.util.PsiTreeUtil
import com.intellij.util.ArrayUtil
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations
import org.jetbrains.kotlin.idea.findUsages.KotlinClassFindUsagesOptions
@@ -119,7 +119,7 @@ class KotlinCallerTreeStructure(
override fun buildChildren(nodeDescriptor: HierarchyNodeDescriptor): Array<Any> {
val element = nodeDescriptor.psiElement as? KtDeclaration ?: return ArrayUtil.EMPTY_OBJECT_ARRAY
val callerToDescriptorMap = Maps.newHashMap<PsiElement, NodeDescriptor<*>>()
val descriptor = element.resolveToDescriptor()
val descriptor = element.unsafeResolveToDescriptor()
if (descriptor is CallableMemberDescriptor) {
return descriptor.getDeepestSuperDeclarations().flatMap { rootDescriptor ->
val rootElement = DescriptorToSourceUtilsIde.getAnyDeclaration(myProject, rootDescriptor)
@@ -29,7 +29,7 @@ import com.intellij.ui.LayeredIcon
import com.intellij.ui.RowIcon
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
import org.jetbrains.kotlin.resolve.DescriptorUtils
@@ -51,7 +51,7 @@ class KotlinOverrideHierarchyNodeDescriptor (
private fun resolveToDescriptor(psiElement: PsiElement): DeclarationDescriptor? {
return when (psiElement) {
is KtNamedDeclaration -> psiElement.resolveToDescriptor()
is KtNamedDeclaration -> psiElement.unsafeResolveToDescriptor()
is PsiMember -> psiElement.getJavaMemberDescriptor()
else -> null
}
@@ -20,7 +20,7 @@ import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator
import com.intellij.ide.util.DefaultPsiElementCellRenderer
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.toDescriptor
import org.jetbrains.kotlin.idea.highlighter.allImplementingCompatibleModules
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -85,7 +85,7 @@ private fun DeclarationDescriptor.headerImplementations(): Collection<Declaratio
}
internal fun KtDeclaration.headerImplementations(): Set<KtDeclaration> {
return resolveToDescriptor().headerImplementations().mapNotNullTo(LinkedHashSet()) {
return unsafeResolveToDescriptor().headerImplementations().mapNotNullTo(LinkedHashSet()) {
DescriptorToSourceUtils.descriptorToDeclaration(it) as? KtDeclaration
}
}
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.core.targetDescriptors
import org.jetbrains.kotlin.idea.imports.importableFqName
@@ -189,7 +189,7 @@ class ConflictingExtensionPropertyInspection : AbstractKotlinInspection(), Clean
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
val declaration = element ?: return
val fqName = declaration.resolveToDescriptor(BodyResolveMode.PARTIAL).importableFqName
val fqName = declaration.unsafeResolveToDescriptor(BodyResolveMode.PARTIAL).importableFqName
if (fqName != null) {
ProgressManager.getInstance().run(
object : Task.Modal(project, "Searching for imports to delete", true) {
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.replaced
@@ -119,7 +119,7 @@ class ConvertFunctionToPropertyIntention : SelfTargetingIntention<KtNamedFunctio
if (callable is KtNamedFunction) {
if (callable.typeReference == null) {
val functionDescriptor = callable.resolveToDescriptor(BodyResolveMode.PARTIAL) as FunctionDescriptor
val functionDescriptor = callable.unsafeResolveToDescriptor(BodyResolveMode.PARTIAL) as FunctionDescriptor
val type = functionDescriptor.returnType
val typeToInsert = when {
type == null || type.isError -> null
@@ -29,7 +29,7 @@ import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.*
import org.jetbrains.kotlin.idea.refactoring.CallableRefactoring
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.explicateReceiverOf
@@ -320,7 +320,7 @@ class ConvertFunctionTypeParameterToReceiverIntention : SelfTargetingRangeIntent
val function: KtFunction
) {
val isFirstParameter: Boolean get() = typeParameterIndex == 0
val functionDescriptor by lazy { function.resolveToDescriptor() as FunctionDescriptor }
val functionDescriptor by lazy { function.unsafeResolveToDescriptor() as FunctionDescriptor }
}
private fun KtTypeReference.getConversionData(): ConversionData? {
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.builtins.getReceiverTypeFromFunctionType
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.*
import org.jetbrains.kotlin.idea.refactoring.CallableRefactoring
@@ -57,7 +57,7 @@ class ConvertFunctionTypeReceiverToParameterIntention : SelfTargetingRangeIntent
val lambdaReceiverType: KotlinType,
val function: KtFunction
) {
val functionDescriptor by lazy { function.resolveToDescriptor() as FunctionDescriptor }
val functionDescriptor by lazy { function.unsafeResolveToDescriptor() as FunctionDescriptor }
}
class FunctionDefinitionInfo(element: KtFunction) : AbstractProcessableUsageInfo<KtFunction, ConversionData>(element) {
@@ -25,7 +25,7 @@ import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively
@@ -78,7 +78,7 @@ class MoveMemberOutOfCompanionObjectIntention : SelfTargetingRangeIntention<KtNa
return
}
val targetClassDescriptor = runReadAction { targetClass.resolveToDescriptor() as ClassDescriptor }
val targetClassDescriptor = runReadAction { targetClass.unsafeResolveToDescriptor() as ClassDescriptor }
val conflicts = MultiMap<PsiElement, String>()
@@ -111,7 +111,7 @@ class MoveMemberOutOfCompanionObjectIntention : SelfTargetingRangeIntention<KtNa
}
runReadAction {
val callableDescriptor = element.resolveToDescriptor() as CallableMemberDescriptor
val callableDescriptor = element.unsafeResolveToDescriptor() as CallableMemberDescriptor
targetClassDescriptor.findCallableMemberBySignature(callableDescriptor)?.let {
DescriptorToSourceUtilsIde.getAnyDeclaration(project, it)
}?.let {
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptorWithResolutionScopes
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.*
import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively
@@ -88,7 +88,7 @@ class MoveMemberToCompanionObjectIntention : SelfTargetingRangeIntention<KtNamed
private fun getNameSuggestionsForOuterInstance(element: KtNamedDeclaration): List<String> {
val containingClass = element.containingClassOrObject as KtClass
val containingClassDescriptor = containingClass.resolveToDescriptor() as ClassDescriptorWithResolutionScopes
val containingClassDescriptor = containingClass.unsafeResolveToDescriptor() as ClassDescriptorWithResolutionScopes
val companionDescriptor = containingClassDescriptor.companionObjectDescriptor
val companionMemberScope = (companionDescriptor ?: containingClassDescriptor).scopeForMemberDeclarationResolution
val validator = CollectingNameValidator(element.getValueParameters().mapNotNull { it.name }) {
@@ -166,7 +166,7 @@ class MoveMemberToCompanionObjectIntention : SelfTargetingRangeIntention<KtNamed
val parameterList = element.valueParameterList!!
val parameters = parameterList.parameters
val newParamType = (containingClass.resolveToDescriptor() as ClassDescriptor).defaultType
val newParamType = (containingClass.unsafeResolveToDescriptor() as ClassDescriptor).defaultType
nameSuggestions = getNameSuggestionsForOuterInstance(element)
@@ -238,7 +238,7 @@ class MoveMemberToCompanionObjectIntention : SelfTargetingRangeIntention<KtNamed
}
private fun hasTypeParameterReferences(containingClass: KtClassOrObject, element: KtNamedDeclaration): Boolean {
val containingClassDescriptor = containingClass.resolveToDescriptor()
val containingClassDescriptor = containingClass.unsafeResolveToDescriptor()
return element.collectDescendantsOfType<KtTypeReference> {
val referencedDescriptor = it.analyze(BodyResolveMode.PARTIAL)[BindingContext.TYPE, it]?.constructor?.declarationDescriptor
referencedDescriptor is TypeParameterDescriptor && referencedDescriptor.containingDeclaration == containingClassDescriptor
@@ -285,8 +285,8 @@ class MoveMemberToCompanionObjectIntention : SelfTargetingRangeIntention<KtNamed
val conflicts = MultiMap<PsiElement, String>()
containingClass.companionObjects.firstOrNull()?.let { companion ->
val companionDescriptor = companion.resolveToDescriptor() as ClassDescriptor
val callableDescriptor = element.resolveToDescriptor() as CallableMemberDescriptor
val companionDescriptor = companion.unsafeResolveToDescriptor() as ClassDescriptor
val callableDescriptor = element.unsafeResolveToDescriptor() as CallableMemberDescriptor
companionDescriptor.findCallableMemberBySignature(callableDescriptor)?.let {
DescriptorToSourceUtilsIde.getAnyDeclaration(project, it)
}?.let {
@@ -31,7 +31,7 @@ import com.intellij.psi.search.searches.ReferencesSearch
import com.intellij.util.SmartList
import org.jetbrains.kotlin.asJava.toLightMethods
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.*
import org.jetbrains.kotlin.idea.highlighter.markers.headerImplementations
import org.jetbrains.kotlin.idea.highlighter.markers.isHeaderOrHeaderClassMember
@@ -111,7 +111,7 @@ class ConvertMemberToExtensionIntention : SelfTargetingRangeIntention<KtCallable
element: KtCallableDeclaration,
allowHeader: Boolean
): Pair<KtCallableDeclaration, KtExpression?> {
val descriptor = element.resolveToDescriptor()
val descriptor = element.unsafeResolveToDescriptor()
val containingClass = descriptor.containingDeclaration as ClassDescriptor
val isEffectiveHeader = allowHeader && element.isHeaderOrHeaderClassMember()
@@ -224,7 +224,7 @@ class ConvertMemberToExtensionIntention : SelfTargetingRangeIntention<KtCallable
}
if (ktFilesToAddImports.isNotEmpty()) {
val newDescriptor = extension.resolveToDescriptor()
val newDescriptor = extension.unsafeResolveToDescriptor()
val importInsertHelper = ImportInsertHelper.getInstance(project)
for (ktFileToAddImport in ktFilesToAddImports) {
importInsertHelper.importDescriptor(ktFileToAddImport, newDescriptor)
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.intentions.loopToCallChain.result
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.imports.importableFqName
import org.jetbrains.kotlin.idea.intentions.loopToCallChain.*
import org.jetbrains.kotlin.idea.intentions.loopToCallChain.sequence.*
@@ -180,7 +180,7 @@ class AddToCollectionTransformation(
}
private fun canChangeInitializerType(initialization: VariableInitialization, newTypeFqName: FqName, loop: KtForExpression): Boolean {
val currentType = (initialization.variable.resolveToDescriptor() as VariableDescriptor).type
val currentType = (initialization.variable.unsafeResolveToDescriptor() as VariableDescriptor).type
if ((currentType.constructor.declarationDescriptor as? ClassDescriptor)?.importableFqName == newTypeFqName) return true // already of the required type
// we do not change explicit type
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.idea.intentions.loopToCallChain.result
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isNullExpression
import org.jetbrains.kotlin.idea.intentions.loopToCallChain.*
import org.jetbrains.kotlin.idea.intentions.loopToCallChain.sequence.Condition
@@ -249,7 +249,7 @@ object FindTransformationMatcher : TransformationMatcher {
}
else {
val inputVariableCanHoldNull = (inputVariable.resolveToDescriptor() as VariableDescriptor).type.nullability() != TypeNullability.NOT_NULL
val inputVariableCanHoldNull = (inputVariable.unsafeResolveToDescriptor() as VariableDescriptor).type.nullability() != TypeNullability.NOT_NULL
fun FindOperationGenerator.useElvisOperatorIfNeeded(): FindOperationGenerator? {
if (valueIfNotFound.isNullExpression()) return this
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.ReadValueInstructio
import org.jetbrains.kotlin.cfg.pseudocodeTraverser.TraverseInstructionResult
import org.jetbrains.kotlin.cfg.pseudocodeTraverser.traverseFollowingInstructions
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.intentions.loopToCallChain.*
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
@@ -73,7 +73,7 @@ object IntroduceIndexMatcher : TransformationMatcher {
val incrementInstruction = pseudocode.instructionForElement(incrementExpression)!!
if (!isAlwaysReachedOrExitedLoop(firstInstruction, incrementInstruction, state.outerLoop, state.innerLoop)) return null
val variableDescriptor = variable.resolveToDescriptor() as VariableDescriptor
val variableDescriptor = variable.unsafeResolveToDescriptor() as VariableDescriptor
if (isAccessedAfter(variableDescriptor, incrementInstruction, state.innerLoop)) return null // index accessed inside loop after increment
val restStatements = state.statements - incrementExpression // if it is among statements then drop it, otherwise "index++" will be replaced with "index" by generateLambda()
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors.COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
@@ -74,7 +74,7 @@ abstract class ChangeCallableReturnTypeFix(
val element = element!!
val name = element.name
if (name != null) {
val container = element.resolveToDescriptor().containingDeclaration as? ClassDescriptor
val container = element.unsafeResolveToDescriptor().containingDeclaration as? ClassDescriptor
val containerName = container?.name?.takeUnless { it.isSpecial }?.asString()
val fullName = if (containerName != null) "'$containerName.$name'" else "'$name'"
if (element is KtParameter) {
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.runSynchronouslyWithProgress
import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest
@@ -86,7 +86,7 @@ class ChangeSuspendInHierarchyFix(
val progressIndicator = ProgressManager.getInstance().progressIndicator
val function = element ?: return emptySet()
val functionDescriptor = function.resolveToDescriptor() as FunctionDescriptor
val functionDescriptor = function.unsafeResolveToDescriptor() as FunctionDescriptor
val baseFunctionDescriptors = functionDescriptor.findTopMostOverriddables()
baseFunctionDescriptors.forEach { baseFunctionDescriptor ->
@@ -98,7 +98,7 @@ class ChangeSuspendInHierarchyFix(
val classes = listOf(baseClass) + HierarchySearchRequest(baseClass, baseClass.useScope).searchInheritors()
classes.mapNotNullTo(result) {
val subClass = it.unwrapped as? KtClassOrObject ?: return@mapNotNullTo null
val classDescriptor = subClass.resolveToDescriptor() as ClassDescriptor
val classDescriptor = subClass.unsafeResolveToDescriptor() as ClassDescriptor
val substitutor = getTypeSubstitutor(baseClassDescriptor.defaultType, classDescriptor.defaultType)
?: return@mapNotNullTo null
val signatureInSubClass = baseFunctionDescriptor.substitute(substitutor) as FunctionDescriptor
@@ -181,7 +181,7 @@ class ChangeSuspendInHierarchyFix(
override fun doCreateActions(diagnostic: Diagnostic): List<IntentionAction> {
val currentFunction = diagnostic.psiElement as? KtNamedFunction ?: return emptyList()
val currentDescriptor = currentFunction.resolveToDescriptor() as FunctionDescriptor
val currentDescriptor = currentFunction.unsafeResolveToDescriptor() as FunctionDescriptor
Errors.CONFLICTING_OVERLOADS.cast(diagnostic).a.getOverridables(currentDescriptor).ifEmpty { return emptyList() }
return listOf(
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
@@ -49,7 +49,7 @@ open class ChangeVariableTypeFix(element: KtVariableDeclaration, type: KotlinTyp
val element = element!!
val name = element.name
return if (name != null) {
val container = element.resolveToDescriptor().containingDeclaration as? ClassDescriptor
val container = element.unsafeResolveToDescriptor().containingDeclaration as? ClassDescriptor
val containerName = container?.name?.takeUnless { it.isSpecial }?.asString()
if (containerName != null) "'$containerName.$name'" else "'$name'"
}
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.moveCaret
import org.jetbrains.kotlin.idea.quickfix.quickfixUtil.createIntentionForFirstParentOfType
import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor
@@ -48,7 +48,7 @@ class InsertDelegationCallQuickfix(val isThis: Boolean, element: KtSecondaryCons
val newDelegationCall = element.replaceImplicitDelegationCallWithExplicit(isThis)
val resolvedCall = newDelegationCall.getResolvedCall(newDelegationCall.analyze())
val descriptor = element.resolveToDescriptor()
val descriptor = element.unsafeResolveToDescriptor()
// if empty call is ok and it's resolved to another constructor, do not move caret
if (resolvedCall?.isReallySuccess() ?: false && resolvedCall!!.candidateDescriptor.original != descriptor) return
@@ -21,7 +21,7 @@ import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtFunctionLiteral
import org.jetbrains.kotlin.psi.KtNamedFunction
@@ -36,7 +36,7 @@ class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixA
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
val element = element ?: return
val parameterDescriptor = element.resolveToDescriptor() as ValueParameterDescriptor
val parameterDescriptor = element.unsafeResolveToDescriptor() as ValueParameterDescriptor
ChangeFunctionSignatureFix.runRemoveParameter(parameterDescriptor, element)
}
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.caches.resolve.analyzeAndGetResult
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.*
import org.jetbrains.kotlin.idea.refactoring.canRefactor
@@ -147,7 +147,7 @@ sealed class CreateCallableFromCallActionFactory<E : KtExpression>(
else {
containingClass = originalExpression.getStrictParentOfType<KtClassOrObject>() as? KtClass ?: return null
if (containingClass is KtEnumEntry) return null
receiverType = (containingClass.resolveToDescriptor() as ClassDescriptor).defaultType
receiverType = (containingClass.unsafeResolveToDescriptor() as ClassDescriptor).defaultType
}
if (!receiverType.isAbstract() && TypeUtils.getAllSupertypes(receiverType).all { !it.isAbstract() }) return null
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.asJava.namedUnwrappedElement
import org.jetbrains.kotlin.asJava.toLightMethods
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.highlighter.markers.headerImplementations
import org.jetbrains.kotlin.idea.highlighter.markers.isHeaderOrHeaderClassMember
@@ -100,7 +100,7 @@ class KotlinChangeSignatureData(
if (primaryDeclaration.isHeaderOrHeaderClassMember()) {
return@flatMapTo primaryDeclaration.headerImplementations().mapNotNull {
val descriptor = it.resolveToDescriptor()
val descriptor = it.unsafeResolveToDescriptor()
val callableDescriptor = when (descriptor) {
is CallableDescriptor -> descriptor
is ClassDescriptor -> descriptor.unsubstitutedPrimaryConstructor ?: return@mapNotNull null
@@ -118,7 +118,7 @@ class KotlinChangeSignatureData(
.mapNotNullTo(HashSet<UsageInfo>()) { overridingMethod ->
if (overridingMethod is KtLightMethod) {
val overridingDeclaration = overridingMethod.namedUnwrappedElement as KtNamedDeclaration
val overridingDescriptor = overridingDeclaration.resolveToDescriptor() as CallableDescriptor
val overridingDescriptor = overridingDeclaration.unsafeResolveToDescriptor() as CallableDescriptor
KotlinCallableDefinitionUsage<PsiElement>(overridingDeclaration, overridingDescriptor, primaryFunction, null)
}
else OverriderUsageInfo(overridingMethod, baseMethod, true, true, true)
@@ -923,7 +923,7 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor {
baseFunction = baseFunction.createPrimaryConstructorIfAbsent()
}
val resolutionFacade = baseFunction.getResolutionFacade()
val baseFunctionDescriptor = baseFunction.resolveToDescriptor() as FunctionDescriptor
val baseFunctionDescriptor = baseFunction.unsafeResolveToDescriptor() as FunctionDescriptor
val methodDescriptor = KotlinChangeSignatureData(baseFunctionDescriptor, baseFunction, listOf(baseFunctionDescriptor))
val dummyClass = JavaPsiFacade.getElementFactory(method.project).createClass("Dummy")
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.hierarchy.calls.CalleeReferenceProcessor
import org.jetbrains.kotlin.idea.hierarchy.calls.KotlinCallHierarchyNodeDescriptor
import org.jetbrains.kotlin.psi.KtClass
@@ -79,8 +79,8 @@ class KotlinMethodNode(
override fun customizeRendererText(renderer: ColoredTreeCellRenderer) {
val descriptor = when (myMethod) {
is KtFunction -> myMethod.resolveToDescriptor() as FunctionDescriptor
is KtClass -> (myMethod.resolveToDescriptor() as ClassDescriptor).unsubstitutedPrimaryConstructor ?: return
is KtFunction -> myMethod.unsafeResolveToDescriptor() as FunctionDescriptor
is KtClass -> (myMethod.unsafeResolveToDescriptor() as ClassDescriptor).unsubstitutedPrimaryConstructor ?: return
is PsiMethod -> myMethod.getJavaMethodDescriptor() ?: return
else -> throw AssertionError("Invalid declaration: ${myMethod.getElementTextWithContext()}")
}
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet
import org.jetbrains.kotlin.idea.core.setVisibility
import org.jetbrains.kotlin.idea.core.toKeywordToken
@@ -61,8 +61,8 @@ class KotlinCallableDefinitionUsage<T : PsiElement>(
val currentCallableDescriptor: CallableDescriptor? by lazy {
val element = declaration
when (element) {
is KtFunction, is KtProperty, is KtParameter -> (element as KtDeclaration).resolveToDescriptor() as CallableDescriptor
is KtClass -> (element.resolveToDescriptor() as ClassDescriptor).unsubstitutedPrimaryConstructor
is KtFunction, is KtProperty, is KtParameter -> (element as KtDeclaration).unsafeResolveToDescriptor() as CallableDescriptor
is KtClass -> (element.unsafeResolveToDescriptor() as ClassDescriptor).unsubstitutedPrimaryConstructor
is PsiMethod -> element.getJavaMethodDescriptor()
else -> null
}
@@ -28,7 +28,7 @@ import com.intellij.psi.PsiComment
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiWhiteSpace
import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.psi.KtClassBody
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtNamedDeclaration
@@ -72,7 +72,7 @@ class MoveDeclarationsCopyPasteProcessor : CopyPastePostProcessor<MoveDeclaratio
if (declarations.any { it.name == null }) return emptyList()
val declarationNames = declarations.map { it.name!! }.toSet()
val stubTexts = declarations.map { MoveDeclarationsTransferableData.STUB_RENDERER.render(it.resolveToDescriptor()) }
val stubTexts = declarations.map { MoveDeclarationsTransferableData.STUB_RENDERER.render(it.unsafeResolveToDescriptor()) }
return listOf(MoveDeclarationsTransferableData(file.virtualFile.url, sourceObjectFqName, stubTexts, declarationNames))
}
@@ -23,7 +23,7 @@ import com.intellij.openapi.util.TextRange
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.shorten.runRefactoringAndKeepDelayedRequests
import org.jetbrains.kotlin.idea.conversion.copy.range
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.*
@@ -73,7 +73,7 @@ class MoveDeclarationsProcessor(
// check that declarations were cut (not copied)
val filteredDeclarations = sourceContainer.declarations.filter { it.name in data.declarationNames }
val stubs = data.stubTexts.toSet()
if (filteredDeclarations.any { MoveDeclarationsTransferableData.STUB_RENDERER.render(it.resolveToDescriptor()) in stubs }) return null
if (filteredDeclarations.any { MoveDeclarationsTransferableData.STUB_RENDERER.render(it.unsafeResolveToDescriptor()) in stubs }) return null
return MoveDeclarationsProcessor(project, sourceContainer, targetPsiFile, declarations, data.stubTexts)
}
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInliner.CallableUsageReplacementStrategy
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
import org.jetbrains.kotlin.psi.KtExpression
@@ -62,7 +62,7 @@ class KotlinInlineFunctionHandler: InlineActionHandler() {
return
}
val descriptor = element.resolveToDescriptor() as SimpleFunctionDescriptor
val descriptor = element.unsafeResolveToDescriptor() as SimpleFunctionDescriptor
val codeToInline = buildCodeToInline(
element,
descriptor.returnType,
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.builtins.isFunctionType
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.replaced
import org.jetbrains.kotlin.idea.imports.importableFqName
@@ -67,7 +67,7 @@ class KotlinInlineTypeAliasHandler : InlineActionHandler() {
val aliasBody = typeAlias.getTypeReference() ?: return
val file = typeAlias.containingKtFile
val typeAliasDescriptor = typeAlias.resolveToDescriptor() as TypeAliasDescriptor
val typeAliasDescriptor = typeAlias.unsafeResolveToDescriptor() as TypeAliasDescriptor
val typeToInline = typeAliasDescriptor.expandedType
val typeConstructorsToInline = typeAliasDescriptor.typeConstructor.parameters.map { it.typeConstructor }
@@ -31,7 +31,7 @@ import com.intellij.refactoring.util.CommonRefactoringUtil
import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.descriptors.ValueDescriptor
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInliner.CodeToInline
import org.jetbrains.kotlin.idea.codeInliner.PropertyUsageReplacementStrategy
import org.jetbrains.kotlin.idea.project.builtIns
@@ -87,7 +87,7 @@ class KotlinInlineValHandler(private val withPrompt: Boolean) : InlineActionHand
val readReplacement: CodeToInline?
val writeReplacement: CodeToInline?
val assignmentToDelete: KtBinaryExpression?
val descriptor = declaration.resolveToDescriptor() as ValueDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as ValueDescriptor
val isTypeExplicit = declaration.typeReference != null
if (getter == null && setter == null) {
val initialization = extractInitialization(declaration, referenceExpressions, project, editor) ?: return
@@ -31,7 +31,7 @@ import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.idea.analysis.analyzeInContext
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInliner.CodeToInline
import org.jetbrains.kotlin.idea.codeInliner.CodeToInlineBuilder
import org.jetbrains.kotlin.idea.core.copied
@@ -134,7 +134,7 @@ internal fun buildCodeToInline(
expectedType = expectedType)
}
val descriptor = declaration.resolveToDescriptor()
val descriptor = declaration.unsafeResolveToDescriptor()
val builder = CodeToInlineBuilder(descriptor as CallableDescriptor, declaration.getResolutionFacade())
if (isBlockBody) {
bodyCopy as KtBlockExpression
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.actions.NewKotlinFileAction
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.codeInsight.shorten.performDelayedRefactoringRequests
import org.jetbrains.kotlin.idea.core.*
@@ -297,7 +297,7 @@ class ExtractSuperRefactoring(
handler.getErrorMessage(originalClass)?.let { throw CommonRefactoringUtil.RefactoringErrorHintException(it) }
val superClassEntry = if (!extractInfo.isInterface) {
val originalClassDescriptor = originalClass.resolveToDescriptor() as ClassDescriptor
val originalClassDescriptor = originalClass.unsafeResolveToDescriptor() as ClassDescriptor
val superClassDescriptor = originalClassDescriptor.getSuperClassNotAny()
originalClass.superTypeListEntries.firstOrNull {
bindingContext[BindingContext.TYPE, it.typeReference]?.constructor?.declarationDescriptor == superClassDescriptor
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
import org.jetbrains.kotlin.idea.core.*
import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle
@@ -458,7 +458,7 @@ open class KotlinIntroduceLambdaParameterHandler(
lambdaExtractionDescriptor: ExtractableCodeDescriptor
): KotlinIntroduceParameterDialog? {
val callable = lambdaExtractionDescriptor.extractionData.targetSibling as KtNamedDeclaration
val descriptor = callable.resolveToDescriptor()
val descriptor = callable.unsafeResolveToDescriptor()
val callableDescriptor = descriptor.toFunctionDescriptor(callable)
val originalRange = lambdaExtractionDescriptor.extractionData.originalRange
val parametersUsages = findInternalUsagesOfParametersAndReceiver(callable, callableDescriptor) ?: return null
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.refactoring.dropOverrideKeywordIfNecessary
import org.jetbrains.kotlin.idea.refactoring.j2k
import org.jetbrains.kotlin.idea.refactoring.changeSignature.*
@@ -54,7 +54,7 @@ class KotlinIntroduceParameterMethodUsageProcessor : IntroduceParameterMethodUsa
private fun createChangeInfo(data: IntroduceParameterData, method: PsiElement): KotlinChangeInfo? {
val psiMethodDescriptor = when (method) {
is KtFunction -> method.resolveToDescriptor() as? FunctionDescriptor
is KtFunction -> method.unsafeResolveToDescriptor() as? FunctionDescriptor
is PsiMethod -> method.getJavaMethodDescriptor()
else -> null
} ?: return null
@@ -24,7 +24,7 @@ import com.intellij.util.containers.LinkedMultiMap
import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.idea.analysis.analyzeInContext
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.CollectingNameValidator
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
@@ -157,7 +157,7 @@ fun IntroduceTypeAliasDescriptor.validate(): IntroduceTypeAliasDescriptorWithCon
fun findDuplicates(typeAlias: KtTypeAlias): Map<KotlinPsiRange, () -> Unit> {
val aliasName = typeAlias.name?.quoteIfNeeded() ?: return emptyMap()
val aliasRange = typeAlias.textRange
val typeAliasDescriptor = typeAlias.resolveToDescriptor() as TypeAliasDescriptor
val typeAliasDescriptor = typeAlias.unsafeResolveToDescriptor() as TypeAliasDescriptor
val unifierParameters = typeAliasDescriptor.declaredTypeParameters.map { UnifierParameter(it, null) }
val unifier = KotlinPsiUnifier(unifierParameters)
@@ -72,7 +72,7 @@ import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.*
@@ -579,7 +579,7 @@ fun createJavaField(property: KtNamedDeclaration, targetClass: PsiClass): PsiFie
}
fun createJavaClass(klass: KtClass, targetClass: PsiClass?, forcePlainClass: Boolean = false): PsiClass {
val kind = if (forcePlainClass) ClassKind.CLASS else (klass.resolveToDescriptor() as ClassDescriptor).kind
val kind = if (forcePlainClass) ClassKind.CLASS else (klass.unsafeResolveToDescriptor() as ClassDescriptor).kind
val factory = PsiElementFactory.SERVICE.getInstance(klass.project)
val className = klass.name!!
@@ -886,7 +886,7 @@ fun checkSuperMethods(
}
val declarationDescriptor = declaration.resolveToDescriptor() as CallableDescriptor
val declarationDescriptor = declaration.unsafeResolveToDescriptor() as CallableDescriptor
if (declarationDescriptor is LocalVariableDescriptor) return listOf(declaration)
@@ -974,6 +974,6 @@ internal fun KtDeclaration.withHeaderImplementations(): List<KtDeclaration> {
}
internal fun KtDeclaration.resolveToHeaderDescriptorIfPossible(): DeclarationDescriptor {
val descriptor = resolveToDescriptor()
val descriptor = unsafeResolveToDescriptor()
return descriptor.liftToHeader() ?: descriptor
}
@@ -21,7 +21,7 @@ import com.intellij.refactoring.classMembers.ClassMembersRefactoringSupport
import com.intellij.refactoring.classMembers.DependentMembersCollectorBase
import com.intellij.refactoring.classMembers.MemberInfoBase
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.refactoring.pullUp.KotlinPullUpData
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.psi.*
@@ -57,7 +57,7 @@ class KotlinClassMembersRefactoringSupport : ClassMembersRefactoringSupport {
if (containingClassOrObject !in possibleContainingClasses) return
if (pullUpData != null) {
val memberDescriptor = referencedMember.resolveToDescriptor() as? CallableMemberDescriptor ?: return
val memberDescriptor = referencedMember.unsafeResolveToDescriptor() as? CallableMemberDescriptor ?: return
val memberInSuper = memberDescriptor.substitute(pullUpData.sourceToTargetClassSubstitutor) ?: return
if (pullUpData.targetClassDescriptor.findCallableMemberBySignature(memberInSuper as CallableMemberDescriptor) != null) return
}
@@ -24,7 +24,7 @@ import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.shorten.isToBeShortened
import org.jetbrains.kotlin.idea.refactoring.move.*
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
@@ -92,7 +92,7 @@ sealed class MoveDeclarationsDelegate {
is KotlinMoveTargetForCompanion -> true
is KotlinMoveTargetForExistingElement -> {
val targetClass = moveTarget.targetElement as? KtClassOrObject ?: return false
val targetClassDescriptor = targetClass.resolveToDescriptor() as ClassDescriptor
val targetClassDescriptor = targetClass.unsafeResolveToDescriptor() as ClassDescriptor
val companionClassDescriptor = companionDescriptor.containingDeclaration as? ClassDescriptor ?: return false
targetClassDescriptor.isSubclassOf(companionClassDescriptor)
}
@@ -139,7 +139,7 @@ sealed class MoveDeclarationsDelegate {
}
if (outerInstanceParameterName != null) {
val type = (containingClassOrObject!!.resolveToDescriptor() as ClassDescriptor).defaultType
val type = (containingClassOrObject!!.unsafeResolveToDescriptor() as ClassDescriptor).defaultType
val parameter = KtPsiFactory(project)
.createParameter("private val $outerInstanceParameterName: ${IdeDescriptorRenderers.SOURCE_CODE.renderType(type)}")
createPrimaryConstructorParameterListIfAbsent().addParameter(parameter).isToBeShortened = true
@@ -332,7 +332,7 @@ class MoveConflictChecker(
if (!declarationToContainers.getOrPut(referencedElement) { HashSet<PsiElement>() }.add(container)) continue
val referencingDescriptor = when (container) {
is KtDeclaration -> container.resolveToDescriptor()
is KtDeclaration -> container.unsafeResolveToDescriptor()
is PsiMember -> container.getJavaMemberDescriptor()
else -> null
} ?: continue
@@ -381,7 +381,7 @@ class MoveConflictChecker(
if (targetVisibility == Visibilities.PUBLIC) return true
val referrer = ref.element.getStrictParentOfType<KtNamedDeclaration>()
val referrerDescriptor = referrer?.resolveToDescriptor() ?: return true
val referrerDescriptor = referrer?.unsafeResolveToDescriptor() ?: return true
if (!isVisibleIn(referrerDescriptor)) return true
@@ -399,7 +399,7 @@ class MoveConflictChecker(
if (isToBeMoved(target)) return@forEach
val targetDescriptor = when (target) {
is KtDeclaration -> target.resolveToDescriptor()
is KtDeclaration -> target.unsafeResolveToDescriptor()
is PsiMember -> target.getJavaMemberDescriptor()
else -> null
} as? DeclarationDescriptorWithVisibility ?: return@forEach
@@ -100,7 +100,7 @@ public class MoveKotlinNestedClassesToUpperLevelDialog extends MoveDialogBase {
this.project = project;
this.innerClass = innerClass;
this.targetContainer = targetContainer;
this.innerClassDescriptor = (ClassDescriptor) ResolutionUtils.resolveToDescriptor(innerClass, BodyResolveMode.FULL);
this.innerClassDescriptor = (ClassDescriptor) ResolutionUtils.unsafeResolveToDescriptor(innerClass, BodyResolveMode.FULL);
setTitle("Move Nested Classes to Upper Level");
init();
packageNameLabel.setLabelFor(packageNameField.getChildComponent());
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.codeInsight.shorten.addDelayedImportRequest
import org.jetbrains.kotlin.idea.imports.importableFqName
@@ -484,7 +484,7 @@ fun traverseOuterInstanceReferences(member: KtNamedDeclaration, stopAtFirst: Boo
val context = member.analyzeFully()
val containingClassOrObject = member.containingClassOrObject ?: return false
val outerClassDescriptor = containingClassOrObject.resolveToDescriptor() as ClassDescriptor
val outerClassDescriptor = containingClassOrObject.unsafeResolveToDescriptor() as ClassDescriptor
var found = false
member.accept(
object : PsiRecursiveElementWalkingVisitor() {
@@ -26,7 +26,7 @@ import com.intellij.refactoring.HelpID
import com.intellij.refactoring.RefactoringBundle
import com.intellij.refactoring.util.CommonRefactoringUtil
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.refactoring.canRefactor
import org.jetbrains.kotlin.idea.refactoring.AbstractPullPushMembersHandler
@@ -71,7 +71,7 @@ class KotlinPullUpHandler : AbstractPullPushMembersHandler(
return
}
val classDescriptor = classOrObject.resolveToDescriptor() as ClassDescriptor
val classDescriptor = classOrObject.unsafeResolveToDescriptor() as ClassDescriptor
val superClasses = classDescriptor.defaultType
.supertypes()
.mapNotNull {
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getJavaClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.getOrCreateCompanionObject
import org.jetbrains.kotlin.idea.refactoring.isInterfaceClass
import org.jetbrains.kotlin.idea.refactoring.j2k
@@ -53,7 +53,7 @@ class JavaToKotlinPushDownDelegate : JavaPushDownDelegate() {
super.checkTargetClassConflicts(targetClass, pushDownData, conflicts, subClassData)
val ktClass = targetClass?.unwrapped as? KtClassOrObject ?: return
val targetClassDescriptor = ktClass.resolveToDescriptor() as ClassDescriptor
val targetClassDescriptor = ktClass.unsafeResolveToDescriptor() as ClassDescriptor
for (memberInfo in pushDownData.membersToMove) {
val member = memberInfo.member ?: continue
checkExternalUsages(conflicts, member, targetClassDescriptor, ktClass.getResolutionFacade())
@@ -65,7 +65,7 @@ class JavaToKotlinPushDownDelegate : JavaPushDownDelegate() {
val subClass = targetClass.unwrapped as? KtClassOrObject ?: return
val resolutionFacade = subClass.getResolutionFacade()
val superClassDescriptor = superClass.getJavaClassDescriptor(resolutionFacade) ?: return
val subClassDescriptor = subClass.resolveToDescriptor() as ClassDescriptor
val subClassDescriptor = subClass.unsafeResolveToDescriptor() as ClassDescriptor
val substitutor = getTypeSubstitutor(superClassDescriptor.defaultType, subClassDescriptor.defaultType) ?: TypeSubstitutor.EMPTY
val psiFactory = KtPsiFactory(subClass)
var hasAbstractMembers = false
@@ -24,17 +24,14 @@ import com.intellij.refactoring.rename.naming.AutomaticRenamer
import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory
import com.intellij.usageView.UsageInfo
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.highlighter.markers.headerDescriptor
import org.jetbrains.kotlin.idea.util.getAllAccessibleFunctions
import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.UserDataProperty
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
@@ -66,7 +63,7 @@ class AutomaticOverloadsRenamer(function: KtNamedFunction, newName: String) : Au
private fun KtNamedFunction.getOverloads(): Collection<FunctionDescriptor> {
val name = nameAsName ?: return emptyList()
val resolutionFacade = getResolutionFacade()
val descriptor = this.resolveToDescriptor() as FunctionDescriptor
val descriptor = this.unsafeResolveToDescriptor() as FunctionDescriptor
val context = resolutionFacade.analyze(this, BodyResolveMode.FULL)
val scope = getResolutionScope(context, resolutionFacade)
val extensionReceiverClass = descriptor.extensionReceiverParameter?.type?.constructor?.declarationDescriptor as? ClassDescriptor
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.asJava.toLightElements
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.unquote
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
@@ -66,7 +66,7 @@ class AutomaticVariableRenamer(
if (parameterOrVariable.typeReference?.isAncestor(usageElement) != true) continue
val descriptor = try {
parameterOrVariable.resolveToDescriptor()
parameterOrVariable.unsafeResolveToDescriptor()
} catch(e: NoDescriptorForDeclarationException) {
LOG.error(e)
continue
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
import org.jetbrains.kotlin.asJava.namedUnwrappedElement
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtConstructor
@@ -113,7 +113,7 @@ class RenameKotlinClassProcessor : RenameKotlinPsiProcessor() {
) {
if (newName == null) return
val declaration = element.namedUnwrappedElement as? KtNamedDeclaration ?: return
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as ClassDescriptor
val collisions = SmartList<UsageInfo>()
checkRedeclarations(descriptor, newName, collisions)
@@ -38,7 +38,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.asJava.namedUnwrappedElement
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.highlighter.markers.liftToHeader
import org.jetbrains.kotlin.idea.refactoring.Pass
import org.jetbrains.kotlin.idea.refactoring.checkSuperMethods
@@ -71,7 +71,7 @@ class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() {
}
private fun getJvmName(element: PsiElement): String? {
val descriptor = (element.unwrapped as? KtFunction)?.resolveToDescriptor() as? FunctionDescriptor ?: return null
val descriptor = (element.unwrapped as? KtFunction)?.unsafeResolveToDescriptor() as? FunctionDescriptor ?: return null
return DescriptorUtils.getJvmName(descriptor)
}
@@ -93,7 +93,7 @@ class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() {
) {
if (newName == null) return
val declaration = element.unwrapped as? KtNamedFunction ?: return
val descriptor = declaration.resolveToDescriptor()
val descriptor = declaration.unsafeResolveToDescriptor()
checkConflictsAndReplaceUsageInfos(element, allRenames, result)
checkRedeclarations(descriptor, newName, result)
}
@@ -22,7 +22,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener
import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.asJava.namedUnwrappedElement
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtParameter
@@ -45,7 +45,7 @@ class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() {
) {
if (newName == null) return
val declaration = element.namedUnwrappedElement as? KtNamedDeclaration ?: return
val descriptor = declaration.resolveToDescriptor() as VariableDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as VariableDescriptor
val collisions = SmartList<UsageInfo>()
checkRedeclarations(descriptor, newName, collisions)
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations
import org.jetbrains.kotlin.idea.core.isEnumCompanionPropertyWithEntryConflict
import org.jetbrains.kotlin.idea.refactoring.checkSuperMethodsWithPopup
@@ -84,7 +84,7 @@ class RenameKotlinPropertyProcessor : RenameKotlinPsiProcessor() {
}
private fun getJvmNames(element: PsiElement): Pair<String?, String?> {
val descriptor = (element.unwrapped as? KtDeclaration)?.resolveToDescriptor() as? PropertyDescriptor ?: return null to null
val descriptor = (element.unwrapped as? KtDeclaration)?.unsafeResolveToDescriptor() as? PropertyDescriptor ?: return null to null
val getterName = descriptor.getter?.let { DescriptorUtils.getJvmName(it) }
val setterName = descriptor.setter?.let { DescriptorUtils.getJvmName(it) }
return getterName to setterName
@@ -199,7 +199,7 @@ class RenameKotlinPropertyProcessor : RenameKotlinPsiProcessor() {
) {
if (newName == null) return
val declaration = element.namedUnwrappedElement as? KtNamedDeclaration ?: return
val descriptor = declaration.resolveToDescriptor() as VariableDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as VariableDescriptor
val collisions = SmartList<UsageInfo>()
checkRedeclarations(descriptor, newName, collisions)
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename
import com.intellij.psi.PsiElement
import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.psi.KtTypeParameter
class RenameKotlinTypeParameterProcessor : RenameKotlinPsiProcessor() {
@@ -32,7 +32,7 @@ class RenameKotlinTypeParameterProcessor : RenameKotlinPsiProcessor() {
) {
if (newName == null) return
val declaration = element as? KtTypeParameter ?: return
val descriptor = declaration.resolveToDescriptor()
val descriptor = declaration.unsafeResolveToDescriptor()
checkRedeclarations(descriptor, newName, result)
}
}
@@ -24,7 +24,7 @@ import com.intellij.usageView.UsageViewUtil
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.analysis.analyzeInContext
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator
import org.jetbrains.kotlin.idea.core.copied
@@ -145,7 +145,7 @@ internal fun checkRedeclarations(
is FunctionDescriptor -> it is KtNamedFunction
else -> false
}
} as? KtDeclaration)?.resolveToDescriptor()
} as? KtDeclaration)?.unsafeResolveToDescriptor()
}
}
}
@@ -322,7 +322,7 @@ internal fun checkNewNameUsagesRetargeting(
newUsages: MutableList<UsageInfo>
) {
val currentName = declaration.name ?: return
val descriptor = declaration.resolveToDescriptor()
val descriptor = declaration.unsafeResolveToDescriptor()
if (declaration is KtParameter && !declaration.hasValOrVar()) {
val ownerFunction = declaration.ownerFunction
@@ -25,7 +25,7 @@ import com.intellij.refactoring.util.MoveRenameUsageInfo
import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.dropDefaultValue
import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle
import org.jetbrains.kotlin.idea.references.AbstractKtReference
@@ -56,7 +56,7 @@ fun checkConflictsAndReplaceUsageInfos(
private fun PsiElement.getOverriddenFunctionWithDefaultValues(allRenames: Map<out PsiElement?, String>): KtNamedFunction? {
val elementsToRename = allRenames.keys.mapNotNull { it?.unwrapped }
val function = unwrapped as? KtNamedFunction ?: return null
val descriptor = function.resolveToDescriptor() as FunctionDescriptor
val descriptor = function.unsafeResolveToDescriptor() as FunctionDescriptor
return descriptor.overriddenDescriptors
.mapNotNull { it.source.getPsi() as? KtNamedFunction }
.firstOrNull { it !in elementsToRename && it.valueParameters.any { it.hasDefaultValue() }}
@@ -24,7 +24,7 @@ import com.intellij.psi.util.PsiFormatUtilBase
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -94,11 +94,11 @@ fun formatPsiMethod(
fun formatJavaOrLightMethod(method: PsiMethod): String {
val originalDeclaration = method.unwrapped
return if (originalDeclaration is KtDeclaration) {
formatFunctionDescriptor(originalDeclaration.resolveToDescriptor())
formatFunctionDescriptor(originalDeclaration.unsafeResolveToDescriptor())
}
else {
formatPsiMethod(method, false, false)
}
}
fun formatClass(classOrObject: KtClassOrObject) = formatClassDescriptor(classOrObject.resolveToDescriptor() as ClassDescriptor)
fun formatClass(classOrObject: KtClassOrObject) = formatClassDescriptor(classOrObject.unsafeResolveToDescriptor() as ClassDescriptor)
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations
import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.psi.KtCallableDeclaration
@@ -40,7 +40,7 @@ class KotlinOverridingMethodsWithGenericsSearcher : QueryExecutor<PsiMethod, Ove
val declaration = method.kotlinOrigin as? KtCallableDeclaration ?: return true
val callDescriptor = runReadAction { declaration.resolveToDescriptor() }
val callDescriptor = runReadAction { declaration.unsafeResolveToDescriptor() }
if (callDescriptor !is CallableDescriptor) return true
// Java overriding method search can't find overloads with primitives types, so
@@ -66,7 +66,7 @@ class KotlinOverridingMethodsWithGenericsSearcher : QueryExecutor<PsiMethod, Ove
val methodsByName = inheritor.findMethodsByName(name, false)
for (lightMethodCandidate in methodsByName) {
val candidateDescriptor = (lightMethodCandidate as? KtLightMethod)?.kotlinOrigin?.resolveToDescriptor() ?: continue
val candidateDescriptor = (lightMethodCandidate as? KtLightMethod)?.kotlinOrigin?.unsafeResolveToDescriptor() ?: continue
if (candidateDescriptor !is CallableMemberDescriptor) continue
val overriddenDescriptors = candidateDescriptor.getDirectlyOverriddenDeclarations()
@@ -21,7 +21,7 @@ import com.intellij.slicer.SliceUsageCellRendererBase
import com.intellij.ui.JBColor
import com.intellij.ui.SimpleTextAttributes
import com.intellij.util.FontUtil
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.parents
@@ -61,7 +61,7 @@ object KotlinSliceUsageCellRenderer : SliceUsageCellRendererBase() {
it is KtDeclarationWithBody ||
it is KtProperty && it.isLocal
} as? KtDeclaration ?: return
val descriptor = declaration.resolveToDescriptor()
val descriptor = declaration.unsafeResolveToDescriptor()
append(" in ${descriptorRenderer.render(descriptor)}", SimpleTextAttributes.GRAY_ATTRIBUTES)
}
}
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.core.isOverridable
import org.jetbrains.kotlin.idea.findUsages.KotlinFunctionFindUsagesOptions
import org.jetbrains.kotlin.idea.findUsages.KotlinPropertyFindUsagesOptions
@@ -72,7 +72,7 @@ private fun KtDeclaration.processHierarchyDownward(scope: SearchScope, processor
private fun KtDeclaration.processHierarchyUpward(scope: AnalysisScope, processor: KtDeclaration.() -> Unit) {
processor()
val descriptor = resolveToDescriptor() as? CallableMemberDescriptor ?: return
val descriptor = unsafeResolveToDescriptor() as? CallableMemberDescriptor ?: return
DescriptorUtils
.getAllOverriddenDescriptors(descriptor)
.mapNotNull { it.source.getPsi() as? KtDeclaration }
@@ -188,7 +188,7 @@ class InflowSlicer(
val bindingContext by lazy { analyzeFully() }
if (hasDelegateExpression()) {
val getter = (resolveToDescriptor() as VariableDescriptorWithAccessors).getter
val getter = (unsafeResolveToDescriptor() as VariableDescriptorWithAccessors).getter
val delegateGetterResolvedCall = getter?.let { bindingContext[BindingContext.DELEGATED_PROPERTY_RESOLVED_CALL, it] }
(delegateGetterResolvedCall?.resultingDescriptor?.source?.getPsi() as? KtDeclarationWithBody)?.passToProcessor()
return
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.checkers;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.rt.execution.junit.FileComparisonFailure;
import com.intellij.spellchecker.inspections.SpellCheckingInspection;
import com.intellij.testFramework.LightProjectDescriptor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils;
import org.jetbrains.kotlin.idea.highlighter.NameHighlighter;
@@ -84,7 +83,7 @@ public abstract class AbstractPsiCheckerTest extends KotlinLightCodeInsightFixtu
@Override
public void visitDeclaration(@NotNull KtDeclaration dcl) {
if (areDescriptorsCreatedForDeclaration(dcl)) {
ResolutionUtils.resolveToDescriptor(dcl, BodyResolveMode.FULL); // check for exceptions
ResolutionUtils.unsafeResolveToDescriptor(dcl, BodyResolveMode.FULL); // check for exceptions
}
dcl.acceptChildren(this, null);
}
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.imports.importableFqName
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
@@ -355,7 +355,7 @@ class C(param1: String = "", param2: Int = 0) {
val function = file.declarations[0] as KtNamedFunction
val functionType = function.valueParameters.first().typeReference!!.typeElement as KtFunctionType
val descriptorsForParameters = functionType.parameters.map { it.resolveToDescriptor() }
val descriptorsForParameters = functionType.parameters.map { it.unsafeResolveToDescriptor() }
assert(
listOf("key", "next", SpecialNames.NO_NAME_PROVIDED.asString()) ==
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.idea.kdoc
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.name.Name
@@ -33,7 +33,7 @@ class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() {
fun testConstructor() {
myFixture.configureByFile(getTestName(false) + ".kt")
val declaration = (myFixture.file as KtFile).declarations[0]
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as ClassDescriptor
val constructorDescriptor = descriptor.unsubstitutedPrimaryConstructor!!
val doc = constructorDescriptor.findKDoc()
Assert.assertEquals("Doc for constructor of class C.", doc!!.getContent())
@@ -42,7 +42,7 @@ class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() {
fun testAnnotated() {
myFixture.configureByFile(getTestName(false) + ".kt")
val declaration = (myFixture.file as KtFile).declarations[0]
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as ClassDescriptor
val overriddenFunctionDescriptor = descriptor.defaultType.memberScope.getContributedFunctions(Name.identifier("xyzzy"), NoLookupLocation.FROM_TEST).single()
val doc = overriddenFunctionDescriptor.findKDoc()
Assert.assertEquals("Doc for method xyzzy", doc!!.getContent())
@@ -51,7 +51,7 @@ class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() {
fun testOverridden() {
myFixture.configureByFile(getTestName(false) + ".kt")
val declaration = (myFixture.file as KtFile).declarations.single { it.name == "Bar" }
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as ClassDescriptor
val overriddenFunctionDescriptor = descriptor.defaultType.memberScope.getContributedFunctions(Name.identifier("xyzzy"), NoLookupLocation.FROM_TEST).single()
val doc = overriddenFunctionDescriptor.findKDoc()
Assert.assertEquals("Doc for method xyzzy", doc!!.getContent())
@@ -60,7 +60,7 @@ class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() {
fun testOverriddenWithSubstitutedType() {
myFixture.configureByFile(getTestName(false) + ".kt")
val declaration = (myFixture.file as KtFile).declarations.single { it.name == "Bar" }
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as ClassDescriptor
val overriddenFunctionDescriptor = descriptor.defaultType.memberScope.getContributedFunctions(Name.identifier("xyzzy"), NoLookupLocation.FROM_TEST).single()
val doc = overriddenFunctionDescriptor.findKDoc()
Assert.assertEquals("Doc for method xyzzy", doc!!.getContent())
@@ -69,7 +69,7 @@ class KDocFinderTest() : LightPlatformCodeInsightFixtureTestCase() {
fun testProperty() {
myFixture.configureByFile(getTestName(false) + ".kt")
val declaration = (myFixture.file as KtFile).declarations.single { it.name == "Foo" }
val descriptor = declaration.resolveToDescriptor() as ClassDescriptor
val descriptor = declaration.unsafeResolveToDescriptor() as ClassDescriptor
val propertyDescriptor = descriptor.defaultType.memberScope.getContributedVariables(Name.identifier("xyzzy"), NoLookupLocation.FROM_TEST).single()
val doc = propertyDescriptor.findKDoc()
Assert.assertEquals("Doc for property xyzzy", doc!!.getContent())