Working recognition of JUnit annotation in MP tests
(cherry picked from commit 3a21781)
This commit is contained in:
+8
-2
@@ -27,12 +27,14 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget
|
|||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||||
import org.jetbrains.kotlin.idea.facet.implementingDescriptors
|
import org.jetbrains.kotlin.idea.facet.implementingDescriptors
|
||||||
import org.jetbrains.kotlin.idea.highlighter.markers.actualsFor
|
|
||||||
import org.jetbrains.kotlin.idea.project.targetPlatform
|
import org.jetbrains.kotlin.idea.project.targetPlatform
|
||||||
import org.jetbrains.kotlin.idea.util.module
|
import org.jetbrains.kotlin.idea.util.module
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered
|
||||||
|
|
||||||
class KotlinMultiplatformJUnitRecognizer : JUnitRecognizer() {
|
class KotlinMultiplatformJUnitRecognizer : JUnitRecognizer() {
|
||||||
override fun isTestAnnotated(method: PsiMethod): Boolean {
|
override fun isTestAnnotated(method: PsiMethod): Boolean {
|
||||||
@@ -54,10 +56,14 @@ class KotlinMultiplatformJUnitRecognizer : JUnitRecognizer() {
|
|||||||
private fun AnnotationWithTarget.isExpectOfAnnotation(fqName: String, implModules: Collection<ModuleDescriptor>): Boolean {
|
private fun AnnotationWithTarget.isExpectOfAnnotation(fqName: String, implModules: Collection<ModuleDescriptor>): Boolean {
|
||||||
val annotationClass = annotation.type.constructor.declarationDescriptor as? ClassifierDescriptorWithTypeParameters ?: return false
|
val annotationClass = annotation.type.constructor.declarationDescriptor as? ClassifierDescriptorWithTypeParameters ?: return false
|
||||||
if (!annotationClass.isExpect) return false
|
if (!annotationClass.isExpect) return false
|
||||||
|
val classId = annotationClass.classId ?: return false
|
||||||
|
val segments = classId.relativeClassName.pathSegments()
|
||||||
|
|
||||||
return implModules
|
return implModules
|
||||||
.any { module ->
|
.any { module ->
|
||||||
module.actualsFor(annotationClass, checkCompatible = false)
|
module
|
||||||
|
.getPackage(classId.packageFqName).memberScope
|
||||||
|
.getDescriptorsFiltered(DescriptorKindFilter.CLASSIFIERS) { it == segments.first() }
|
||||||
.filterIsInstance<TypeAliasDescriptor>()
|
.filterIsInstance<TypeAliasDescriptor>()
|
||||||
.any { it.classDescriptor?.fqNameSafe?.asString() == fqName }
|
.any { it.classDescriptor?.fqNameSafe?.asString() == fqName }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user