New default checks for mixed hierarchies

Old and new schemes
This commit is contained in:
Mikhail Bogdanov
2020-07-16 12:15:06 +02:00
parent de02b31ad7
commit 125c72cb8d
15 changed files with 283 additions and 38 deletions
@@ -0,0 +1,21 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.resolve
import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
interface LanguageVersionSettingsProvider {
fun getModuleLanguageVersionSettings(module: ModuleDescriptor): LanguageVersionSettings?
companion object {
fun getInstance(project: Project): LanguageVersionSettingsProvider? =
ServiceManager.getService(project, LanguageVersionSettingsProvider::class.java)
}
}
@@ -98,13 +98,19 @@ fun getNonPrivateTraitMembersForDelegation(
val result = linkedMapOf<CallableMemberDescriptor, CallableMemberDescriptor>()
for (declaration in DescriptorUtils.getAllDescriptors(descriptor.defaultType.memberScope)) {
if (declaration !is CallableMemberDescriptor) continue
val traitMember = findInterfaceImplementation(declaration, returnImplNotDelegate)
if (traitMember == null ||
Visibilities.isPrivate(traitMember.visibility) ||
traitMember.visibility == Visibilities.INVISIBLE_FAKE
) continue
result[declaration] = traitMember
result[declaration] = getNonPrivateTraitMembersForDelegation(declaration, returnImplNotDelegate) ?: continue
}
return result
}
fun getNonPrivateTraitMembersForDelegation(
descriptor: CallableMemberDescriptor,
returnImplNotDelegate: Boolean = false,
): CallableMemberDescriptor? {
val traitMember = findInterfaceImplementation(descriptor, returnImplNotDelegate)
if (traitMember == null ||
Visibilities.isPrivate(traitMember.visibility) ||
traitMember.visibility == Visibilities.INVISIBLE_FAKE
) return null
return traitMember
}