Minor. Replace TraitImpl -> DefaultImpls, Trait -> Interface
There are still a lot of trait word entries in the source code, only some of them got replaced here
This commit is contained in:
@@ -17,7 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.backend.common
|
package org.jetbrains.kotlin.backend.common
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.backend.common.bridges.findTraitImplementation
|
import org.jetbrains.kotlin.backend.common.bridges.findInterfaceImplementation
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -105,7 +105,7 @@ object CodegenUtil {
|
|||||||
for (declaration in DescriptorUtils.getAllDescriptors(descriptor.defaultType.memberScope)) {
|
for (declaration in DescriptorUtils.getAllDescriptors(descriptor.defaultType.memberScope)) {
|
||||||
if (declaration !is CallableMemberDescriptor) continue
|
if (declaration !is CallableMemberDescriptor) continue
|
||||||
|
|
||||||
val traitMember = findTraitImplementation(declaration)
|
val traitMember = findInterfaceImplementation(declaration)
|
||||||
if (traitMember == null || Visibilities.isPrivate(traitMember.visibility)) continue
|
if (traitMember == null || Visibilities.isPrivate(traitMember.visibility)) continue
|
||||||
|
|
||||||
assert(traitMember.modality !== Modality.ABSTRACT) { "Cannot delegate to abstract trait method: $declaration" }
|
assert(traitMember.modality !== Modality.ABSTRACT) { "Cannot delegate to abstract trait method: $declaration" }
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class DescriptorBasedFunctionHandle(
|
|||||||
|
|
||||||
override val isDeclaration: Boolean =
|
override val isDeclaration: Boolean =
|
||||||
descriptor.kind.isReal ||
|
descriptor.kind.isReal ||
|
||||||
findTraitImplementation(descriptor) != null
|
findInterfaceImplementation(descriptor) != null
|
||||||
|
|
||||||
override val isAbstract: Boolean =
|
override val isAbstract: Boolean =
|
||||||
descriptor.modality == Modality.ABSTRACT ||
|
descriptor.modality == Modality.ABSTRACT ||
|
||||||
@@ -88,7 +88,7 @@ class DescriptorBasedFunctionHandle(
|
|||||||
* trait implementation should be generated into the class containing the fake override; or null if the given function is not a fake
|
* trait implementation should be generated into the class containing the fake override; or null if the given function is not a fake
|
||||||
* override of any trait implementation or such method was already generated into the superclass or is a method from Any.
|
* override of any trait implementation or such method was already generated into the superclass or is a method from Any.
|
||||||
*/
|
*/
|
||||||
fun findTraitImplementation(descriptor: CallableMemberDescriptor): CallableMemberDescriptor? {
|
fun findInterfaceImplementation(descriptor: CallableMemberDescriptor): CallableMemberDescriptor? {
|
||||||
if (descriptor.kind.isReal) return null
|
if (descriptor.kind.isReal) return null
|
||||||
if (isOrOverridesSynthesized(descriptor)) return null
|
if (isOrOverridesSynthesized(descriptor)) return null
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen<KtClassOrObject> {
|
|||||||
for (DeclarationDescriptor memberDescriptor : DescriptorUtils.getAllDescriptors(descriptor.getDefaultType().getMemberScope())) {
|
for (DeclarationDescriptor memberDescriptor : DescriptorUtils.getAllDescriptors(descriptor.getDefaultType().getMemberScope())) {
|
||||||
if (memberDescriptor instanceof CallableMemberDescriptor) {
|
if (memberDescriptor instanceof CallableMemberDescriptor) {
|
||||||
CallableMemberDescriptor member = (CallableMemberDescriptor) memberDescriptor;
|
CallableMemberDescriptor member = (CallableMemberDescriptor) memberDescriptor;
|
||||||
if (!member.getKind().isReal() && ImplKt.findTraitImplementation(member) == null) {
|
if (!member.getKind().isReal() && ImplKt.findInterfaceImplementation(member) == null) {
|
||||||
if (member instanceof FunctionDescriptor) {
|
if (member instanceof FunctionDescriptor) {
|
||||||
functionCodegen.generateBridges((FunctionDescriptor) member);
|
functionCodegen.generateBridges((FunctionDescriptor) member);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -377,7 +377,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
|
|
||||||
if (declaration instanceof KtClass && ((KtClass) declaration).isInterface()) {
|
if (declaration instanceof KtClass && ((KtClass) declaration).isInterface()) {
|
||||||
Type traitImplType = state.getTypeMapper().mapDefaultImpls(descriptor);
|
Type traitImplType = state.getTypeMapper().mapDefaultImpls(descriptor);
|
||||||
ClassBuilder traitImplBuilder = state.getFactory().newVisitor(JvmDeclarationOriginKt.TraitImpl(declaration, descriptor), traitImplType, declaration.getContainingFile());
|
ClassBuilder traitImplBuilder = state.getFactory().newVisitor(JvmDeclarationOriginKt.DefaultImpls(declaration, descriptor), traitImplType, declaration.getContainingFile());
|
||||||
ClassContext traitImplContext = context.intoAnonymousClass(descriptor, this, OwnerKind.DEFAULT_IMPLS);
|
ClassContext traitImplContext = context.intoAnonymousClass(descriptor, this, OwnerKind.DEFAULT_IMPLS);
|
||||||
new InterfaceImplBodyCodegen(declaration, traitImplContext, traitImplBuilder, state, parentCodegen).generate();
|
new InterfaceImplBodyCodegen(declaration, traitImplContext, traitImplBuilder, state, parentCodegen).generate();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
if (isInterface(descriptor) && !isLocal) {
|
if (isInterface(descriptor) && !isLocal) {
|
||||||
Type defaultImplsType = state.getTypeMapper().mapDefaultImpls(descriptor);
|
Type defaultImplsType = state.getTypeMapper().mapDefaultImpls(descriptor);
|
||||||
ClassBuilder defaultImplsBuilder =
|
ClassBuilder defaultImplsBuilder =
|
||||||
state.getFactory().newVisitor(JvmDeclarationOriginKt.TraitImpl(myClass, descriptor), defaultImplsType, myClass.getContainingFile());
|
state.getFactory().newVisitor(JvmDeclarationOriginKt.DefaultImpls(myClass, descriptor), defaultImplsType, myClass.getContainingFile());
|
||||||
|
|
||||||
CodegenContext parentContext = context.getParentContext();
|
CodegenContext parentContext = context.getParentContext();
|
||||||
assert parentContext != null : "Parent context of interface declaration should not be null";
|
assert parentContext != null : "Parent context of interface declaration should not be null";
|
||||||
@@ -329,7 +329,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String kotlinMarkerInterface : kotlinMarkerInterfaces) {
|
for (String kotlinMarkerInterface : kotlinMarkerInterfaces) {
|
||||||
sw.writeInterface();
|
sw.writeInterface();
|
||||||
sw.writeAsmType(Type.getObjectType(kotlinMarkerInterface));
|
sw.writeAsmType(Type.getObjectType(kotlinMarkerInterface));
|
||||||
@@ -1324,17 +1324,17 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
if (isAnnotationOrJvm6Interface(descriptor, state)) return;
|
if (isAnnotationOrJvm6Interface(descriptor, state)) return;
|
||||||
|
|
||||||
for (Map.Entry<FunctionDescriptor, FunctionDescriptor> entry : CodegenUtil.getNonPrivateTraitMethods(descriptor).entrySet()) {
|
for (Map.Entry<FunctionDescriptor, FunctionDescriptor> entry : CodegenUtil.getNonPrivateTraitMethods(descriptor).entrySet()) {
|
||||||
FunctionDescriptor traitFun = entry.getKey();
|
FunctionDescriptor interfaceFun = entry.getKey();
|
||||||
//skip java 8 default methods
|
//skip java 8 default methods
|
||||||
if (!(traitFun instanceof JavaCallableMemberDescriptor)) {
|
if (!(interfaceFun instanceof JavaCallableMemberDescriptor)) {
|
||||||
generateDelegationToTraitImpl(traitFun, entry.getValue());
|
generateDelegationToDefaultImpl(interfaceFun, entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateDelegationToTraitImpl(@NotNull final FunctionDescriptor traitFun, @NotNull final FunctionDescriptor inheritedFun) {
|
private void generateDelegationToDefaultImpl(@NotNull final FunctionDescriptor traitFun, @NotNull final FunctionDescriptor inheritedFun) {
|
||||||
functionCodegen.generateMethod(
|
functionCodegen.generateMethod(
|
||||||
JvmDeclarationOriginKt.DelegationToTraitImpl(descriptorToDeclaration(traitFun), traitFun),
|
JvmDeclarationOriginKt.DelegationToDefaultImpls(descriptorToDeclaration(traitFun), traitFun),
|
||||||
inheritedFun,
|
inheritedFun,
|
||||||
new FunctionGenerationStrategy.CodegenBased(state) {
|
new FunctionGenerationStrategy.CodegenBased(state) {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.DelegationToTraitImpl
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.DelegationToDefaultImpls
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
@@ -85,19 +85,19 @@ class InterfaceImplBodyCodegen(
|
|||||||
CallableMemberDescriptor.Kind.DECLARATION, true)
|
CallableMemberDescriptor.Kind.DECLARATION, true)
|
||||||
|
|
||||||
if (memberDescriptor is FunctionDescriptor) {
|
if (memberDescriptor is FunctionDescriptor) {
|
||||||
generateDelegationToSuperTraitImpl(copy as FunctionDescriptor, implementation as FunctionDescriptor)
|
generateDelegationToSuperDefaultImpls(copy as FunctionDescriptor, implementation as FunctionDescriptor)
|
||||||
}
|
}
|
||||||
else if (memberDescriptor is PropertyDescriptor) {
|
else if (memberDescriptor is PropertyDescriptor) {
|
||||||
implementation as PropertyDescriptor
|
implementation as PropertyDescriptor
|
||||||
val getter = (copy as PropertyDescriptor).getter
|
val getter = (copy as PropertyDescriptor).getter
|
||||||
val implGetter = implementation.getter
|
val implGetter = implementation.getter
|
||||||
if (getter != null && implGetter != null) {
|
if (getter != null && implGetter != null) {
|
||||||
generateDelegationToSuperTraitImpl(getter, implGetter)
|
generateDelegationToSuperDefaultImpls(getter, implGetter)
|
||||||
}
|
}
|
||||||
val setter = copy.setter
|
val setter = copy.setter
|
||||||
val implSetter = implementation.setter
|
val implSetter = implementation.setter
|
||||||
if (setter != null && implSetter != null) {
|
if (setter != null && implSetter != null) {
|
||||||
generateDelegationToSuperTraitImpl(setter, implSetter)
|
generateDelegationToSuperDefaultImpls(setter, implSetter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,14 +105,14 @@ class InterfaceImplBodyCodegen(
|
|||||||
generateSyntheticAccessors()
|
generateSyntheticAccessors()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateDelegationToSuperTraitImpl(descriptor: FunctionDescriptor, implementation: FunctionDescriptor) {
|
private fun generateDelegationToSuperDefaultImpls(descriptor: FunctionDescriptor, implementation: FunctionDescriptor) {
|
||||||
val delegateTo = firstSuperMethodFromKotlin(descriptor, implementation) as FunctionDescriptor? ?: return
|
val delegateTo = firstSuperMethodFromKotlin(descriptor, implementation) as FunctionDescriptor? ?: return
|
||||||
|
|
||||||
// We can't call super methods from Java 1.8 interfaces because that requires INVOKESPECIAL which is forbidden from TImpl class
|
// We can't call super methods from Java 1.8 interfaces because that requires INVOKESPECIAL which is forbidden from TImpl class
|
||||||
if (delegateTo is JavaMethodDescriptor) return
|
if (delegateTo is JavaMethodDescriptor) return
|
||||||
|
|
||||||
functionCodegen.generateMethod(
|
functionCodegen.generateMethod(
|
||||||
DelegationToTraitImpl(DescriptorToSourceUtils.descriptorToDeclaration(descriptor), descriptor),
|
DelegationToDefaultImpls(DescriptorToSourceUtils.descriptorToDeclaration(descriptor), descriptor),
|
||||||
descriptor,
|
descriptor,
|
||||||
object : FunctionGenerationStrategy.CodegenBased(state) {
|
object : FunctionGenerationStrategy.CodegenBased(state) {
|
||||||
override fun doGenerateBody(codegen: ExpressionCodegen, signature: JvmMethodSignature) {
|
override fun doGenerateBody(codegen: ExpressionCodegen, signature: JvmMethodSignature) {
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.resolve.calls.checkers.CallCheckerContext
|
|||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
||||||
|
|
||||||
class TraitDefaultMethodCallChecker : CallChecker {
|
class InterfaceDefaultMethodCallChecker : CallChecker {
|
||||||
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
|
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
|
||||||
if (getSuperCallExpression(resolvedCall.call) == null) return
|
if (getSuperCallExpression(resolvedCall.call) == null) return
|
||||||
|
|
||||||
+3
-3
@@ -72,12 +72,12 @@ fun MultifileClass(representativeFile: KtFile?, descriptor: PackageFragmentDescr
|
|||||||
fun MultifileClassPart(file: KtFile, descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin =
|
fun MultifileClassPart(file: KtFile, descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin =
|
||||||
JvmDeclarationOrigin(MULTIFILE_CLASS_PART, file, descriptor)
|
JvmDeclarationOrigin(MULTIFILE_CLASS_PART, file, descriptor)
|
||||||
|
|
||||||
fun TraitImpl(element: KtClassOrObject, descriptor: ClassDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(INTERFACE_DEFAULT_IMPL, element, descriptor)
|
fun DefaultImpls(element: KtClassOrObject, descriptor: ClassDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(INTERFACE_DEFAULT_IMPL, element, descriptor)
|
||||||
fun DelegationToTraitImpl(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin =
|
fun DelegationToDefaultImpls(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin =
|
||||||
JvmDeclarationOrigin(DELEGATION_TO_DEFAULT_IMPLS, element, descriptor)
|
JvmDeclarationOrigin(DELEGATION_TO_DEFAULT_IMPLS, element, descriptor)
|
||||||
|
|
||||||
fun Delegation(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(DELEGATION, element, descriptor)
|
fun Delegation(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(DELEGATION, element, descriptor)
|
||||||
|
|
||||||
fun SamDelegation(descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SAM_DELEGATION, null, descriptor)
|
fun SamDelegation(descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SAM_DELEGATION, null, descriptor)
|
||||||
|
|
||||||
fun Synthetic(element: PsiElement?, descriptor: CallableMemberDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SYNTHETIC, element, descriptor)
|
fun Synthetic(element: PsiElement?, descriptor: CallableMemberDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SYNTHETIC, element, descriptor)
|
||||||
|
|||||||
+1
-1
@@ -47,7 +47,7 @@ object JvmPlatformConfigurator : PlatformConfigurator(
|
|||||||
|
|
||||||
additionalCallCheckers = listOf(
|
additionalCallCheckers = listOf(
|
||||||
JavaAnnotationCallChecker(),
|
JavaAnnotationCallChecker(),
|
||||||
TraitDefaultMethodCallChecker(),
|
InterfaceDefaultMethodCallChecker(),
|
||||||
JavaClassOnCompanionChecker(),
|
JavaClassOnCompanionChecker(),
|
||||||
ProtectedInSuperClassCompanionCallChecker(),
|
ProtectedInSuperClassCompanionCallChecker(),
|
||||||
UnsupportedSyntheticCallableReferenceChecker(),
|
UnsupportedSyntheticCallableReferenceChecker(),
|
||||||
|
|||||||
Reference in New Issue
Block a user