Rename platform to header.

This commit is contained in:
Stanislav Erokhin
2016-12-13 17:59:59 +03:00
parent facee84020
commit 59efedf610
134 changed files with 500 additions and 499 deletions
@@ -78,7 +78,7 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem
super(containingDeclaration, null, Annotations.Companion.getEMPTY(), Modality.FINAL, Visibilities.LOCAL, super(containingDeclaration, null, Annotations.Companion.getEMPTY(), Modality.FINAL, Visibilities.LOCAL,
original.isVar(), Name.identifier("access$" + nameSuffix), original.isVar(), Name.identifier("access$" + nameSuffix),
Kind.DECLARATION, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false, Kind.DECLARATION, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false,
/* isPlatform = */ false, /* isImpl = */ false, /* isExternal = */ false); /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false);
this.calleeDescriptor = original; this.calleeDescriptor = original;
this.superCallTarget = superCallTarget; this.superCallTarget = superCallTarget;
@@ -112,7 +112,7 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
} }
@Override @Override
public boolean isPlatform() { public boolean isHeader() {
return false; return false;
} }
@@ -101,7 +101,7 @@ public class PackageCodegenImpl implements PackageCodegen {
List<KtClassOrObject> classOrObjects = new ArrayList<KtClassOrObject>(); List<KtClassOrObject> classOrObjects = new ArrayList<KtClassOrObject>();
for (KtDeclaration declaration : file.getDeclarations()) { for (KtDeclaration declaration : file.getDeclarations()) {
if (declaration.hasModifier(KtTokens.PLATFORM_KEYWORD)) continue; if (declaration.hasModifier(KtTokens.HEADER_KEYWORD)) continue;
if (declaration instanceof KtProperty || declaration instanceof KtNamedFunction || declaration instanceof KtTypeAlias) { if (declaration instanceof KtProperty || declaration instanceof KtNamedFunction || declaration instanceof KtTypeAlias) {
generatePackagePart = true; generatePackagePart = true;
@@ -92,7 +92,7 @@ public class PackagePartCodegen extends MemberCodegen<KtFile> {
@Override @Override
protected void generateBody() { protected void generateBody() {
for (KtDeclaration declaration : element.getDeclarations()) { for (KtDeclaration declaration : element.getDeclarations()) {
if (declaration.hasModifier(KtTokens.PLATFORM_KEYWORD)) continue; if (declaration.hasModifier(KtTokens.HEADER_KEYWORD)) continue;
if (declaration instanceof KtNamedFunction || declaration instanceof KtProperty || declaration instanceof KtTypeAlias) { if (declaration instanceof KtNamedFunction || declaration instanceof KtProperty || declaration instanceof KtTypeAlias) {
genSimpleMember(declaration); genSimpleMember(declaration);
@@ -73,7 +73,7 @@ object PackagePartClassUtils {
(it is KtProperty || (it is KtProperty ||
it is KtNamedFunction || it is KtNamedFunction ||
it is KtScript || it is KtScript ||
it is KtTypeAlias) && !it.hasModifier(KtTokens.PLATFORM_KEYWORD) it is KtTypeAlias) && !it.hasModifier(KtTokens.HEADER_KEYWORD)
} }
@JvmStatic fun getFilePartShortName(fileName: String): String = @JvmStatic fun getFilePartShortName(fileName: String): String =
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
import org.jetbrains.kotlin.resolve.PlatformConfigurator import org.jetbrains.kotlin.resolve.PlatformConfigurator
import org.jetbrains.kotlin.resolve.calls.checkers.ReifiedTypeParameterSubstitutionChecker import org.jetbrains.kotlin.resolve.calls.checkers.ReifiedTypeParameterSubstitutionChecker
import org.jetbrains.kotlin.resolve.checkers.MissingDependencyClassChecker import org.jetbrains.kotlin.resolve.checkers.MissingDependencyClassChecker
import org.jetbrains.kotlin.resolve.checkers.PlatformImplDeclarationChecker import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker
import org.jetbrains.kotlin.resolve.jvm.JvmOverloadFilter import org.jetbrains.kotlin.resolve.jvm.JvmOverloadFilter
import org.jetbrains.kotlin.resolve.jvm.JvmTypeSpecificityComparator import org.jetbrains.kotlin.resolve.jvm.JvmTypeSpecificityComparator
import org.jetbrains.kotlin.resolve.jvm.RuntimeAssertionsTypeChecker import org.jetbrains.kotlin.resolve.jvm.RuntimeAssertionsTypeChecker
@@ -47,7 +47,7 @@ object JvmPlatformConfigurator : PlatformConfigurator(
JvmSyntheticApplicabilityChecker(), JvmSyntheticApplicabilityChecker(),
StrictfpApplicabilityChecker(), StrictfpApplicabilityChecker(),
AdditionalBuiltInsMemberOverrideDeclarationChecker, AdditionalBuiltInsMemberOverrideDeclarationChecker,
PlatformImplDeclarationChecker() HeaderImplDeclarationChecker()
), ),
additionalCallCheckers = listOf( additionalCallCheckers = listOf(
@@ -280,7 +280,7 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager, private val l
source: SourceElement source: SourceElement
) : SyntheticJavaPropertyDescriptor, PropertyDescriptorImpl( ) : SyntheticJavaPropertyDescriptor, PropertyDescriptorImpl(
containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source, containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source,
/* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false, /* isExternal = */ false /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false
) { ) {
override var getMethod: FunctionDescriptor by Delegates.notNull() override var getMethod: FunctionDescriptor by Delegates.notNull()
@@ -637,7 +637,7 @@ class ControlFlowInformationProvider private constructor(
is KtPrimaryConstructor -> if (!element.hasValOrVar()) { is KtPrimaryConstructor -> if (!element.hasValOrVar()) {
val containingClass = owner.getContainingClassOrObject() val containingClass = owner.getContainingClassOrObject()
val containingClassDescriptor = trace.get(DECLARATION_TO_DESCRIPTOR, containingClass) as? ClassDescriptor val containingClassDescriptor = trace.get(DECLARATION_TO_DESCRIPTOR, containingClass) as? ClassDescriptor
if (!DescriptorUtils.isAnnotationClass(containingClassDescriptor) && containingClassDescriptor?.isPlatform == false && if (!DescriptorUtils.isAnnotationClass(containingClassDescriptor) && containingClassDescriptor?.isHeader == false &&
!DescriptorUtils.isEffectivelyExternal(containingClassDescriptor) !DescriptorUtils.isEffectivelyExternal(containingClassDescriptor)
) { ) {
report(UNUSED_PARAMETER.on(element, variableDescriptor), ctxt) report(UNUSED_PARAMETER.on(element, variableDescriptor), ctxt)
@@ -653,7 +653,7 @@ class ControlFlowInformationProvider private constructor(
if (isMain if (isMain
|| functionDescriptor.isOverridableOrOverrides || functionDescriptor.isOverridableOrOverrides
|| owner.hasModifier(KtTokens.OVERRIDE_KEYWORD) || owner.hasModifier(KtTokens.OVERRIDE_KEYWORD)
|| functionDescriptor.isPlatform || functionDescriptor.isImpl || functionDescriptor.isHeader || functionDescriptor.isImpl
|| DescriptorUtils.isEffectivelyExternal(functionDescriptor) || DescriptorUtils.isEffectivelyExternal(functionDescriptor)
|| OperatorNameConventions.GET_VALUE == functionName || OperatorNameConventions.GET_VALUE == functionName
|| OperatorNameConventions.SET_VALUE == functionName || OperatorNameConventions.SET_VALUE == functionName
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.resolve.VarianceConflictDiagnosticData;
import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData; import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.calls.tower.WrongResolutionToClassifier; import org.jetbrains.kotlin.resolve.calls.tower.WrongResolutionToClassifier;
import org.jetbrains.kotlin.resolve.checkers.PlatformImplDeclarationChecker; import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker;
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData; import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData;
import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.KotlinType;
@@ -499,11 +499,11 @@ public interface Errors {
// Multi-platform projects // Multi-platform projects
DiagnosticFactory0<KtDeclaration> PLATFORM_DECLARATION_WITH_BODY = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0<KtDeclaration> HEADER_DECLARATION_WITH_BODY = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
DiagnosticFactory0<KtParameter> PLATFORM_DECLARATION_WITH_DEFAULT_PARAMETER = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<KtParameter> HEADER_DECLARATION_WITH_DEFAULT_PARAMETER = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtConstructorDelegationCall> PLATFORM_CLASS_CONSTRUCTOR_DELEGATION_CALL = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<KtConstructorDelegationCall> HEADER_CLASS_CONSTRUCTOR_DELEGATION_CALL = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtParameter> PLATFORM_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<KtParameter> HEADER_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtExpression> PLATFORM_PROPERTY_INITIALIZER = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<KtExpression> HEADER_PROPERTY_INITIALIZER = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtTypeAlias> IMPL_TYPE_ALIAS_NOT_TO_CLASS = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0<KtTypeAlias> IMPL_TYPE_ALIAS_NOT_TO_CLASS = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
DiagnosticFactory0<KtTypeAlias> IMPL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0<KtTypeAlias> IMPL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
@@ -511,9 +511,9 @@ public interface Errors {
DiagnosticFactory0<KtTypeAlias> IMPL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0<KtTypeAlias> IMPL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
DiagnosticFactory2<KtDeclaration, MemberDescriptor, DiagnosticFactory2<KtDeclaration, MemberDescriptor,
Map<PlatformImplDeclarationChecker.Compatibility.Incompatible, Collection<MemberDescriptor>>> PLATFORM_DECLARATION_WITHOUT_DEFINITION = Map<HeaderImplDeclarationChecker.Compatibility.Incompatible, Collection<MemberDescriptor>>> HEADER_WITHOUT_IMPLEMENTATION =
DiagnosticFactory2.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory2.create(ERROR, DECLARATION_SIGNATURE);
DiagnosticFactory0<PsiElement> PLATFORM_DEFINITION_WITHOUT_DECLARATION = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<PsiElement> IMPLEMENTATION_WITHOUT_HEADER = DiagnosticFactory0.create(ERROR);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -259,19 +259,19 @@ public class DefaultErrorMessages {
MAP.put(USELESS_VARARG_ON_PARAMETER, "Vararg on this parameter is useless"); MAP.put(USELESS_VARARG_ON_PARAMETER, "Vararg on this parameter is useless");
MAP.put(MULTIPLE_VARARG_PARAMETERS, "Multiple vararg-parameters are prohibited"); MAP.put(MULTIPLE_VARARG_PARAMETERS, "Multiple vararg-parameters are prohibited");
MAP.put(PLATFORM_DECLARATION_WITH_BODY, "Platform declaration must not have a body"); MAP.put(HEADER_DECLARATION_WITH_BODY, "Header declaration must not have a body");
MAP.put(PLATFORM_DECLARATION_WITH_DEFAULT_PARAMETER, "Platform declaration cannot have parameters with default values"); MAP.put(HEADER_DECLARATION_WITH_DEFAULT_PARAMETER, "Header declaration cannot have parameters with default values");
MAP.put(PLATFORM_CLASS_CONSTRUCTOR_DELEGATION_CALL, "Explicit delegation call for constructor of a platform class is not allowed"); MAP.put(HEADER_CLASS_CONSTRUCTOR_DELEGATION_CALL, "Explicit delegation call for constructor of a header class is not allowed");
MAP.put(PLATFORM_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER, "Platform class constructor cannot have a property parameter"); MAP.put(HEADER_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER, "Header class constructor cannot have a property parameter");
MAP.put(PLATFORM_PROPERTY_INITIALIZER, "Platform property cannot have an initializer"); MAP.put(HEADER_PROPERTY_INITIALIZER, "Header property cannot have an initializer");
MAP.put(IMPL_TYPE_ALIAS_NOT_TO_CLASS, "Right-hand side of 'impl' type alias should be a class, not another type alias"); MAP.put(IMPL_TYPE_ALIAS_NOT_TO_CLASS, "Right-hand side of 'impl' type alias should be a class, not another type alias");
MAP.put(IMPL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE, "Aliased class should not have type parameters with declaration-site variance"); MAP.put(IMPL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE, "Aliased class should not have type parameters with declaration-site variance");
MAP.put(IMPL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE, "Right-hand side of 'impl' type alias cannot contain use-site variance or star projections"); MAP.put(IMPL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE, "Right-hand side of 'impl' type alias cannot contain use-site variance or star projections");
MAP.put(IMPL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION, "Type arguments in the right-hand side of 'impl' type alias should be its type parameters in the same order, e.g. 'impl typealias Foo<A, B> = Bar<A, B>'"); MAP.put(IMPL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION, "Type arguments in the right-hand side of 'impl' type alias should be its type parameters in the same order, e.g. 'impl typealias Foo<A, B> = Bar<A, B>'");
MAP.put(PLATFORM_DECLARATION_WITHOUT_DEFINITION, "No definition is found for platform declaration ''{0}''{1}", NAME, PlatformIncompatibilityDiagnosticRenderer.INSTANCE); MAP.put(HEADER_WITHOUT_IMPLEMENTATION, "No implementation is found for header declaration ''{0}''{1}", NAME, PlatformIncompatibilityDiagnosticRenderer.INSTANCE);
MAP.put(PLATFORM_DEFINITION_WITHOUT_DECLARATION, "Modifier 'impl' is only applicable to members that are initially declared in platform-independent code"); MAP.put(IMPLEMENTATION_WITHOUT_HEADER, "Modifier 'impl' is only applicable to members that are initially declared in platform-independent code");
MAP.put(PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT, "Projections are not allowed on type arguments of functions and properties"); MAP.put(PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT, "Projections are not allowed on type arguments of functions and properties");
MAP.put(SUPERTYPE_NOT_INITIALIZED, "This type has a constructor, and thus must be initialized here"); MAP.put(SUPERTYPE_NOT_INITIALIZED, "This type has a constructor, and thus must be initialized here");
@@ -18,14 +18,14 @@ package org.jetbrains.kotlin.diagnostics.rendering
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.descriptors.MemberDescriptor
import org.jetbrains.kotlin.resolve.checkers.PlatformImplDeclarationChecker import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker
object PlatformIncompatibilityDiagnosticRenderer : object PlatformIncompatibilityDiagnosticRenderer :
DiagnosticParameterRenderer<Map<PlatformImplDeclarationChecker.Compatibility.Incompatible, Collection<MemberDescriptor>>> { DiagnosticParameterRenderer<Map<HeaderImplDeclarationChecker.Compatibility.Incompatible, Collection<MemberDescriptor>>> {
private val INDENTATION_UNIT = " " private val INDENTATION_UNIT = " "
override fun render( override fun render(
obj: Map<PlatformImplDeclarationChecker.Compatibility.Incompatible, Collection<MemberDescriptor>>, obj: Map<HeaderImplDeclarationChecker.Compatibility.Incompatible, Collection<MemberDescriptor>>,
renderingContext: RenderingContext renderingContext: RenderingContext
): String { ): String {
if (obj.isEmpty()) return "" if (obj.isEmpty()) return ""
@@ -39,7 +39,7 @@ object PlatformIncompatibilityDiagnosticRenderer :
} }
private fun StringBuilder.render( private fun StringBuilder.render(
map: Map<PlatformImplDeclarationChecker.Compatibility.Incompatible, Collection<MemberDescriptor>>, map: Map<HeaderImplDeclarationChecker.Compatibility.Incompatible, Collection<MemberDescriptor>>,
indent: String, indent: String,
renderDescriptor: (DeclarationDescriptor) -> String renderDescriptor: (DeclarationDescriptor) -> String
) { ) {
@@ -189,7 +189,7 @@ public interface KtTokens {
KtModifierKeywordToken COROUTINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("coroutine"); KtModifierKeywordToken COROUTINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("coroutine");
KtModifierKeywordToken SUSPEND_KEYWORD = KtModifierKeywordToken.softKeywordModifier("suspend"); KtModifierKeywordToken SUSPEND_KEYWORD = KtModifierKeywordToken.softKeywordModifier("suspend");
KtModifierKeywordToken PLATFORM_KEYWORD = KtModifierKeywordToken.softKeywordModifier("platform"); KtModifierKeywordToken HEADER_KEYWORD = KtModifierKeywordToken.softKeywordModifier("header");
KtModifierKeywordToken IMPL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("impl"); KtModifierKeywordToken IMPL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("impl");
TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, INTERFACE_KEYWORD, TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, INTERFACE_KEYWORD,
@@ -212,7 +212,7 @@ public interface KtTokens {
LATEINIT_KEYWORD, LATEINIT_KEYWORD,
DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD,
ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD,
COROUTINE_KEYWORD, SUSPEND_KEYWORD, PLATFORM_KEYWORD, IMPL_KEYWORD COROUTINE_KEYWORD, SUSPEND_KEYWORD, HEADER_KEYWORD, IMPL_KEYWORD
); );
/* /*
@@ -226,7 +226,7 @@ public interface KtTokens {
PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD,
REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATEINIT_KEYWORD, REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATEINIT_KEYWORD,
DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD,
CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD, COROUTINE_KEYWORD, SUSPEND_KEYWORD, PLATFORM_KEYWORD, IMPL_KEYWORD CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD, COROUTINE_KEYWORD, SUSPEND_KEYWORD, HEADER_KEYWORD, IMPL_KEYWORD
}; };
TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY); TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY);
@@ -73,7 +73,7 @@ class SyntheticClassOrObjectDescriptor(
override fun isCompanionObject() = isCompanionObject override fun isCompanionObject() = isCompanionObject
override fun isInner() = false override fun isInner() = false
override fun isData() = false override fun isData() = false
override fun isPlatform() = false override fun isHeader() = false
override fun isImpl() = false override fun isImpl() = false
override fun getCompanionObjectDescriptor() = null override fun getCompanionObjectDescriptor() = null
@@ -169,8 +169,8 @@ public class BodyResolver {
@NotNull KtSecondaryConstructor constructor, @NotNull KtSecondaryConstructor constructor,
@NotNull ClassConstructorDescriptor descriptor @NotNull ClassConstructorDescriptor descriptor
) { ) {
if (descriptor.isPlatform()) { if (descriptor.isHeader()) {
// For platform classes, we do not resolve constructor delegation calls because they are prohibited // For header classes, we do not resolve constructor delegation calls because they are prohibited
return DataFlowInfo.Companion.getEMPTY(); return DataFlowInfo.Companion.getEMPTY();
} }
@@ -367,7 +367,7 @@ public class BodyResolver {
descriptor.getUnsubstitutedPrimaryConstructor() != null && descriptor.getUnsubstitutedPrimaryConstructor() != null &&
superClass.getKind() != ClassKind.INTERFACE && superClass.getKind() != ClassKind.INTERFACE &&
!superClass.getConstructors().isEmpty() && !superClass.getConstructors().isEmpty() &&
!descriptor.isPlatform() && !descriptor.isHeader() &&
!ErrorUtils.isError(superClass) !ErrorUtils.isError(superClass)
) { ) {
trace.report(SUPERTYPE_NOT_INITIALIZED.on(specifier)); trace.report(SUPERTYPE_NOT_INITIALIZED.on(specifier));
@@ -562,8 +562,8 @@ public class BodyResolver {
if (classDescriptor.getConstructors().isEmpty()) { if (classDescriptor.getConstructors().isEmpty()) {
trace.report(ANONYMOUS_INITIALIZER_IN_INTERFACE.on(anonymousInitializer)); trace.report(ANONYMOUS_INITIALIZER_IN_INTERFACE.on(anonymousInitializer));
} }
if (classDescriptor.isPlatform()) { if (classDescriptor.isHeader()) {
trace.report(PLATFORM_DECLARATION_WITH_BODY.on(anonymousInitializer)); trace.report(HEADER_DECLARATION_WITH_BODY.on(anonymousInitializer));
} }
} }
@@ -78,12 +78,12 @@ class DeclarationResolver(
for ((fqName, declarationsOrPackageDirectives) in topLevelFqNames.asMap()) { for ((fqName, declarationsOrPackageDirectives) in topLevelFqNames.asMap()) {
if (fqName.isRoot) continue if (fqName.isRoot) continue
// TODO: report error on platform class and impl val, or vice versa // TODO: report error on header class and impl val, or vice versa
val (platform, impl) = val (header, impl) =
getTopLevelDescriptorsByFqName(topLevelDescriptorProvider, fqName, NoLookupLocation.WHEN_CHECK_REDECLARATIONS) getTopLevelDescriptorsByFqName(topLevelDescriptorProvider, fqName, NoLookupLocation.WHEN_CHECK_REDECLARATIONS)
.partition { it is MemberDescriptor && it.isPlatform } .partition { it is MemberDescriptor && it.isHeader }
for (descriptors in listOf(platform, impl)) { for (descriptors in listOf(header, impl)) {
if (descriptors.size > 1) { if (descriptors.size > 1) {
for (directive in declarationsOrPackageDirectives) { for (directive in declarationsOrPackageDirectives) {
val reportAt = (directive as? KtPackageDirective)?.nameIdentifier ?: directive val reportAt = (directive as? KtPackageDirective)?.nameIdentifier ?: directive
@@ -264,20 +264,20 @@ class DeclarationsChecker(
identifierChecker.checkDeclaration(declaration, trace) identifierChecker.checkDeclaration(declaration, trace)
checkVarargParameters(trace, constructorDescriptor) checkVarargParameters(trace, constructorDescriptor)
checkConstructorVisibility(constructorDescriptor, declaration) checkConstructorVisibility(constructorDescriptor, declaration)
checkPlatformClassConstructor(constructorDescriptor, declaration) checkHeaderClassConstructor(constructorDescriptor, declaration)
} }
private fun checkPlatformClassConstructor(constructorDescriptor: ClassConstructorDescriptor, declaration: KtConstructor<*>) { private fun checkHeaderClassConstructor(constructorDescriptor: ClassConstructorDescriptor, declaration: KtConstructor<*>) {
if (!constructorDescriptor.isPlatform) return if (!constructorDescriptor.isHeader) return
if (declaration.hasBody()) { if (declaration.hasBody()) {
trace.report(PLATFORM_DECLARATION_WITH_BODY.on(declaration)) trace.report(HEADER_DECLARATION_WITH_BODY.on(declaration))
} }
if (declaration is KtPrimaryConstructor && !DescriptorUtils.isAnnotationClass(constructorDescriptor.constructedClass)) { if (declaration is KtPrimaryConstructor && !DescriptorUtils.isAnnotationClass(constructorDescriptor.constructedClass)) {
for (parameter in declaration.valueParameters) { for (parameter in declaration.valueParameters) {
if (parameter.hasValOrVar()) { if (parameter.hasValOrVar()) {
trace.report(PLATFORM_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER.on(parameter)) trace.report(HEADER_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER.on(parameter))
} }
} }
} }
@@ -285,7 +285,7 @@ class DeclarationsChecker(
if (declaration is KtSecondaryConstructor) { if (declaration is KtSecondaryConstructor) {
val delegationCall = declaration.getDelegationCall() val delegationCall = declaration.getDelegationCall()
if (!delegationCall.isImplicit) { if (!delegationCall.isImplicit) {
trace.report(PLATFORM_CLASS_CONSTRUCTOR_DELEGATION_CALL.on(delegationCall)) trace.report(HEADER_CLASS_CONSTRUCTOR_DELEGATION_CALL.on(delegationCall))
} }
} }
} }
@@ -703,13 +703,13 @@ class DeclarationsChecker(
val initializer = property.initializer val initializer = property.initializer
val delegate = property.delegate val delegate = property.delegate
val isPlatform = propertyDescriptor.isPlatform val isHeader = propertyDescriptor.isHeader
if (initializer != null) { if (initializer != null) {
if (inTrait) { if (inTrait) {
trace.report(PROPERTY_INITIALIZER_IN_INTERFACE.on(initializer)) trace.report(PROPERTY_INITIALIZER_IN_INTERFACE.on(initializer))
} }
else if (isPlatform) { else if (isHeader) {
trace.report(PLATFORM_PROPERTY_INITIALIZER.on(initializer)) trace.report(HEADER_PROPERTY_INITIALIZER.on(initializer))
} }
else if (!backingFieldRequired) { else if (!backingFieldRequired) {
trace.report(PROPERTY_INITIALIZER_NO_BACKING_FIELD.on(initializer)) trace.report(PROPERTY_INITIALIZER_NO_BACKING_FIELD.on(initializer))
@@ -726,7 +726,7 @@ class DeclarationsChecker(
else { else {
val isUninitialized = trace.bindingContext.get(BindingContext.IS_UNINITIALIZED, propertyDescriptor) ?: false val isUninitialized = trace.bindingContext.get(BindingContext.IS_UNINITIALIZED, propertyDescriptor) ?: false
val isExternal = DescriptorUtils.isEffectivelyExternal(propertyDescriptor) val isExternal = DescriptorUtils.isEffectivelyExternal(propertyDescriptor)
if (backingFieldRequired && !inTrait && !propertyDescriptor.isLateInit && !isPlatform && isUninitialized && !isExternal) { if (backingFieldRequired && !inTrait && !propertyDescriptor.isLateInit && !isHeader && isUninitialized && !isExternal) {
if (containingDeclaration !is ClassDescriptor || hasAccessorImplementation) { if (containingDeclaration !is ClassDescriptor || hasAccessorImplementation) {
trace.report(MUST_BE_INITIALIZED.on(property)) trace.report(MUST_BE_INITIALIZED.on(property))
} }
@@ -766,7 +766,7 @@ class DeclarationsChecker(
if (containingDescriptor is ClassDescriptor) { if (containingDescriptor is ClassDescriptor) {
val inInterface = containingDescriptor.kind == ClassKind.INTERFACE val inInterface = containingDescriptor.kind == ClassKind.INTERFACE
val isPlatformClass = containingDescriptor.isPlatform val isHeaderClass = containingDescriptor.isHeader
if (hasAbstractModifier && !classCanHaveAbstractMembers(containingDescriptor)) { if (hasAbstractModifier && !classCanHaveAbstractMembers(containingDescriptor)) {
trace.report(ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS.on(function, functionDescriptor.name.asString(), containingDescriptor)) trace.report(ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS.on(function, functionDescriptor.name.asString(), containingDescriptor))
} }
@@ -782,29 +782,29 @@ class DeclarationsChecker(
trace.report(REDUNDANT_OPEN_IN_INTERFACE.on(function)) trace.report(REDUNDANT_OPEN_IN_INTERFACE.on(function))
} }
} }
if (!hasBody && !hasAbstractModifier && !hasExternalModifier && !inInterface && !isPlatformClass) { if (!hasBody && !hasAbstractModifier && !hasExternalModifier && !inInterface && !isHeaderClass) {
trace.report(NON_ABSTRACT_FUNCTION_WITH_NO_BODY.on(function, functionDescriptor)) trace.report(NON_ABSTRACT_FUNCTION_WITH_NO_BODY.on(function, functionDescriptor))
} }
} }
else /* top-level only */ { else /* top-level only */ {
if (!function.hasBody() && !hasAbstractModifier && !hasExternalModifier && !functionDescriptor.isPlatform) { if (!function.hasBody() && !hasAbstractModifier && !hasExternalModifier && !functionDescriptor.isHeader) {
trace.report(NON_MEMBER_FUNCTION_NO_BODY.on(function, functionDescriptor)) trace.report(NON_MEMBER_FUNCTION_NO_BODY.on(function, functionDescriptor))
} }
} }
if (functionDescriptor.isPlatform) { if (functionDescriptor.isHeader) {
checkPlatformFunction(function) checkHeaderFunction(function)
} }
} }
private fun checkPlatformFunction(function: KtNamedFunction) { private fun checkHeaderFunction(function: KtNamedFunction) {
if (function.hasBody()) { if (function.hasBody()) {
trace.report(PLATFORM_DECLARATION_WITH_BODY.on(function)) trace.report(HEADER_DECLARATION_WITH_BODY.on(function))
} }
for (parameter in function.valueParameters) { for (parameter in function.valueParameters) {
if (parameter.hasDefaultValue()) { if (parameter.hasDefaultValue()) {
trace.report(PLATFORM_DECLARATION_WITH_DEFAULT_PARAMETER.on(parameter)) trace.report(HEADER_DECLARATION_WITH_DEFAULT_PARAMETER.on(parameter))
} }
} }
} }
@@ -858,8 +858,8 @@ class DeclarationsChecker(
accessorDescriptor: PropertyAccessorDescriptor? accessorDescriptor: PropertyAccessorDescriptor?
) { ) {
if (accessor == null || accessorDescriptor == null) return if (accessor == null || accessorDescriptor == null) return
if (propertyDescriptor.isPlatform && accessor.hasBody()) { if (propertyDescriptor.isHeader && accessor.hasBody()) {
trace.report(PLATFORM_DECLARATION_WITH_BODY.on(accessor)) trace.report(HEADER_DECLARATION_WITH_BODY.on(accessor))
} }
val accessorModifierList = accessor.modifierList ?: return val accessorModifierList = accessor.modifierList ?: return
@@ -820,8 +820,8 @@ public class DescriptorResolver {
KotlinSourceElementKt.toSourceElement(property), KotlinSourceElementKt.toSourceElement(property),
modifierList != null && modifierList.hasModifier(KtTokens.LATEINIT_KEYWORD), modifierList != null && modifierList.hasModifier(KtTokens.LATEINIT_KEYWORD),
modifierList != null && modifierList.hasModifier(KtTokens.CONST_KEYWORD), modifierList != null && modifierList.hasModifier(KtTokens.CONST_KEYWORD),
modifierList != null && modifierList.hasModifier(KtTokens.PLATFORM_KEYWORD) || modifierList != null && modifierList.hasModifier(KtTokens.HEADER_KEYWORD) ||
containingDeclaration instanceof ClassDescriptor && ((ClassDescriptor) containingDeclaration).isPlatform(), containingDeclaration instanceof ClassDescriptor && ((ClassDescriptor) containingDeclaration).isHeader(),
modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD), modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD),
modifierList != null && modifierList.hasModifier(KtTokens.EXTERNAL_KEYWORD) modifierList != null && modifierList.hasModifier(KtTokens.EXTERNAL_KEYWORD)
); );
@@ -1141,7 +1141,7 @@ public class DescriptorResolver {
KotlinSourceElementKt.toSourceElement(parameter), KotlinSourceElementKt.toSourceElement(parameter),
/* lateInit = */ false, /* lateInit = */ false,
/* isConst = */ false, /* isConst = */ false,
/* isPlatform = */ false, /* isHeader = */ false,
/* isImpl = */ false, /* isImpl = */ false,
/* isExternal = */ false /* isExternal = */ false
); );
@@ -186,8 +186,8 @@ class FunctionDescriptorResolver(
functionDescriptor.isInline = function.hasModifier(KtTokens.INLINE_KEYWORD) functionDescriptor.isInline = function.hasModifier(KtTokens.INLINE_KEYWORD)
functionDescriptor.isTailrec = function.hasModifier(KtTokens.TAILREC_KEYWORD) functionDescriptor.isTailrec = function.hasModifier(KtTokens.TAILREC_KEYWORD)
functionDescriptor.isSuspend = function.hasModifier(KtTokens.SUSPEND_KEYWORD) functionDescriptor.isSuspend = function.hasModifier(KtTokens.SUSPEND_KEYWORD)
functionDescriptor.isPlatform = function.hasModifier(KtTokens.PLATFORM_KEYWORD) || functionDescriptor.isHeader = function.hasModifier(KtTokens.HEADER_KEYWORD) ||
containingDescriptor is ClassDescriptor && containingDescriptor.isPlatform containingDescriptor is ClassDescriptor && containingDescriptor.isHeader
functionDescriptor.isImpl = function.hasModifier(KtTokens.IMPL_KEYWORD) functionDescriptor.isImpl = function.hasModifier(KtTokens.IMPL_KEYWORD)
receiverType?.let { ForceResolveUtil.forceResolveAllContents(it.annotations) } receiverType?.let { ForceResolveUtil.forceResolveAllContents(it.annotations) }
@@ -299,8 +299,8 @@ class FunctionDescriptorResolver(
isPrimary, isPrimary,
declarationToTrace.toSourceElement() declarationToTrace.toSourceElement()
) )
if (classDescriptor.isPlatform) { if (classDescriptor.isHeader) {
constructorDescriptor.isPlatform = true constructorDescriptor.isHeader = true
} }
if (classDescriptor.isImpl) { if (classDescriptor.isImpl) {
constructorDescriptor.isImpl = true constructorDescriptor.isImpl = true
@@ -147,7 +147,7 @@ class LocalVariableResolver(
variable.toSourceElement(), variable.toSourceElement(),
/* lateInit = */ false, /* lateInit = */ false,
/* isConst = */ false, /* isConst = */ false,
/* isPlatform = */ false, /* isHeader = */ false,
/* isImpl = */ false, /* isImpl = */ false,
/* isExternal = */ false /* isExternal = */ false
) )
@@ -90,7 +90,7 @@ object ModifierCheckerCore {
CONST_KEYWORD to EnumSet.of(MEMBER_PROPERTY, TOP_LEVEL_PROPERTY), CONST_KEYWORD to EnumSet.of(MEMBER_PROPERTY, TOP_LEVEL_PROPERTY),
OPERATOR_KEYWORD to EnumSet.of(FUNCTION), OPERATOR_KEYWORD to EnumSet.of(FUNCTION),
INFIX_KEYWORD to EnumSet.of(FUNCTION), INFIX_KEYWORD to EnumSet.of(FUNCTION),
PLATFORM_KEYWORD to EnumSet.of(TOP_LEVEL_FUNCTION, TOP_LEVEL_PROPERTY_WITHOUT_FIELD_OR_DELEGATE, CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS), HEADER_KEYWORD to EnumSet.of(TOP_LEVEL_FUNCTION, TOP_LEVEL_PROPERTY_WITHOUT_FIELD_OR_DELEGATE, CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS),
IMPL_KEYWORD to EnumSet.of(TOP_LEVEL_FUNCTION, MEMBER_FUNCTION, TOP_LEVEL_PROPERTY, MEMBER_PROPERTY, CONSTRUCTOR, CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS, TYPEALIAS) IMPL_KEYWORD to EnumSet.of(TOP_LEVEL_FUNCTION, MEMBER_FUNCTION, TOP_LEVEL_PROPERTY, MEMBER_PROPERTY, CONSTRUCTOR, CLASS_ONLY, OBJECT, INTERFACE, INNER_CLASS, ENUM_CLASS, ANNOTATION_CLASS, TYPEALIAS)
) )
@@ -98,7 +98,7 @@ object ModifierCheckerCore {
COROUTINE_KEYWORD to LanguageFeature.Coroutines, COROUTINE_KEYWORD to LanguageFeature.Coroutines,
SUSPEND_KEYWORD to LanguageFeature.Coroutines, SUSPEND_KEYWORD to LanguageFeature.Coroutines,
INLINE_KEYWORD to LanguageFeature.InlineProperties, INLINE_KEYWORD to LanguageFeature.InlineProperties,
PLATFORM_KEYWORD to LanguageFeature.MultiPlatformProjects, HEADER_KEYWORD to LanguageFeature.MultiPlatformProjects,
IMPL_KEYWORD to LanguageFeature.MultiPlatformProjects IMPL_KEYWORD to LanguageFeature.MultiPlatformProjects
) )
@@ -253,7 +253,7 @@ class OverloadResolver(
if (isConstructorsOfDifferentRedeclaredClasses(member1, member2)) continue if (isConstructorsOfDifferentRedeclaredClasses(member1, member2)) continue
if (isTopLevelMainInDifferentFiles(member1, member2)) continue if (isTopLevelMainInDifferentFiles(member1, member2)) continue
if (isDefinitionsForDifferentPlatforms(member1, member2)) continue if (isDefinitionsForDifferentPlatforms(member1, member2)) continue
if (isPlatformDeclarationAndDefinition(member1, member2) || isPlatformDeclarationAndDefinition(member2, member1)) continue if (isHeaderDeclarationAndDefinition(member1, member2) || isHeaderDeclarationAndDefinition(member2, member1)) continue
if (!overloadChecker.isOverloadable(member1, member2)) { if (!overloadChecker.isOverloadable(member1, member2)) {
redeclarations.add(member1) redeclarations.add(member1)
@@ -283,9 +283,9 @@ class OverloadResolver(
return file1 == null || file2 == null || file1 !== file2 return file1 == null || file2 == null || file1 !== file2
} }
private fun isPlatformDeclarationAndDefinition(declaration: DeclarationDescriptor, definition: DeclarationDescriptor): Boolean { private fun isHeaderDeclarationAndDefinition(declaration: DeclarationDescriptor, definition: DeclarationDescriptor): Boolean {
return declaration is MemberDescriptor && declaration.isPlatform && return declaration is MemberDescriptor && declaration.isHeader &&
definition is MemberDescriptor && !definition.isPlatform definition is MemberDescriptor && !definition.isHeader
} }
private fun isDefinitionsForDifferentPlatforms(member1: DeclarationDescriptorNonRoot, member2: DeclarationDescriptorNonRoot): Boolean { private fun isDefinitionsForDifferentPlatforms(member1: DeclarationDescriptorNonRoot, member2: DeclarationDescriptorNonRoot): Boolean {
@@ -98,7 +98,7 @@ class DynamicCallableDescriptors(storageManager: StorageManager, builtIns: Kotli
SourceElement.NO_SOURCE, SourceElement.NO_SOURCE,
/* lateInit = */ false, /* lateInit = */ false,
/* isConst = */ false, /* isConst = */ false,
/* isPlatform = */ false, /* isHeader = */ false,
/* isImpl = */ false, /* isImpl = */ false,
/* isExternal = */ false /* isExternal = */ false
) )
@@ -28,8 +28,8 @@ import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.checkers.PlatformImplDeclarationChecker.Compatibility.Compatible import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker.Compatibility.Compatible
import org.jetbrains.kotlin.resolve.checkers.PlatformImplDeclarationChecker.Compatibility.Incompatible import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker.Compatibility.Incompatible
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.descriptorUtil.module
@@ -43,7 +43,7 @@ import org.jetbrains.kotlin.types.typeUtil.asTypeProjection
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
import org.jetbrains.kotlin.utils.keysToMap import org.jetbrains.kotlin.utils.keysToMap
class PlatformImplDeclarationChecker : DeclarationChecker { class HeaderImplDeclarationChecker : DeclarationChecker {
override fun check( override fun check(
declaration: KtDeclaration, declaration: KtDeclaration,
descriptor: DeclarationDescriptor, descriptor: DeclarationDescriptor,
@@ -55,16 +55,16 @@ class PlatformImplDeclarationChecker : DeclarationChecker {
if (descriptor !is MemberDescriptor) return if (descriptor !is MemberDescriptor) return
if (descriptor.isPlatform && declaration.hasModifier(KtTokens.PLATFORM_KEYWORD)) { if (descriptor.isHeader && declaration.hasModifier(KtTokens.HEADER_KEYWORD)) {
val checkImpl = !languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformDoNotCheckImpl) val checkImpl = !languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformDoNotCheckImpl)
checkPlatformDeclarationHasDefinition(declaration, descriptor, diagnosticHolder, checkImpl) checkHeaderDeclarationHasImplementation(declaration, descriptor, diagnosticHolder, checkImpl)
} }
else if (descriptor.isImpl && declaration.hasModifier(KtTokens.IMPL_KEYWORD)) { else if (descriptor.isImpl && declaration.hasModifier(KtTokens.IMPL_KEYWORD)) {
checkImplementationHasPlatformDeclaration(declaration, descriptor, diagnosticHolder) checkImplementationHasHeaderDeclaration(declaration, descriptor, diagnosticHolder)
} }
} }
private fun checkPlatformDeclarationHasDefinition( private fun checkHeaderDeclarationHasImplementation(
reportOn: KtDeclaration, descriptor: MemberDescriptor, diagnosticHolder: DiagnosticSink, checkImpl: Boolean reportOn: KtDeclaration, descriptor: MemberDescriptor, diagnosticHolder: DiagnosticSink, checkImpl: Boolean
) { ) {
val compatibility = when (descriptor) { val compatibility = when (descriptor) {
@@ -92,17 +92,17 @@ class PlatformImplDeclarationChecker : DeclarationChecker {
assert(compatibility.keys.all { it is Incompatible }) assert(compatibility.keys.all { it is Incompatible })
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
val incompatibility = compatibility as Map<Incompatible, Collection<MemberDescriptor>> val incompatibility = compatibility as Map<Incompatible, Collection<MemberDescriptor>>
diagnosticHolder.report(Errors.PLATFORM_DECLARATION_WITHOUT_DEFINITION.on(reportOn, descriptor, incompatibility)) diagnosticHolder.report(Errors.HEADER_WITHOUT_IMPLEMENTATION.on(reportOn, descriptor, incompatibility))
} }
} }
private fun checkImplementationHasPlatformDeclaration( private fun checkImplementationHasHeaderDeclaration(
reportOn: KtDeclaration, descriptor: MemberDescriptor, diagnosticHolder: DiagnosticSink reportOn: KtDeclaration, descriptor: MemberDescriptor, diagnosticHolder: DiagnosticSink
) { ) {
fun ClassifierDescriptor.findDeclarationForClass(): ClassDescriptor? = fun ClassifierDescriptor.findDeclarationForClass(): ClassDescriptor? =
findClassifiersFromTheSameModule().firstOrNull { declaration -> findClassifiersFromTheSameModule().firstOrNull { declaration ->
this != declaration && this != declaration &&
declaration is ClassDescriptor && declaration.isPlatform && declaration is ClassDescriptor && declaration.isHeader &&
areCompatibleClassifiers(declaration, this, checkImpl = false) == Compatible areCompatibleClassifiers(declaration, this, checkImpl = false) == Compatible
} as? ClassDescriptor } as? ClassDescriptor
@@ -116,7 +116,7 @@ class PlatformImplDeclarationChecker : DeclarationChecker {
} }
candidates.any { declaration -> candidates.any { declaration ->
descriptor != declaration && descriptor != declaration &&
declaration.isPlatform && declaration.isHeader &&
areCompatibleCallables(declaration, descriptor, checkImpl = false) == Compatible areCompatibleCallables(declaration, descriptor, checkImpl = false) == Compatible
} }
} }
@@ -125,8 +125,8 @@ class PlatformImplDeclarationChecker : DeclarationChecker {
} }
if (!hasDeclaration) { if (!hasDeclaration) {
// TODO: do not report this error for members which are "almost compatible" with some platform declarations // TODO: do not report this error for members which are "almost compatible" with some header declarations
diagnosticHolder.report(Errors.PLATFORM_DEFINITION_WITHOUT_DECLARATION.on(reportOn.modifierList!!.getModifier(KtTokens.IMPL_KEYWORD)!!)) diagnosticHolder.report(Errors.IMPLEMENTATION_WITHOUT_HEADER.on(reportOn.modifierList!!.getModifier(KtTokens.IMPL_KEYWORD)!!))
} }
} }
@@ -141,7 +141,7 @@ object InlineAnalyzerExtension : AnalyzerExtensions.AnalyzerExtension {
if (InlineUtil.containsReifiedTypeParameters(functionDescriptor) || if (InlineUtil.containsReifiedTypeParameters(functionDescriptor) ||
functionDescriptor.isInlineOnlyOrReified() || functionDescriptor.isInlineOnlyOrReified() ||
functionDescriptor.isPlatform) return functionDescriptor.isHeader) return
val reportOn = function.modifierList?.getModifier(KtTokens.INLINE_KEYWORD) ?: function val reportOn = function.modifierList?.getModifier(KtTokens.INLINE_KEYWORD) ?: function
trace.report(Errors.NOTHING_TO_INLINE.on(reportOn, functionDescriptor)) trace.report(Errors.NOTHING_TO_INLINE.on(reportOn, functionDescriptor))
@@ -93,7 +93,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
private final ClassKind kind; private final ClassKind kind;
private final boolean isInner; private final boolean isInner;
private final boolean isData; private final boolean isData;
private final boolean isPlatform; private final boolean isHeader;
private final boolean isImpl; private final boolean isImpl;
private final Annotations annotations; private final Annotations annotations;
@@ -177,7 +177,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
this.isInner = isInnerClass(modifierList) && !ModifiersChecker.isIllegalInner(this); this.isInner = isInnerClass(modifierList) && !ModifiersChecker.isIllegalInner(this);
this.isData = modifierList != null && modifierList.hasModifier(KtTokens.DATA_KEYWORD); this.isData = modifierList != null && modifierList.hasModifier(KtTokens.DATA_KEYWORD);
this.isPlatform = modifierList != null && modifierList.hasModifier(KtTokens.PLATFORM_KEYWORD); this.isHeader = modifierList != null && modifierList.hasModifier(KtTokens.HEADER_KEYWORD);
this.isImpl = modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD); this.isImpl = modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD);
// Annotation entries are taken from both own annotations (if any) and object literal annotations (if any) // Annotation entries are taken from both own annotations (if any) and object literal annotations (if any)
@@ -529,8 +529,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
} }
@Override @Override
public boolean isPlatform() { public boolean isHeader() {
return isPlatform; return isHeader;
} }
@Override @Override
@@ -40,11 +40,11 @@ class JvmPropertyDescriptorImpl(
source: SourceElement, source: SourceElement,
isLateInit: Boolean, isLateInit: Boolean,
isConst: Boolean, isConst: Boolean,
isPlatform: Boolean, isHeader: Boolean,
isImpl: Boolean isImpl: Boolean
) : JvmDescriptorWithExtraFlags, PropertyDescriptorImpl( ) : JvmDescriptorWithExtraFlags, PropertyDescriptorImpl(
containingDeclaration, original, annotations, modality, visibility, isVar, containingDeclaration, original, annotations, modality, visibility, isVar,
name, kind, source, isLateInit, isConst, isPlatform, isImpl, /* isExternal = */ false name, kind, source, isLateInit, isConst, isHeader, isImpl, /* isExternal = */ false
) { ) {
override fun createSubstitutedCopy( override fun createSubstitutedCopy(
newOwner: DeclarationDescriptor, newOwner: DeclarationDescriptor,
@@ -55,7 +55,7 @@ class JvmPropertyDescriptorImpl(
): PropertyDescriptorImpl = ): PropertyDescriptorImpl =
JvmPropertyDescriptorImpl( JvmPropertyDescriptorImpl(
newOwner, original, annotations, newModality, newVisibility, extraFlags, isVar, name, kind, newOwner, original, annotations, newModality, newVisibility, extraFlags, isVar, name, kind,
SourceElement.NO_SOURCE, isLateInit, isConst, isPlatform, isImpl SourceElement.NO_SOURCE, isLateInit, isConst, isHeader, isImpl
) )
companion object { companion object {
@@ -138,7 +138,7 @@ open class KnownClassDescriptor(
override fun isCompanionObject(): Boolean = false override fun isCompanionObject(): Boolean = false
override fun isData(): Boolean = false override fun isData(): Boolean = false
override fun isInner(): Boolean = false override fun isInner(): Boolean = false
override fun isPlatform(): Boolean = false override fun isHeader(): Boolean = false
override fun isImpl(): Boolean = false override fun isImpl(): Boolean = false
override fun isExternal(): Boolean = false override fun isExternal(): Boolean = false
@@ -59,7 +59,7 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM
PropertyDescriptorImpl.create( PropertyDescriptorImpl.create(
refClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true, refClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true,
Name.identifier("element"), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE, Name.identifier("element"), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE,
/* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false, /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false,
/* isExternal = */ false /* isExternal = */ false
).initialize(type, dispatchReceiverParameter = refClass.thisAsReceiverParameter) ).initialize(type, dispatchReceiverParameter = refClass.thisAsReceiverParameter)
} }
@@ -100,7 +100,7 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM
PropertyDescriptorImpl.create( PropertyDescriptorImpl.create(
genericRefClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true, genericRefClass, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, true,
Name.identifier("element"), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE, Name.identifier("element"), CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE,
/* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false, /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false,
/* isExternal = */ false /* isExternal = */ false
).initialize( ).initialize(
type = builtIns.anyType, type = builtIns.anyType,
@@ -129,7 +129,7 @@ class SpecialDescriptorsFactory(
Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, false, Annotations.EMPTY, Modality.FINAL, Visibilities.PUBLIC, false,
Name.identifier("INSTANCE"), Name.identifier("INSTANCE"),
CallableMemberDescriptor.Kind.SYNTHESIZED, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false, CallableMemberDescriptor.Kind.SYNTHESIZED, SourceElement.NO_SOURCE, /* lateInit = */ false, /* isConst = */ false,
/* isPlatform = */ false, /* isImpl = */ false, /* isExternal = */ false /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false
).initialize(objectDescriptor.defaultType) ).initialize(objectDescriptor.defaultType)
return instanceFieldDescriptor return instanceFieldDescriptor
@@ -54,7 +54,7 @@ abstract class IrBuiltinOperatorDescriptorBase(containingDeclaration: Declaratio
override fun isOperator(): Boolean = false override fun isOperator(): Boolean = false
override fun isSuspend(): Boolean = false override fun isSuspend(): Boolean = false
override fun isTailrec(): Boolean = false override fun isTailrec(): Boolean = false
override fun isPlatform(): Boolean = false override fun isHeader(): Boolean = false
override fun isImpl(): Boolean = false override fun isImpl(): Boolean = false
override fun hasStableParameterNames(): Boolean = true override fun hasStableParameterNames(): Boolean = true
override fun hasSynthesizedParameterNames(): Boolean = false override fun hasSynthesizedParameterNames(): Boolean = false
@@ -60,7 +60,7 @@ abstract class IrDelegateDescriptorBase(
SourceElement.NO_SOURCE, SourceElement.NO_SOURCE,
/* lateInit = */ false, /* lateInit = */ false,
/* isConst = */ false, /* isConst = */ false,
/* isPlatform = */ false, /* isHeader = */ false,
/* isImpl = */ false, /* isImpl = */ false,
/* isExternal = */ false /* isExternal = */ false
) { ) {
@@ -352,7 +352,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
fun create(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? { fun create(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? {
if (classOrObject.getContainingKtFile().isScript || classOrObject.hasModifier(KtTokens.PLATFORM_KEYWORD)) { if (classOrObject.getContainingKtFile().isScript || classOrObject.hasModifier(KtTokens.HEADER_KEYWORD)) {
return null return null
} }
@@ -44,7 +44,7 @@ class FlatSignature<out T> private constructor(
val hasExtensionReceiver: Boolean, val hasExtensionReceiver: Boolean,
val hasVarargs: Boolean, val hasVarargs: Boolean,
val numDefaults: Int, val numDefaults: Int,
val isPlatform: Boolean, val isHeader: Boolean,
val isSyntheticMember: Boolean val isSyntheticMember: Boolean
) { ) {
val isGeneric = typeParameters.isNotEmpty() val isGeneric = typeParameters.isNotEmpty()
@@ -65,7 +65,7 @@ class FlatSignature<out T> private constructor(
hasExtensionReceiver = extensionReceiverType != null, hasExtensionReceiver = extensionReceiverType != null,
hasVarargs = descriptor.valueParameters.any { it.varargElementType != null }, hasVarargs = descriptor.valueParameters.any { it.varargElementType != null },
numDefaults = numDefaults, numDefaults = numDefaults,
isPlatform = descriptor is MemberDescriptor && descriptor.isPlatform, isHeader = descriptor is MemberDescriptor && descriptor.isHeader,
isSyntheticMember = descriptor is SyntheticMemberDescriptor<*> isSyntheticMember = descriptor is SyntheticMemberDescriptor<*>
) )
} }
@@ -241,8 +241,8 @@ class OverloadingConflictResolver<C : Any>(
if (isGeneric1 && isGeneric2) return false if (isGeneric1 && isGeneric2) return false
} }
if (!call1.isPlatform && call2.isPlatform) return true if (!call1.isHeader && call2.isHeader) return true
if (call1.isPlatform && !call2.isPlatform) return false if (call1.isHeader && !call2.isHeader) return false
return createEmptyConstraintSystem().isSignatureNotLessSpecific(call1, call2, SpecificityComparisonWithNumerics, specificityComparator) return createEmptyConstraintSystem().isSignatureNotLessSpecific(call1, call2, SpecificityComparisonWithNumerics, specificityComparator)
} }
@@ -2,28 +2,28 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
<!WRONG_MODIFIER_TARGET!>platform<!> typealias Foo = String <!WRONG_MODIFIER_TARGET!>header<!> typealias Foo = String
class Outer <!WRONG_MODIFIER_TARGET!>platform<!> constructor() { class Outer <!WRONG_MODIFIER_TARGET!>header<!> constructor() {
platform class Nested header class Nested
<!WRONG_MODIFIER_TARGET!>platform<!> init {} <!WRONG_MODIFIER_TARGET!>header<!> init {}
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!><!WRONG_MODIFIER_TARGET!>platform<!> fun foo()<!> <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!><!WRONG_MODIFIER_TARGET!>header<!> fun foo()<!>
<!WRONG_MODIFIER_TARGET!>platform<!> val bar: Int <!WRONG_MODIFIER_TARGET!>header<!> val bar: Int
} }
fun foo() { fun foo() {
<!WRONG_MODIFIER_TARGET!>platform<!> fun localFun() <!WRONG_MODIFIER_TARGET!>header<!> fun localFun()
<!WRONG_MODIFIER_TARGET!>platform<!> var <!UNUSED_VARIABLE!>x<!> = 42 <!WRONG_MODIFIER_TARGET!>header<!> var <!UNUSED_VARIABLE!>x<!> = 42
<!WRONG_MODIFIER_TARGET!>platform<!> class Bar <!WRONG_MODIFIER_TARGET!>header<!> class Bar
} }
// MODULE: m2-jvm // MODULE: m2-jvm
// FILE: jvm.kt // FILE: jvm.kt
class Outer impl constructor() { class Outer impl constructor() {
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> class Nested <!IMPLEMENTATION_WITHOUT_HEADER!>impl<!> class Nested
<!WRONG_MODIFIER_TARGET!>impl<!> init {} <!WRONG_MODIFIER_TARGET!>impl<!> init {}
} }
@@ -31,5 +31,5 @@ class Outer impl constructor() {
fun foo() { fun foo() {
<!WRONG_MODIFIER_TARGET!>impl<!> fun localFun() {} <!WRONG_MODIFIER_TARGET!>impl<!> fun localFun() {}
<!WRONG_MODIFIER_TARGET!>impl<!> var <!UNUSED_VARIABLE!>x<!> = 42 <!WRONG_MODIFIER_TARGET!>impl<!> var <!UNUSED_VARIABLE!>x<!> = 42
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION, WRONG_MODIFIER_TARGET!>impl<!> class Bar <!IMPLEMENTATION_WITHOUT_HEADER, WRONG_MODIFIER_TARGET!>impl<!> class Bar
} }
@@ -7,11 +7,11 @@ public final class Outer {
public constructor Outer() public constructor Outer()
public final val bar: kotlin.Int public final val bar: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final platform fun foo(): kotlin.Unit public final header fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final platform class Nested { public final header class Nested {
public constructor Nested() public constructor Nested()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -2,15 +2,15 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform interface Interface header interface Interface
platform annotation class Anno(val prop: String) header annotation class Anno(val prop: String)
platform object Object header object Object
platform class Class header class Class
platform enum class En { ENTRY } header enum class En { ENTRY }
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,7 +1,7 @@
// -- Module: <m1-common> -- // -- Module: <m1-common> --
package package
public final platform annotation class Anno : kotlin.Annotation { public final header annotation class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ prop: kotlin.String) public constructor Anno(/*0*/ prop: kotlin.String)
public final val prop: kotlin.String public final val prop: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -9,14 +9,14 @@ public final platform annotation class Anno : kotlin.Annotation {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class Class { public final header class Class {
public constructor Class() public constructor Class()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform enum class En : kotlin.Enum<En> { public final header enum class En : kotlin.Enum<En> {
enum entry ENTRY enum entry ENTRY
private constructor En() private constructor En()
@@ -33,13 +33,13 @@ public final platform enum class En : kotlin.Enum<En> {
public final /*synthesized*/ fun values(): kotlin.Array<En> public final /*synthesized*/ fun values(): kotlin.Array<En>
} }
public platform interface Interface { public header interface Interface {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public platform object Object { public header object Object {
private constructor Object() private constructor Object()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -1,14 +1,14 @@
// !LANGUAGE: +MultiPlatformProjects // !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform open class A { header open class A {
constructor(s: String) constructor(s: String)
constructor(n: Number) : <!PLATFORM_CLASS_CONSTRUCTOR_DELEGATION_CALL!>this<!>("A") constructor(n: Number) : <!HEADER_CLASS_CONSTRUCTOR_DELEGATION_CALL!>this<!>("A")
} }
platform class B : A { header class B : A {
constructor(i: Int) constructor(i: Int)
constructor() : <!PLATFORM_CLASS_CONSTRUCTOR_DELEGATION_CALL!>super<!>("B") constructor() : <!HEADER_CLASS_CONSTRUCTOR_DELEGATION_CALL!>super<!>("B")
} }
@@ -1,6 +1,6 @@
package package
public open platform class A { public open header class A {
public constructor A(/*0*/ n: kotlin.Number) public constructor A(/*0*/ n: kotlin.Number)
public constructor A(/*0*/ s: kotlin.String) public constructor A(/*0*/ s: kotlin.String)
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -8,7 +8,7 @@ public open platform class A {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class B : A { public final header class B : A {
public constructor B() public constructor B()
public constructor B(/*0*/ i: kotlin.Int) public constructor B(/*0*/ i: kotlin.Int)
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -1,18 +1,18 @@
// !DIAGNOSTICS: -PLATFORM_DEFINITION_WITHOUT_DECLARATION // !DIAGNOSTICS: -IMPLEMENTATION_WITHOUT_HEADER
// !LANGUAGE: +MultiPlatformProjects // !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform class C1 header class C1
platform class C2<A> header class C2<A>
platform class C3<B> header class C3<B>
platform class C4<D, E> header class C4<D, E>
platform class C5<F, G> header class C5<F, G>
platform class C6<H> header class C6<H>
platform class C7<I> header class C7<I>
platform class C8<J> header class C8<J>
platform class C9<K> header class C9<K>
platform class C10<L> header class C10<L>
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,70 +1,70 @@
// -- Module: <m1-common> -- // -- Module: <m1-common> --
package package
public final platform class C1 { public final header class C1 {
public constructor C1() public constructor C1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C10</*0*/ L> { public final header class C10</*0*/ L> {
public constructor C10</*0*/ L>() public constructor C10</*0*/ L>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C2</*0*/ A> { public final header class C2</*0*/ A> {
public constructor C2</*0*/ A>() public constructor C2</*0*/ A>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C3</*0*/ B> { public final header class C3</*0*/ B> {
public constructor C3</*0*/ B>() public constructor C3</*0*/ B>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C4</*0*/ D, /*1*/ E> { public final header class C4</*0*/ D, /*1*/ E> {
public constructor C4</*0*/ D, /*1*/ E>() public constructor C4</*0*/ D, /*1*/ E>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C5</*0*/ F, /*1*/ G> { public final header class C5</*0*/ F, /*1*/ G> {
public constructor C5</*0*/ F, /*1*/ G>() public constructor C5</*0*/ F, /*1*/ G>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C6</*0*/ H> { public final header class C6</*0*/ H> {
public constructor C6</*0*/ H>() public constructor C6</*0*/ H>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C7</*0*/ I> { public final header class C7</*0*/ I> {
public constructor C7</*0*/ I>() public constructor C7</*0*/ I>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C8</*0*/ J> { public final header class C8</*0*/ J> {
public constructor C8</*0*/ J>() public constructor C8</*0*/ J>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class C9</*0*/ K> { public final header class C9</*0*/ K> {
public constructor C9</*0*/ K>() public constructor C9</*0*/ K>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -1,7 +1,7 @@
// !LANGUAGE: +MultiPlatformProjects // !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform class Foo { header class Foo {
val foo: String val foo: String
fun bar(x: Int): Int fun bar(x: Int): Int
@@ -1,10 +1,10 @@
// -- Module: <m1-common> -- // -- Module: <m1-common> --
package package
public final platform class Foo { public final header class Foo {
public constructor Foo() public constructor Foo()
public final val foo: kotlin.String public final val foo: kotlin.String
public final platform fun bar(/*0*/ x: kotlin.Int): kotlin.Int public final header fun bar(/*0*/ x: kotlin.Int): kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -1,29 +1,29 @@
// !LANGUAGE: +MultiPlatformProjects // !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform class Foo( header class Foo(
<!PLATFORM_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER!>val constructorProperty: String<!>, <!HEADER_CLASS_CONSTRUCTOR_PROPERTY_PARAMETER!>val constructorProperty: String<!>,
constructorParameter: String constructorParameter: String
) { ) {
<!PLATFORM_DECLARATION_WITH_BODY!>init<!> { <!HEADER_DECLARATION_WITH_BODY!>init<!> {
<!UNUSED_EXPRESSION, UNUSED_EXPRESSION!>"no"<!> <!UNUSED_EXPRESSION, UNUSED_EXPRESSION!>"no"<!>
} }
<!PLATFORM_DECLARATION_WITH_BODY!>constructor(s: String)<!> { <!HEADER_DECLARATION_WITH_BODY!>constructor(s: String)<!> {
<!UNUSED_EXPRESSION!>"no"<!> <!UNUSED_EXPRESSION!>"no"<!>
} }
constructor() : <!PLATFORM_CLASS_CONSTRUCTOR_DELEGATION_CALL!>this<!>("no") constructor() : <!HEADER_CLASS_CONSTRUCTOR_DELEGATION_CALL!>this<!>("no")
val prop: String = <!PLATFORM_PROPERTY_INITIALIZER!>"no"<!> val prop: String = <!HEADER_PROPERTY_INITIALIZER!>"no"<!>
var getSet: String var getSet: String
<!PLATFORM_DECLARATION_WITH_BODY!>get()<!> = "no" <!HEADER_DECLARATION_WITH_BODY!>get()<!> = "no"
<!PLATFORM_DECLARATION_WITH_BODY!>set(value)<!> {} <!HEADER_DECLARATION_WITH_BODY!>set(value)<!> {}
fun defaultArg(<!PLATFORM_DECLARATION_WITH_DEFAULT_PARAMETER!>value: String = "no"<!>) fun defaultArg(<!HEADER_DECLARATION_WITH_DEFAULT_PARAMETER!>value: String = "no"<!>)
<!PLATFORM_DECLARATION_WITH_BODY!>fun functionWithBody(x: Int): Int<!> { <!HEADER_DECLARATION_WITH_BODY!>fun functionWithBody(x: Int): Int<!> {
return x + 1 return x + 1
} }
} }
@@ -1,15 +1,15 @@
package package
public final platform class Foo { public final header class Foo {
public constructor Foo() public constructor Foo()
public constructor Foo(/*0*/ s: kotlin.String) public constructor Foo(/*0*/ s: kotlin.String)
public constructor Foo(/*0*/ constructorProperty: kotlin.String, /*1*/ constructorParameter: kotlin.String) public constructor Foo(/*0*/ constructorProperty: kotlin.String, /*1*/ constructorParameter: kotlin.String)
public final val constructorProperty: kotlin.String public final val constructorProperty: kotlin.String
public final var getSet: kotlin.String public final var getSet: kotlin.String
public final val prop: kotlin.String = "no" public final val prop: kotlin.String = "no"
public final platform fun defaultArg(/*0*/ value: kotlin.String = ...): kotlin.Unit public final header fun defaultArg(/*0*/ value: kotlin.String = ...): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final platform fun functionWithBody(/*0*/ x: kotlin.Int): kotlin.Int public final header fun functionWithBody(/*0*/ x: kotlin.Int): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
@@ -1,7 +1,7 @@
// !LANGUAGE: +MultiPlatformProjects // !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform class Foo header class Foo
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,7 +1,7 @@
// -- Module: <m1-common> -- // -- Module: <m1-common> --
package package
public final platform class Foo { public final header class Foo {
public constructor Foo() public constructor Foo()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -6,7 +6,7 @@ interface I
open class C open class C
interface J interface J
platform class Foo : I, C, J header class Foo : I, C, J
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -8,7 +8,7 @@ public open class C {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
} }
public final platform class Foo : I, C, J { public final header class Foo : I, C, J {
public constructor Foo() public constructor Foo()
public open override /*3*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*3*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*3*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*3*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -2,7 +2,7 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform fun foo(x: Int): Int header fun foo(x: Int): Int
fun callFromCommonCode(x: Int) = foo(x) fun callFromCommonCode(x: Int) = foo(x)
@@ -2,7 +2,7 @@
package package
public fun callFromCommonCode(/*0*/ x: kotlin.Int): kotlin.Int public fun callFromCommonCode(/*0*/ x: kotlin.Int): kotlin.Int
public platform fun foo(/*0*/ x: kotlin.Int): kotlin.Int public header fun foo(/*0*/ x: kotlin.Int): kotlin.Int
// -- Module: <m2-jvm> -- // -- Module: <m2-jvm> --
@@ -2,7 +2,7 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
<!CONFLICTING_OVERLOADS!>platform fun foo()<!> <!CONFLICTING_OVERLOADS!>header fun foo()<!>
<!CONFLICTING_OVERLOADS!>platform fun foo()<!> <!CONFLICTING_OVERLOADS!>header fun foo()<!>
platform fun foo(x: Int) header fun foo(x: Int)
@@ -1,5 +1,5 @@
package package
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
public platform fun foo(/*0*/ x: kotlin.Int): kotlin.Unit public header fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
@@ -2,7 +2,7 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform fun foo() header fun foo()
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,7 +1,7 @@
// -- Module: <m1-common> -- // -- Module: <m1-common> --
package package
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
// -- Module: <m2-jvm> -- // -- Module: <m2-jvm> --
@@ -3,16 +3,16 @@
// FILE: common.kt // FILE: common.kt
package common package common
platform fun foo() header fun foo()
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
package jvm package jvm
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun foo() {} <!IMPLEMENTATION_WITHOUT_HEADER!>impl<!> fun foo() {}
// MODULE: m3-js(m1-common) // MODULE: m3-js(m1-common)
// FILE: js.kt // FILE: js.kt
package js package js
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun foo() {} <!IMPLEMENTATION_WITHOUT_HEADER!>impl<!> fun foo() {}
@@ -2,7 +2,7 @@
package package
package common { package common {
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
} }
@@ -2,4 +2,4 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform fun foo() header fun foo()
@@ -1,3 +1,3 @@
package package
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
@@ -2,4 +2,4 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform fun foo(x: Int, <!PLATFORM_DECLARATION_WITH_DEFAULT_PARAMETER!>y: String = ""<!>) header fun foo(x: Int, <!HEADER_DECLARATION_WITH_DEFAULT_PARAMETER!>y: String = ""<!>)
@@ -1,3 +1,3 @@
package package
public platform fun foo(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.String = ...): kotlin.Unit public header fun foo(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.String = ...): kotlin.Unit
@@ -2,4 +2,4 @@
// MODULE: m1-jvm // MODULE: m1-jvm
// FILE: jvm.kt // FILE: jvm.kt
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun foo() { } <!IMPLEMENTATION_WITHOUT_HEADER!>impl<!> fun foo() { }
@@ -2,17 +2,17 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
inline platform fun inlineFun() inline header fun inlineFun()
platform fun nonInlineFun() header fun nonInlineFun()
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun inlineFun() { } <!IMPLEMENTATION_WITHOUT_HEADER!>impl<!> fun inlineFun() { }
impl fun nonInlineFun() { } impl fun nonInlineFun() { }
// MODULE: m3-js(m1-common) // MODULE: m3-js(m1-common)
// FILE: js.kt // FILE: js.kt
impl <!NOTHING_TO_INLINE!>inline<!> fun inlineFun() { } impl <!NOTHING_TO_INLINE!>inline<!> fun inlineFun() { }
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> <!NOTHING_TO_INLINE!>inline<!> fun nonInlineFun() { } <!IMPLEMENTATION_WITHOUT_HEADER!>impl<!> <!NOTHING_TO_INLINE!>inline<!> fun nonInlineFun() { }
@@ -1,8 +1,8 @@
// -- Module: <m1-common> -- // -- Module: <m1-common> --
package package
public inline platform fun inlineFun(): kotlin.Unit public inline header fun inlineFun(): kotlin.Unit
public platform fun nonInlineFun(): kotlin.Unit public header fun nonInlineFun(): kotlin.Unit
// -- Module: <m2-jvm> -- // -- Module: <m2-jvm> --
@@ -2,8 +2,8 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
<!CONFLICTING_OVERLOADS!>platform fun foo()<!> <!CONFLICTING_OVERLOADS!>header fun foo()<!>
<!CONFLICTING_OVERLOADS, PLATFORM_DECLARATION_WITH_BODY!>platform fun foo()<!> {} <!CONFLICTING_OVERLOADS, HEADER_DECLARATION_WITH_BODY!>header fun foo()<!> {}
<!PLATFORM_DECLARATION_WITH_BODY!>platform fun bar()<!> {} <!HEADER_DECLARATION_WITH_BODY!>header fun bar()<!> {}
@@ -1,5 +1,5 @@
package package
public platform fun bar(): kotlin.Unit public header fun bar(): kotlin.Unit
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
@@ -2,11 +2,11 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform fun foo() header fun foo()
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
<!NON_MEMBER_FUNCTION_NO_BODY!>impl fun foo()<!> <!NON_MEMBER_FUNCTION_NO_BODY!>impl fun foo()<!>
<!NON_MEMBER_FUNCTION_NO_BODY!><!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun bar()<!> <!NON_MEMBER_FUNCTION_NO_BODY!><!IMPLEMENTATION_WITHOUT_HEADER!>impl<!> fun bar()<!>
@@ -1,7 +1,7 @@
// -- Module: <m1-common> -- // -- Module: <m1-common> --
package package
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
// -- Module: <m2-jvm> -- // -- Module: <m2-jvm> --
@@ -1,7 +1,7 @@
// !LANGUAGE: +MultiPlatformProjects // !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform fun foo() header fun foo()
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,7 +1,7 @@
// -- Module: <m1-common> -- // -- Module: <m1-common> --
package package
public platform fun foo(): kotlin.Unit public header fun foo(): kotlin.Unit
// -- Module: <m2-jvm> -- // -- Module: <m2-jvm> --
@@ -2,39 +2,39 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform val justVal: String header val justVal: String
platform var justVar: String header var justVar: String
platform val String.extensionVal: Unit header val String.extensionVal: Unit
platform var <T> T.genericExtensionVar: T header var <T> T.genericExtensionVar: T
platform val valWithGet: String header val valWithGet: String
get get
platform var varWithGetSet: String header var varWithGetSet: String
get set get set
platform var varWithPlatformGetSet: String header var varWithPlatformGetSet: String
<!WRONG_MODIFIER_TARGET!>platform<!> get <!WRONG_MODIFIER_TARGET!>header<!> get
<!WRONG_MODIFIER_TARGET!>platform<!> set <!WRONG_MODIFIER_TARGET!>header<!> set
platform val backingFieldVal: String = <!PLATFORM_PROPERTY_INITIALIZER!>"no"<!> header val backingFieldVal: String = <!HEADER_PROPERTY_INITIALIZER!>"no"<!>
platform var backingFieldVar: String = <!PLATFORM_PROPERTY_INITIALIZER!>"no"<!> header var backingFieldVar: String = <!HEADER_PROPERTY_INITIALIZER!>"no"<!>
platform val customAccessorVal: String header val customAccessorVal: String
<!PLATFORM_DECLARATION_WITH_BODY!>get()<!> = "no" <!HEADER_DECLARATION_WITH_BODY!>get()<!> = "no"
platform var customAccessorVar: String header var customAccessorVar: String
<!PLATFORM_DECLARATION_WITH_BODY!>get()<!> = "no" <!HEADER_DECLARATION_WITH_BODY!>get()<!> = "no"
<!PLATFORM_DECLARATION_WITH_BODY!>set(value)<!> {} <!HEADER_DECLARATION_WITH_BODY!>set(value)<!> {}
platform <!CONST_VAL_WITHOUT_INITIALIZER!>const<!> val constVal: Int header <!CONST_VAL_WITHOUT_INITIALIZER!>const<!> val constVal: Int
platform <!WRONG_MODIFIER_TARGET!>lateinit<!> var lateinitVar: String header <!WRONG_MODIFIER_TARGET!>lateinit<!> var lateinitVar: String
<!WRONG_MODIFIER_TARGET!>platform<!> val delegated: String by Delegate <!WRONG_MODIFIER_TARGET!>header<!> val delegated: String by Delegate
object Delegate { operator fun getValue(x: Any?, y: Any?): String = "" } object Delegate { operator fun getValue(x: Any?, y: Any?): String = "" }
fun test(): String { fun test(): String {
<!WRONG_MODIFIER_TARGET!>platform<!> val localVariable: String <!WRONG_MODIFIER_TARGET!>header<!> val localVariable: String
localVariable = "no" localVariable = "no"
return localVariable return localVariable
} }
@@ -1,7 +1,7 @@
// !LANGUAGE: +MultiPlatformProjects // !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
platform var foo: String header var foo: String
// MODULE: m2-jvm(m1-common) // MODULE: m2-jvm(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,6 +1,6 @@
<!UNSUPPORTED_FEATURE!>platform<!> fun foo1() <!UNSUPPORTED_FEATURE!>header<!> fun foo1()
<!UNSUPPORTED_FEATURE!>platform<!> val bar1 = <!PLATFORM_PROPERTY_INITIALIZER!>42<!> <!UNSUPPORTED_FEATURE!>header<!> val bar1 = <!HEADER_PROPERTY_INITIALIZER!>42<!>
<!UNSUPPORTED_FEATURE!>platform<!> class Baz1 <!UNSUPPORTED_FEATURE!>header<!> class Baz1
<!UNSUPPORTED_FEATURE!>impl<!> fun foo2() = 42 <!UNSUPPORTED_FEATURE!>impl<!> fun foo2() = 42
<!MUST_BE_INITIALIZED!><!UNSUPPORTED_FEATURE!>impl<!> val bar2: Int<!> <!MUST_BE_INITIALIZED!><!UNSUPPORTED_FEATURE!>impl<!> val bar2: Int<!>
@@ -1,3 +1,3 @@
platform class Foo { header class Foo {
constructor(s: String) constructor(s: String)
} }
@@ -5,7 +5,7 @@ Output:
-- JVM -- -- JVM --
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/classScopes/constructorIncorrectSignature/common.kt:1:16: error: no definition is found for platform declaration 'Foo' compiler/testData/multiplatform/classScopes/constructorIncorrectSignature/common.kt:1:14: error: no implementation is found for header declaration 'Foo'
The following declaration is incompatible because some members are not implemented. The following declaration is incompatible because some members are not implemented.
No implementations are found for members listed below: No implementations are found for members listed below:
@@ -14,8 +14,8 @@ No implementations are found for members listed below:
The following declaration is incompatible because parameter types are different: The following declaration is incompatible because parameter types are different:
public constructor Foo(s: Array<String>) public constructor Foo(s: Array<String>)
platform class Foo { header class Foo {
^ ^
compiler/testData/multiplatform/classScopes/constructorIncorrectSignature/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code compiler/testData/multiplatform/classScopes/constructorIncorrectSignature/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl class Foo { impl class Foo {
^ ^
@@ -1,7 +1,7 @@
platform open class Base { header open class Base {
fun base() fun base()
} }
platform class Derived : Base { header class Derived : Base {
fun derived() fun derived()
} }
@@ -1,3 +1,3 @@
platform class Foo { header class Foo {
fun function(b: ByteArray): Int fun function(b: ByteArray): Int
} }
@@ -5,17 +5,17 @@ Output:
-- JVM -- -- JVM --
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/classScopes/functionIncorrectSignature/common.kt:1:16: error: no definition is found for platform declaration 'Foo' compiler/testData/multiplatform/classScopes/functionIncorrectSignature/common.kt:1:14: error: no implementation is found for header declaration 'Foo'
The following declaration is incompatible because some members are not implemented. The following declaration is incompatible because some members are not implemented.
No implementations are found for members listed below: No implementations are found for members listed below:
public final platform fun function(b: ByteArray): Int public final header fun function(b: ByteArray): Int
The following declaration is incompatible because return type is different: The following declaration is incompatible because return type is different:
public final impl fun function(b: ByteArray): Long public final impl fun function(b: ByteArray): Long
platform class Foo { header class Foo {
^ ^
compiler/testData/multiplatform/classScopes/functionIncorrectSignature/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code compiler/testData/multiplatform/classScopes/functionIncorrectSignature/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl class Foo { impl class Foo {
^ ^
@@ -1,3 +1,3 @@
platform class Foo { header class Foo {
constructor(s: String) constructor(s: String)
} }
@@ -5,7 +5,7 @@ Output:
-- JVM -- -- JVM --
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/classScopes/missingConstructor/common.kt:1:16: error: no definition is found for platform declaration 'Foo' compiler/testData/multiplatform/classScopes/missingConstructor/common.kt:1:14: error: no implementation is found for header declaration 'Foo'
The following declaration is incompatible because some members are not implemented. The following declaration is incompatible because some members are not implemented.
No implementations are found for members listed below: No implementations are found for members listed below:
@@ -14,8 +14,8 @@ No implementations are found for members listed below:
The following declaration is incompatible because number of value parameters is different: The following declaration is incompatible because number of value parameters is different:
public constructor Foo() public constructor Foo()
platform class Foo { header class Foo {
^ ^
compiler/testData/multiplatform/classScopes/missingConstructor/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code compiler/testData/multiplatform/classScopes/missingConstructor/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl class Foo impl class Foo
^ ^
@@ -1,3 +1,3 @@
platform class Foo { header class Foo {
fun function(s: String) fun function(s: String)
} }
@@ -5,14 +5,14 @@ Output:
-- JVM -- -- JVM --
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/classScopes/missingFunction/common.kt:1:16: error: no definition is found for platform declaration 'Foo' compiler/testData/multiplatform/classScopes/missingFunction/common.kt:1:14: error: no implementation is found for header declaration 'Foo'
The following declaration is incompatible because some members are not implemented. The following declaration is incompatible because some members are not implemented.
No implementations are found for members listed below: No implementations are found for members listed below:
public final platform fun function(s: String): Unit public final header fun function(s: String): Unit
platform class Foo { header class Foo {
^ ^
compiler/testData/multiplatform/classScopes/missingFunction/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code compiler/testData/multiplatform/classScopes/missingFunction/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl class Foo impl class Foo
^ ^
@@ -1,4 +1,4 @@
platform class Foo(param: String) { header class Foo(param: String) {
var property: Int var property: Int
fun <T> function(p: List<T>): T fun <T> function(p: List<T>): T
@@ -1,13 +1,13 @@
platform fun <T> f1(): T header fun <T> f1(): T
platform fun <T> f2(t: T) header fun <T> f2(t: T)
platform fun <K : Enum<K>, V : MutableList<out K>> f3(v: Map<V, Enum<in K>>, w: Comparable<*>) header fun <K : Enum<K>, V : MutableList<out K>> f3(v: Map<V, Enum<in K>>, w: Comparable<*>)
platform fun <T: Comparable<T>> Array<out T>.sort(): Unit header fun <T: Comparable<T>> Array<out T>.sort(): Unit
platform class C1<A> header class C1<A>
platform class C2<B : C2<B>> header class C2<B : C2<B>>
platform class C3<D, E : MutableList<in D>> header class C3<D, E : MutableList<in D>>
platform abstract class AbstractList<F> : MutableList<F> header abstract class AbstractList<F> : MutableList<F>
@@ -1,3 +1,3 @@
platform class C1<A> { header class C1<A> {
fun foo(a: A): List<A>? fun foo(a: A): List<A>?
} }
@@ -1,36 +1,36 @@
platform fun f1() header fun f1()
platform fun f2(name: String) header fun f2(name: String)
platform fun f3(name: String) header fun f3(name: String)
platform fun String.f3ext() header fun String.f3ext()
platform fun f4(name: String) header fun f4(name: String)
platform fun String.f5() header fun String.f5()
platform fun f6(p1: String, p2: Int) header fun f6(p1: String, p2: Int)
platform fun <T> f7() header fun <T> f7()
internal platform fun f8() internal header fun f8()
private platform fun f9() private header fun f9()
public platform fun f10() public header fun f10()
platform fun <T : Number> f11() header fun <T : Number> f11()
platform fun <U : MutableList<String>> f12() header fun <U : MutableList<String>> f12()
platform fun <A, B : Continuation<A>> f13() header fun <A, B : Continuation<A>> f13()
platform inline fun <X> f14() header inline fun <X> f14()
platform inline fun <reified Y> f15() header inline fun <reified Y> f15()
platform fun f16(s: String) header fun f16(s: String)
platform fun f17(vararg s: String) header fun f17(vararg s: String)
platform fun f18(s: Array<out String>) header fun f18(s: Array<out String>)
platform inline fun f19(crossinline s: () -> Unit) header inline fun f19(crossinline s: () -> Unit)
platform inline fun f20(s: () -> Unit) header inline fun f20(s: () -> Unit)
platform inline fun f21(noinline s: () -> Unit) header inline fun f21(noinline s: () -> Unit)
platform inline fun f22(s: () -> Unit) header inline fun f22(s: () -> Unit)
platform fun f23(coroutine c: Unit.() -> Continuation<Unit>) header fun f23(coroutine c: Unit.() -> Continuation<Unit>)
platform fun f24(c: Unit.() -> Continuation<Unit>) header fun f24(c: Unit.() -> Continuation<Unit>)
@@ -5,137 +5,137 @@ Output:
-- JVM -- -- JVM --
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/incompatibleCallables/common.kt:1:1: error: no definition is found for platform declaration 'f1' compiler/testData/multiplatform/incompatibleCallables/common.kt:1:1: error: no implementation is found for header declaration 'f1'
The following declaration is incompatible because return type is different: The following declaration is incompatible because return type is different:
public impl fun f1(): String public impl fun f1(): String
platform fun f1() header fun f1()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:3:1: error: no definition is found for platform declaration 'f2' compiler/testData/multiplatform/incompatibleCallables/common.kt:3:1: error: no implementation is found for header declaration 'f2'
The following declaration is incompatible because parameter names are different: The following declaration is incompatible because parameter names are different:
public impl fun f2(otherName: String): Unit public impl fun f2(otherName: String): Unit
platform fun f2(name: String) header fun f2(name: String)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:5:1: error: no definition is found for platform declaration 'f3' compiler/testData/multiplatform/incompatibleCallables/common.kt:5:1: error: no implementation is found for header declaration 'f3'
The following declaration is incompatible because parameter types are different: The following declaration is incompatible because parameter types are different:
public impl fun f3(name: Double): Unit public impl fun f3(name: Double): Unit
platform fun f3(name: String) header fun f3(name: String)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:6:1: error: no definition is found for platform declaration 'f3ext' compiler/testData/multiplatform/incompatibleCallables/common.kt:6:1: error: no implementation is found for header declaration 'f3ext'
The following declaration is incompatible because parameter types are different: The following declaration is incompatible because parameter types are different:
public impl fun Double.f3ext(): Unit public impl fun Double.f3ext(): Unit
platform fun String.f3ext() header fun String.f3ext()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:8:1: error: no definition is found for platform declaration 'f4' compiler/testData/multiplatform/incompatibleCallables/common.kt:8:1: error: no implementation is found for header declaration 'f4'
The following declaration is incompatible because parameter shapes are different (extension vs non-extension): The following declaration is incompatible because parameter shapes are different (extension vs non-extension):
public impl fun String.f4(): Unit public impl fun String.f4(): Unit
platform fun f4(name: String) header fun f4(name: String)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:10:1: error: no definition is found for platform declaration 'f5' compiler/testData/multiplatform/incompatibleCallables/common.kt:10:1: error: no implementation is found for header declaration 'f5'
The following declaration is incompatible because parameter shapes are different (extension vs non-extension): The following declaration is incompatible because parameter shapes are different (extension vs non-extension):
public impl fun f5(name: String): Unit public impl fun f5(name: String): Unit
platform fun String.f5() header fun String.f5()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:12:1: error: no definition is found for platform declaration 'f6' compiler/testData/multiplatform/incompatibleCallables/common.kt:12:1: error: no implementation is found for header declaration 'f6'
The following declaration is incompatible because number of value parameters is different: The following declaration is incompatible because number of value parameters is different:
public impl fun f6(p2: Int): Unit public impl fun f6(p2: Int): Unit
platform fun f6(p1: String, p2: Int) header fun f6(p1: String, p2: Int)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:14:1: error: no definition is found for platform declaration 'f7' compiler/testData/multiplatform/incompatibleCallables/common.kt:14:1: error: no implementation is found for header declaration 'f7'
The following declaration is incompatible because number of type parameters is different: The following declaration is incompatible because number of type parameters is different:
public impl fun <K, V> f7(): Unit public impl fun <K, V> f7(): Unit
platform fun <T> f7() header fun <T> f7()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:16:1: error: no definition is found for platform declaration 'f8' compiler/testData/multiplatform/incompatibleCallables/common.kt:16:1: error: no implementation is found for header declaration 'f8'
The following declaration is incompatible because visibility is different: The following declaration is incompatible because visibility is different:
public impl fun f8(): Unit public impl fun f8(): Unit
internal platform fun f8() internal header fun f8()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:17:1: error: no definition is found for platform declaration 'f9' compiler/testData/multiplatform/incompatibleCallables/common.kt:17:1: error: no implementation is found for header declaration 'f9'
The following declaration is incompatible because visibility is different: The following declaration is incompatible because visibility is different:
internal impl fun f9(): Unit internal impl fun f9(): Unit
private platform fun f9() private header fun f9()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:18:1: error: no definition is found for platform declaration 'f10' compiler/testData/multiplatform/incompatibleCallables/common.kt:18:1: error: no implementation is found for header declaration 'f10'
The following declaration is incompatible because visibility is different: The following declaration is incompatible because visibility is different:
private impl fun f10(): Unit private impl fun f10(): Unit
public platform fun f10() public header fun f10()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:24:1: error: no definition is found for platform declaration 'f14' compiler/testData/multiplatform/incompatibleCallables/common.kt:24:1: error: no implementation is found for header declaration 'f14'
The following declaration is incompatible because some type parameter is reified in one declaration and non-reified in the other: The following declaration is incompatible because some type parameter is reified in one declaration and non-reified in the other:
public inline impl fun <reified X> f14(): Unit public inline impl fun <reified X> f14(): Unit
platform inline fun <X> f14() header inline fun <X> f14()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:25:1: error: no definition is found for platform declaration 'f15' compiler/testData/multiplatform/incompatibleCallables/common.kt:25:1: error: no implementation is found for header declaration 'f15'
The following declaration is incompatible because some type parameter is reified in one declaration and non-reified in the other: The following declaration is incompatible because some type parameter is reified in one declaration and non-reified in the other:
public inline impl fun <Y> f15(): Unit public inline impl fun <Y> f15(): Unit
platform inline fun <reified Y> f15() header inline fun <reified Y> f15()
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:27:1: error: no definition is found for platform declaration 'f16' compiler/testData/multiplatform/incompatibleCallables/common.kt:27:1: error: no implementation is found for header declaration 'f16'
The following declaration is incompatible because some parameters have default values: The following declaration is incompatible because some parameters have default values:
public impl fun f16(s: String = ...): Unit public impl fun f16(s: String = ...): Unit
platform fun f16(s: String) header fun f16(s: String)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:29:1: error: no definition is found for platform declaration 'f17' compiler/testData/multiplatform/incompatibleCallables/common.kt:29:1: error: no implementation is found for header declaration 'f17'
The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline):
public impl fun f17(s: Array<out String>): Unit public impl fun f17(s: Array<out String>): Unit
platform fun f17(vararg s: String) header fun f17(vararg s: String)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:30:1: error: no definition is found for platform declaration 'f18' compiler/testData/multiplatform/incompatibleCallables/common.kt:30:1: error: no implementation is found for header declaration 'f18'
The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline):
public impl fun f18(vararg s: String): Unit public impl fun f18(vararg s: String): Unit
platform fun f18(s: Array<out String>) header fun f18(s: Array<out String>)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:31:1: error: no definition is found for platform declaration 'f19' compiler/testData/multiplatform/incompatibleCallables/common.kt:31:1: error: no implementation is found for header declaration 'f19'
The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline):
public inline impl fun f19(s: () -> Unit): Unit public inline impl fun f19(s: () -> Unit): Unit
platform inline fun f19(crossinline s: () -> Unit) header inline fun f19(crossinline s: () -> Unit)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:32:1: error: no definition is found for platform declaration 'f20' compiler/testData/multiplatform/incompatibleCallables/common.kt:32:1: error: no implementation is found for header declaration 'f20'
The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline):
public inline impl fun f20(crossinline s: () -> Unit): Unit public inline impl fun f20(crossinline s: () -> Unit): Unit
platform inline fun f20(s: () -> Unit) header inline fun f20(s: () -> Unit)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:33:1: error: no definition is found for platform declaration 'f21' compiler/testData/multiplatform/incompatibleCallables/common.kt:33:1: error: no implementation is found for header declaration 'f21'
The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline):
public inline impl fun f21(s: () -> Unit): Unit public inline impl fun f21(s: () -> Unit): Unit
platform inline fun f21(noinline s: () -> Unit) header inline fun f21(noinline s: () -> Unit)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:34:1: error: no definition is found for platform declaration 'f22' compiler/testData/multiplatform/incompatibleCallables/common.kt:34:1: error: no implementation is found for header declaration 'f22'
The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline):
public inline impl fun f22(noinline s: () -> Unit): Unit public inline impl fun f22(noinline s: () -> Unit): Unit
platform inline fun f22(s: () -> Unit) header inline fun f22(s: () -> Unit)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:35:1: error: no definition is found for platform declaration 'f23' compiler/testData/multiplatform/incompatibleCallables/common.kt:35:1: error: no implementation is found for header declaration 'f23'
The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline):
public impl fun f23(c: Unit.() -> Continuation<Unit>): Unit public impl fun f23(c: Unit.() -> Continuation<Unit>): Unit
platform fun f23(coroutine c: Unit.() -> Continuation<Unit>) header fun f23(coroutine c: Unit.() -> Continuation<Unit>)
^ ^
compiler/testData/multiplatform/incompatibleCallables/common.kt:36:1: error: no definition is found for platform declaration 'f24' compiler/testData/multiplatform/incompatibleCallables/common.kt:36:1: error: no implementation is found for header declaration 'f24'
The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline):
public impl fun f24(coroutine c: Unit.() -> Continuation<Unit>): Unit public impl fun f24(coroutine c: Unit.() -> Continuation<Unit>): Unit
platform fun f24(c: Unit.() -> Continuation<Unit>) header fun f24(c: Unit.() -> Continuation<Unit>)
^ ^
compiler/testData/multiplatform/incompatibleCallables/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code compiler/testData/multiplatform/incompatibleCallables/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl fun f1(): String = "" impl fun f1(): String = ""
+18 -18
View File
@@ -1,25 +1,25 @@
platform class PClass header class PClass
platform interface PInterface header interface PInterface
platform object PObject header object PObject
platform enum class PEnumClass header enum class PEnumClass
platform annotation class PAnnotationClass header annotation class PAnnotationClass
internal platform object InternalObject internal header object InternalObject
public platform object PublicObject public header object PublicObject
private platform object PrivateObject private header object PrivateObject
open platform class OpenClass open header class OpenClass
abstract platform class AbstractClass abstract header class AbstractClass
final platform class FinalClass final header class FinalClass
// platform data class DataClass(val x: Int) // header data class DataClass(val x: Int)
platform class NonDataClass(x: Int) header class NonDataClass(x: Int)
platform class C1<A> header class C1<A>
platform class C2<B> header class C2<B>
platform class C3<D, E : D> header class C3<D, E : D>
platform class C4<F> header class C4<F>
platform abstract class ExtendsNumber : Number header abstract class ExtendsNumber : Number
@@ -5,96 +5,96 @@ Output:
-- JVM -- -- JVM --
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/incompatibleClasses/common.kt:1:16: error: no definition is found for platform declaration 'PClass' compiler/testData/multiplatform/incompatibleClasses/common.kt:1:14: error: no implementation is found for header declaration 'PClass'
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation): The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
public impl interface PClass public impl interface PClass
platform class PClass header class PClass
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:2:20: error: no definition is found for platform declaration 'PInterface' compiler/testData/multiplatform/incompatibleClasses/common.kt:2:18: error: no implementation is found for header declaration 'PInterface'
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation): The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
public impl object PInterface public impl object PInterface
platform interface PInterface header interface PInterface
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:3:10: error: no definition is found for platform declaration 'PObject' compiler/testData/multiplatform/incompatibleClasses/common.kt:3:8: error: no implementation is found for header declaration 'PObject'
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation): The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
public final impl enum class PObject : Enum<PObject> public final impl enum class PObject : Enum<PObject>
platform object PObject header object PObject
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:4:21: error: no definition is found for platform declaration 'PEnumClass' compiler/testData/multiplatform/incompatibleClasses/common.kt:4:19: error: no implementation is found for header declaration 'PEnumClass'
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation): The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
public final impl annotation class PEnumClass : Annotation public final impl annotation class PEnumClass : Annotation
platform enum class PEnumClass header enum class PEnumClass
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:5:27: error: no definition is found for platform declaration 'PAnnotationClass' compiler/testData/multiplatform/incompatibleClasses/common.kt:5:25: error: no implementation is found for header declaration 'PAnnotationClass'
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation): The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
public final impl class PAnnotationClass public final impl class PAnnotationClass
platform annotation class PAnnotationClass header annotation class PAnnotationClass
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:7:19: error: no definition is found for platform declaration 'InternalObject' compiler/testData/multiplatform/incompatibleClasses/common.kt:7:17: error: no implementation is found for header declaration 'InternalObject'
The following declaration is incompatible because visibility is different: The following declaration is incompatible because visibility is different:
private impl object InternalObject private impl object InternalObject
internal platform object InternalObject internal header object InternalObject
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:8:17: error: no definition is found for platform declaration 'PublicObject' compiler/testData/multiplatform/incompatibleClasses/common.kt:8:15: error: no implementation is found for header declaration 'PublicObject'
The following declaration is incompatible because visibility is different: The following declaration is incompatible because visibility is different:
internal impl object PublicObject internal impl object PublicObject
public platform object PublicObject public header object PublicObject
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:9:18: error: no definition is found for platform declaration 'PrivateObject' compiler/testData/multiplatform/incompatibleClasses/common.kt:9:16: error: no implementation is found for header declaration 'PrivateObject'
The following declaration is incompatible because visibility is different: The following declaration is incompatible because visibility is different:
public impl object PrivateObject public impl object PrivateObject
private platform object PrivateObject private header object PrivateObject
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:11:21: error: no definition is found for platform declaration 'OpenClass' compiler/testData/multiplatform/incompatibleClasses/common.kt:11:19: error: no implementation is found for header declaration 'OpenClass'
The following declaration is incompatible because modality is different: The following declaration is incompatible because modality is different:
public final impl class OpenClass public final impl class OpenClass
open platform class OpenClass open header class OpenClass
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:12:25: error: no definition is found for platform declaration 'AbstractClass' compiler/testData/multiplatform/incompatibleClasses/common.kt:12:23: error: no implementation is found for header declaration 'AbstractClass'
The following declaration is incompatible because modality is different: The following declaration is incompatible because modality is different:
public open impl class AbstractClass public open impl class AbstractClass
abstract platform class AbstractClass abstract header class AbstractClass
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:13:22: error: no definition is found for platform declaration 'FinalClass' compiler/testData/multiplatform/incompatibleClasses/common.kt:13:20: error: no implementation is found for header declaration 'FinalClass'
The following declaration is incompatible because modality is different: The following declaration is incompatible because modality is different:
public abstract impl class FinalClass public abstract impl class FinalClass
final platform class FinalClass final header class FinalClass
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:16:16: error: no definition is found for platform declaration 'NonDataClass' compiler/testData/multiplatform/incompatibleClasses/common.kt:16:14: error: no implementation is found for header declaration 'NonDataClass'
The following declaration is incompatible because modifiers are different (data): The following declaration is incompatible because modifiers are different (data):
public final impl data class NonDataClass public final impl data class NonDataClass
platform class NonDataClass(x: Int) header class NonDataClass(x: Int)
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:18:16: error: no definition is found for platform declaration 'C1' compiler/testData/multiplatform/incompatibleClasses/common.kt:18:14: error: no implementation is found for header declaration 'C1'
The following declaration is incompatible because number of type parameters is different: The following declaration is incompatible because number of type parameters is different:
public final impl class C1<A, Extra> public final impl class C1<A, Extra>
platform class C1<A> header class C1<A>
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:19:16: error: no definition is found for platform declaration 'C2' compiler/testData/multiplatform/incompatibleClasses/common.kt:19:14: error: no implementation is found for header declaration 'C2'
The following declaration is incompatible because declaration-site variances of type parameters are different: The following declaration is incompatible because declaration-site variances of type parameters are different:
public final impl class C2<out B> public final impl class C2<out B>
platform class C2<B> header class C2<B>
^ ^
compiler/testData/multiplatform/incompatibleClasses/common.kt:25:25: error: no definition is found for platform declaration 'ExtendsNumber' compiler/testData/multiplatform/incompatibleClasses/common.kt:25:23: error: no implementation is found for header declaration 'ExtendsNumber'
The following declaration is incompatible because some supertypes are missing in the implementation: The following declaration is incompatible because some supertypes are missing in the implementation:
public abstract impl class ExtendsNumber public abstract impl class ExtendsNumber
platform abstract class ExtendsNumber : Number header abstract class ExtendsNumber : Number
^ ^
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code compiler/testData/multiplatform/incompatibleClasses/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl interface PClass impl interface PClass
^ ^
@@ -1,14 +1,14 @@
platform infix fun Int.plus(s: CharSequence): Int header infix fun Int.plus(s: CharSequence): Int
platform fun Int.minus(s: String): Int header fun Int.minus(s: String): Int
platform operator fun Double.times(x: CharArray) header operator fun Double.times(x: CharArray)
platform fun Double.divide(x: ByteArray) header fun Double.divide(x: ByteArray)
platform external fun f1() header external fun f1()
platform fun g1() header fun g1()
platform inline fun f2() header inline fun f2()
platform fun g2() header fun g2()
platform tailrec fun f3() header tailrec fun f3()
platform fun g3() header fun g3()
@@ -5,65 +5,65 @@ Output:
-- JVM -- -- JVM --
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/incompatibleFunctions/common.kt:1:1: error: no definition is found for platform declaration 'plus' compiler/testData/multiplatform/incompatibleFunctions/common.kt:1:1: error: no implementation is found for header declaration 'plus'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public impl fun Int.plus(s: CharSequence): Int public impl fun Int.plus(s: CharSequence): Int
platform infix fun Int.plus(s: CharSequence): Int header infix fun Int.plus(s: CharSequence): Int
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:2:1: error: no definition is found for platform declaration 'minus' compiler/testData/multiplatform/incompatibleFunctions/common.kt:2:1: error: no implementation is found for header declaration 'minus'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public infix impl fun Int.minus(s: String): Int public infix impl fun Int.minus(s: String): Int
platform fun Int.minus(s: String): Int header fun Int.minus(s: String): Int
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:4:1: error: no definition is found for platform declaration 'times' compiler/testData/multiplatform/incompatibleFunctions/common.kt:4:1: error: no implementation is found for header declaration 'times'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public impl fun Double.times(x: CharArray): Unit public impl fun Double.times(x: CharArray): Unit
platform operator fun Double.times(x: CharArray) header operator fun Double.times(x: CharArray)
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:5:1: error: no definition is found for platform declaration 'divide' compiler/testData/multiplatform/incompatibleFunctions/common.kt:5:1: error: no implementation is found for header declaration 'divide'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public operator impl fun Double.divide(x: ByteArray): Unit public operator impl fun Double.divide(x: ByteArray): Unit
platform fun Double.divide(x: ByteArray) header fun Double.divide(x: ByteArray)
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:7:1: error: no definition is found for platform declaration 'f1' compiler/testData/multiplatform/incompatibleFunctions/common.kt:7:1: error: no implementation is found for header declaration 'f1'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public impl fun f1(): Unit public impl fun f1(): Unit
platform external fun f1() header external fun f1()
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:8:1: error: no definition is found for platform declaration 'g1' compiler/testData/multiplatform/incompatibleFunctions/common.kt:8:1: error: no implementation is found for header declaration 'g1'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public external impl fun g1(): Unit public external impl fun g1(): Unit
platform fun g1() header fun g1()
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:10:1: error: no definition is found for platform declaration 'f2' compiler/testData/multiplatform/incompatibleFunctions/common.kt:10:1: error: no implementation is found for header declaration 'f2'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public impl fun f2(): Unit public impl fun f2(): Unit
platform inline fun f2() header inline fun f2()
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:11:1: error: no definition is found for platform declaration 'g2' compiler/testData/multiplatform/incompatibleFunctions/common.kt:11:1: error: no implementation is found for header declaration 'g2'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public inline impl fun g2(): Unit public inline impl fun g2(): Unit
platform fun g2() header fun g2()
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:13:1: error: no definition is found for platform declaration 'f3' compiler/testData/multiplatform/incompatibleFunctions/common.kt:13:1: error: no implementation is found for header declaration 'f3'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public impl fun f3(): Unit public impl fun f3(): Unit
platform tailrec fun f3() header tailrec fun f3()
^ ^
compiler/testData/multiplatform/incompatibleFunctions/common.kt:14:1: error: no definition is found for platform declaration 'g3' compiler/testData/multiplatform/incompatibleFunctions/common.kt:14:1: error: no implementation is found for header declaration 'g3'
The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec): The following declaration is incompatible because modifiers are different (external, infix, inline, operator, suspend, tailrec):
public tailrec impl fun g3(): Unit public tailrec impl fun g3(): Unit
platform fun g3() header fun g3()
^ ^
compiler/testData/multiplatform/incompatibleFunctions/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code compiler/testData/multiplatform/incompatibleFunctions/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl fun Int.plus(s: CharSequence): Int = 0 impl fun Int.plus(s: CharSequence): Int = 0
@@ -1,2 +1,2 @@
platform val pval: String header val pval: String
platform var pvar: String header var pvar: String
@@ -5,17 +5,17 @@ Output:
-- JVM -- -- JVM --
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/incompatibleProperties/common.kt:1:1: error: no definition is found for platform declaration 'pval' compiler/testData/multiplatform/incompatibleProperties/common.kt:1:1: error: no implementation is found for header declaration 'pval'
The following declaration is incompatible because property kinds are different (val vs var): The following declaration is incompatible because property kinds are different (val vs var):
public var pval: String public var pval: String
platform val pval: String header val pval: String
^ ^
compiler/testData/multiplatform/incompatibleProperties/common.kt:2:1: error: no definition is found for platform declaration 'pvar' compiler/testData/multiplatform/incompatibleProperties/common.kt:2:1: error: no implementation is found for header declaration 'pvar'
The following declaration is incompatible because property kinds are different (val vs var): The following declaration is incompatible because property kinds are different (val vs var):
public val pvar: String public val pvar: String
platform var pvar: String header var pvar: String
^ ^
compiler/testData/multiplatform/incompatibleProperties/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code compiler/testData/multiplatform/incompatibleProperties/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl var pval: String = "" impl var pval: String = ""
@@ -1 +1 @@
platform class Foo header class Foo
+1 -1
View File
@@ -1,4 +1,4 @@
platform class Printer { header class Printer {
fun print(message: String) fun print(message: String)
} }
@@ -417,7 +417,7 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest {
List<ModuleDescriptorImpl> dependencies = moduleDescriptor.getTestOnly_AllDependentModules(); List<ModuleDescriptorImpl> dependencies = moduleDescriptor.getTestOnly_AllDependentModules();
// TODO: diagnostics on common code reported during the platform module analysis should be distinguished somehow // TODO: diagnostics on common code reported during the platform module analysis should be distinguished somehow
// E.g. "<!JVM:PLATFORM_DEFINITION_WITHOUT_DECLARATION!>...<!> // E.g. "<!JVM:IMPLEMENTATION_WITHOUT_HEADER!>...<!>
List<KtFile> result = new ArrayList<KtFile>(0); List<KtFile> result = new ArrayList<KtFile>(0);
for (ModuleDescriptorImpl dependency : dependencies) { for (ModuleDescriptorImpl dependency : dependencies) {
if (dependency.getCapability(MultiTargetPlatform.CAPABILITY) == MultiTargetPlatform.Common.INSTANCE) { if (dependency.getCapability(MultiTargetPlatform.CAPABILITY) == MultiTargetPlatform.Common.INSTANCE) {
@@ -205,8 +205,8 @@ public class RecursiveDescriptorComparator {
} }
} }
// 'platform' declarations do not belong to the platform-specific module, even though they participate in the analysis // 'header' declarations do not belong to the platform-specific module, even though they participate in the analysis
if (descriptor instanceof MemberDescriptor && ((MemberDescriptor) descriptor).isPlatform() && if (descriptor instanceof MemberDescriptor && ((MemberDescriptor) descriptor).isHeader() &&
module.getCapability(MultiTargetPlatform.CAPABILITY) != MultiTargetPlatform.Common.INSTANCE) return false; module.getCapability(MultiTargetPlatform.CAPABILITY) != MultiTargetPlatform.Common.INSTANCE) return false;
return module.equals(DescriptorUtils.getContainingModule(descriptor)); return module.equals(DescriptorUtils.getContainingModule(descriptor));
@@ -46,7 +46,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
boolean isStaticFinal boolean isStaticFinal
) { ) {
super(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source, super(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source,
/* lateInit = */ false, /* isConst = */ false, /* isPlatform = */ false, /* isImpl = */ false, /* isExternal = */ false); /* lateInit = */ false, /* isConst = */ false, /* isHeader = */ false, /* isImpl = */ false, /* isExternal = */ false);
this.isStaticFinal = isStaticFinal; this.isStaticFinal = isStaticFinal;
} }
@@ -100,7 +100,7 @@ class LazyJavaClassDescriptor(
override fun isInner() = isInner override fun isInner() = isInner
override fun isData() = false override fun isData() = false
override fun isCompanionObject() = false override fun isCompanionObject() = false
override fun isPlatform() = false override fun isHeader() = false
override fun isImpl() = false override fun isImpl() = false
private val typeConstructor = c.storageManager.createLazyValue { LazyJavaClassTypeConstructor() } private val typeConstructor = c.storageManager.createLazyValue { LazyJavaClassTypeConstructor() }

Some files were not shown because too many files have changed in this diff Show More