KT-27601 keep imports for extension functions used in kdoc

This commit is contained in:
kvirolainen
2020-01-12 11:16:53 +03:00
committed by Vladimir Dolzhenko
parent 423aeb9a08
commit 90cfa80683
4 changed files with 24 additions and 4 deletions
@@ -10,9 +10,7 @@ import com.intellij.psi.*
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.builtins.isExtensionFunctionType import org.jetbrains.kotlin.builtins.isExtensionFunctionType
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
@@ -287,7 +285,16 @@ fun KtExpression.readWriteAccessWithFullExpression(useResolveForReadWrite: Boole
} }
fun KtReference.canBeResolvedViaImport(target: DeclarationDescriptor, bindingContext: BindingContext): Boolean { fun KtReference.canBeResolvedViaImport(target: DeclarationDescriptor, bindingContext: BindingContext): Boolean {
if (this is KDocReference) return element.getQualifiedName().size == 1 if (this is KDocReference) {
val qualifier = element.getQualifier() ?: return true
return if (target.isExtension) {
val elementHasFunctionDescriptor = element.resolveMainReferenceToDescriptors().find { it is FunctionDescriptor } != null
val qualifierHasClassDescriptor = qualifier.resolveMainReferenceToDescriptors().find { it is ClassDescriptor } != null
elementHasFunctionDescriptor && qualifierHasClassDescriptor
} else {
false
}
}
return element.canBeResolvedViaImport(target, bindingContext) return element.canBeResolvedViaImport(target, bindingContext)
} }
@@ -1,11 +1,16 @@
import kotlin.concurrent.fixedRateTimer import kotlin.concurrent.fixedRateTimer
import kotlin.concurrent.read import kotlin.concurrent.read
import kotlin.concurrent.withLock
import kotlin.concurrent.write
import java.util.ArrayList import java.util.ArrayList
import java.util.concurrent.locks.Lock
/** /**
* Reference to [ArrayList] * Reference to [ArrayList]
* Reference to [fixedRateTimer] * Reference to [fixedRateTimer]
* Reference to [kotlin.concurrent.read] * Reference to [kotlin.concurrent.read]
* Reference to [Lock.withLock]
* Reference to [java.util.concurrent.locks.ReentrantReadWriteLock.write]
*/ */
fun foo() { fun foo() {
} }
@@ -1,5 +1,8 @@
import java.util.ArrayList import java.util.ArrayList
import java.util.concurrent.locks.Lock
import kotlin.concurrent.fixedRateTimer import kotlin.concurrent.fixedRateTimer
import kotlin.concurrent.withLock
import kotlin.concurrent.write
/** /**
* Reference to [ArrayList] * Reference to [ArrayList]
@@ -1,11 +1,16 @@
import kotlin.concurrent.fixedRateTimer import kotlin.concurrent.fixedRateTimer
import kotlin.concurrent.read import kotlin.concurrent.read
import kotlin.concurrent.withLock
import kotlin.concurrent.write
import java.util.ArrayList import java.util.ArrayList
import java.util.concurrent.locks.Lock
/** /**
* Reference to [ArrayList] * Reference to [ArrayList]
* Reference to [fixedRateTimer] * Reference to [fixedRateTimer]
* Reference to [kotlin.concurrent.read] * Reference to [kotlin.concurrent.read]
* Reference to [Lock.withLock]
* Reference to [java.util.concurrent.locks.ReentrantReadWriteLock.write]
*/ */
fun foo() { fun foo() {
} }