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.findModuleDescriptor
|
||||
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.util.module
|
||||
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.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered
|
||||
|
||||
class KotlinMultiplatformJUnitRecognizer : JUnitRecognizer() {
|
||||
override fun isTestAnnotated(method: PsiMethod): Boolean {
|
||||
@@ -54,10 +56,14 @@ class KotlinMultiplatformJUnitRecognizer : JUnitRecognizer() {
|
||||
private fun AnnotationWithTarget.isExpectOfAnnotation(fqName: String, implModules: Collection<ModuleDescriptor>): Boolean {
|
||||
val annotationClass = annotation.type.constructor.declarationDescriptor as? ClassifierDescriptorWithTypeParameters ?: return false
|
||||
if (!annotationClass.isExpect) return false
|
||||
val classId = annotationClass.classId ?: return false
|
||||
val segments = classId.relativeClassName.pathSegments()
|
||||
|
||||
return implModules
|
||||
.any { module ->
|
||||
module.actualsFor(annotationClass, checkCompatible = false)
|
||||
module
|
||||
.getPackage(classId.packageFqName).memberScope
|
||||
.getDescriptorsFiltered(DescriptorKindFilter.CLASSIFIERS) { it == segments.first() }
|
||||
.filterIsInstance<TypeAliasDescriptor>()
|
||||
.any { it.classDescriptor?.fqNameSafe?.asString() == fqName }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user