@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
2222import org.jetbrains.kotlin.descriptors.FunctionDescriptor
2323import org.jetbrains.kotlin.descriptors.isInterface
2424import org.jetbrains.kotlin.descriptors.PropertyDescriptor
25+ import org.jetbrains.kotlin.descriptors.MemberDescriptor
2526import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi
2627import org.jetbrains.kotlin.psi.psiUtil.endOffset
2728import org.jetbrains.kotlin.psi.psiUtil.isAbstract
@@ -112,11 +113,9 @@ private fun getUnimplementedMembersStubs(file: CompiledFile, kotlinClass: KtClas
112113private fun ClassDescriptor.canBeExtended () = this .kind.isInterface ||
113114 this .modality == Modality .ABSTRACT ||
114115 this .modality == Modality .OPEN
115-
116- private fun FunctionDescriptor.canBeOverriden () = (Modality .ABSTRACT == this .modality || Modality .OPEN == this .modality) && Modality .FINAL != this .modality && this .visibility != DescriptorVisibilities .PRIVATE && this .visibility != DescriptorVisibilities .PROTECTED
117-
118- private fun PropertyDescriptor.canBeOverriden () = (Modality .ABSTRACT == this .modality || Modality .OPEN == this .modality) && Modality .FINAL != this .modality && this .visibility != DescriptorVisibilities .PRIVATE && this .visibility != DescriptorVisibilities .PROTECTED
119116
117+ private fun MemberDescriptor.canBeOverriden () = (Modality .ABSTRACT == this .modality || Modality .OPEN == this .modality) && Modality .FINAL != this .modality && this .visibility != DescriptorVisibilities .PRIVATE && this .visibility != DescriptorVisibilities .PROTECTED
118+
120119// interfaces are ClassDescriptors by default. When calling AbstractClass super methods, we get a ClassConstructorDescriptor
121120fun getClassDescriptor (descriptor : DeclarationDescriptor ? ): ClassDescriptor ? =
122121 if (descriptor is ClassDescriptor ) {
@@ -145,24 +144,18 @@ fun getSuperClassTypeProjections(
145144 ? : emptyList()
146145
147146// Checks if the class overrides the given declaration
148- fun overridesDeclaration (kotlinClass : KtClass , descriptor : FunctionDescriptor ): Boolean =
149- kotlinClass.declarations.any {
150- if (it.name == descriptor.name.asString() && it.hasModifier(KtTokens .OVERRIDE_KEYWORD )
151- ) {
152- if (it is KtNamedFunction ) {
153- parametersMatch(it, descriptor)
154- } else {
155- true
156- }
157- } else {
158- false
159- }
147+ fun overridesDeclaration (kotlinClass : KtClass , descriptor : MemberDescriptor ): Boolean =
148+ when (descriptor) {
149+ is FunctionDescriptor -> kotlinClass.declarations.any {
150+ it.name == descriptor.name.asString()
151+ && it.hasModifier(KtTokens .OVERRIDE_KEYWORD )
152+ && ((it as ? KtNamedFunction )?.let { parametersMatch(it, descriptor) } ? : true )
160153 }
161-
162- fun overridesDeclaration (kotlinClass : KtClass , descriptor : PropertyDescriptor ): Boolean =
163- kotlinClass.declarations.any {
154+ is PropertyDescriptor -> kotlinClass.declarations.any {
164155 it.name == descriptor.name.asString() && it.hasModifier(KtTokens .OVERRIDE_KEYWORD )
165156 }
157+ else -> false
158+ }
166159
167160// Checks if two functions have matching parameters
168161private fun parametersMatch (
0 commit comments