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 org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
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 {
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)
}
@@ -1,11 +1,16 @@
import kotlin.concurrent.fixedRateTimer
import kotlin.concurrent.read
import kotlin.concurrent.withLock
import kotlin.concurrent.write
import java.util.ArrayList
import java.util.concurrent.locks.Lock
/**
* Reference to [ArrayList]
* Reference to [fixedRateTimer]
* Reference to [kotlin.concurrent.read]
* Reference to [Lock.withLock]
* Reference to [java.util.concurrent.locks.ReentrantReadWriteLock.write]
*/
fun foo() {
}
@@ -1,5 +1,8 @@
import java.util.ArrayList
import java.util.concurrent.locks.Lock
import kotlin.concurrent.fixedRateTimer
import kotlin.concurrent.withLock
import kotlin.concurrent.write
/**
* Reference to [ArrayList]
@@ -1,11 +1,16 @@
import kotlin.concurrent.fixedRateTimer
import kotlin.concurrent.read
import kotlin.concurrent.withLock
import kotlin.concurrent.write
import java.util.ArrayList
import java.util.concurrent.locks.Lock
/**
* Reference to [ArrayList]
* Reference to [fixedRateTimer]
* Reference to [kotlin.concurrent.read]
* Reference to [Lock.withLock]
* Reference to [java.util.concurrent.locks.ReentrantReadWriteLock.write]
*/
fun foo() {
}