[JS FE] Minor: cleanup JsExternalChecker.kt

This commit is contained in:
Zalim Bashorov
2018-08-21 13:20:01 +03:00
parent 589085369e
commit 503fcd5cd3
@@ -39,22 +39,23 @@ object JsExternalChecker : DeclarationChecker {
} }
} }
if (DescriptorUtils.isAnnotationClass(descriptor)) { if (descriptor is ClassDescriptor) {
trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, "annotation class")) val classKind = when {
descriptor.isData -> "data class"
descriptor.isInner -> "inner class"
descriptor.isInline -> "inline class"
DescriptorUtils.isAnnotationClass(descriptor) -> "annotation class"
else -> null
}
if (classKind != null) {
trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, classKind))
}
} }
else if (descriptor is ClassDescriptor && descriptor.isData) {
trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, "data class")) if (descriptor is PropertyAccessorDescriptor && isDirectlyExternal(declaration, descriptor)) {
}
else if (descriptor is PropertyAccessorDescriptor && isDirectlyExternal(declaration, descriptor)) {
trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, "property accessor")) trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, "property accessor"))
} } else if (isPrivateMemberOfExternalClass(descriptor)) {
else if (descriptor is ClassDescriptor && descriptor.isInner) {
trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, "inner class"))
}
else if (descriptor is ClassDescriptor && descriptor.isInline) {
trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, "inline class"))
}
else if (isPrivateMemberOfExternalClass(descriptor)) {
trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, "private member of class")) trace.report(ErrorsJs.WRONG_EXTERNAL_DECLARATION.on(declaration, "private member of class"))
} }
@@ -132,16 +133,15 @@ object JsExternalChecker : DeclarationChecker {
} }
private fun checkBody( private fun checkBody(
declaration: KtDeclaration, descriptor: DeclarationDescriptor, declaration: KtDeclaration, descriptor: DeclarationDescriptor,
diagnosticHolder: DiagnosticSink, bindingContext: BindingContext diagnosticHolder: DiagnosticSink, bindingContext: BindingContext
) { ) {
if (declaration is KtProperty && descriptor is PropertyAccessorDescriptor) return if (declaration is KtProperty && descriptor is PropertyAccessorDescriptor) return
if (declaration is KtDeclarationWithBody && !declaration.hasValidExternalBody(bindingContext)) { if (declaration is KtDeclarationWithBody && !declaration.hasValidExternalBody(bindingContext)) {
diagnosticHolder.report(ErrorsJs.WRONG_BODY_OF_EXTERNAL_DECLARATION.on(declaration.bodyExpression!!)) diagnosticHolder.report(ErrorsJs.WRONG_BODY_OF_EXTERNAL_DECLARATION.on(declaration.bodyExpression!!))
} } else if (declaration is KtDeclarationWithInitializer &&
else if (declaration is KtDeclarationWithInitializer && declaration.initializer?.isDefinedExternallyExpression(bindingContext) == false
declaration.initializer?.isDefinedExternallyExpression(bindingContext) == false
) { ) {
diagnosticHolder.report(ErrorsJs.WRONG_INITIALIZER_OF_EXTERNAL_DECLARATION.on(declaration.initializer!!)) diagnosticHolder.report(ErrorsJs.WRONG_INITIALIZER_OF_EXTERNAL_DECLARATION.on(declaration.initializer!!))
} }
@@ -168,14 +168,12 @@ object JsExternalChecker : DeclarationChecker {
} }
} }
} }
} } else if (declaration is KtSecondaryConstructor) {
else if (declaration is KtSecondaryConstructor) {
val delegationCall = declaration.getDelegationCall() val delegationCall = declaration.getDelegationCall()
if (!delegationCall.isImplicit) { if (!delegationCall.isImplicit) {
diagnosticHolder.report(ErrorsJs.EXTERNAL_DELEGATED_CONSTRUCTOR_CALL.on(delegationCall)) diagnosticHolder.report(ErrorsJs.EXTERNAL_DELEGATED_CONSTRUCTOR_CALL.on(delegationCall))
} }
} } else if (declaration is KtProperty && descriptor !is PropertyAccessorDescriptor) {
else if (declaration is KtProperty && descriptor !is PropertyAccessorDescriptor) {
declaration.delegate?.let { delegate -> declaration.delegate?.let { delegate ->
diagnosticHolder.report(ErrorsJs.EXTERNAL_DELEGATION.on(delegate)) diagnosticHolder.report(ErrorsJs.EXTERNAL_DELEGATION.on(delegate))
} }
@@ -192,15 +190,15 @@ object JsExternalChecker : DeclarationChecker {
private fun checkEnumEntry(declaration: KtDeclaration, diagnosticHolder: DiagnosticSink) { private fun checkEnumEntry(declaration: KtDeclaration, diagnosticHolder: DiagnosticSink) {
if (declaration !is KtEnumEntry) return if (declaration !is KtEnumEntry) return
declaration.getBody()?.let { declaration.body?.let {
diagnosticHolder.report(ErrorsJs.EXTERNAL_ENUM_ENTRY_WITH_BODY.on(it)) diagnosticHolder.report(ErrorsJs.EXTERNAL_ENUM_ENTRY_WITH_BODY.on(it))
} }
} }
private fun checkConstructorPropertyParam( private fun checkConstructorPropertyParam(
declaration: KtDeclaration, declaration: KtDeclaration,
descriptor: DeclarationDescriptor, descriptor: DeclarationDescriptor,
diagnosticHolder: DiagnosticSink diagnosticHolder: DiagnosticSink
) { ) {
if (descriptor !is PropertyDescriptor || declaration !is KtParameter) return if (descriptor !is PropertyDescriptor || declaration !is KtParameter) return
val containingClass = descriptor.containingDeclaration as ClassDescriptor val containingClass = descriptor.containingDeclaration as ClassDescriptor
@@ -212,7 +210,7 @@ object JsExternalChecker : DeclarationChecker {
if (declaration is KtProperty && descriptor is PropertyAccessorDescriptor) return false if (declaration is KtProperty && descriptor is PropertyAccessorDescriptor) return false
return declaration.hasModifier(KtTokens.EXTERNAL_KEYWORD) || return declaration.hasModifier(KtTokens.EXTERNAL_KEYWORD) ||
AnnotationsUtils.hasAnnotation(descriptor, PredefinedAnnotation.NATIVE) AnnotationsUtils.hasAnnotation(descriptor, PredefinedAnnotation.NATIVE)
} }
private fun isPrivateMemberOfExternalClass(descriptor: DeclarationDescriptor): Boolean { private fun isPrivateMemberOfExternalClass(descriptor: DeclarationDescriptor): Boolean {
@@ -224,8 +222,9 @@ object JsExternalChecker : DeclarationChecker {
} }
private fun CallableMemberDescriptor.isNonAbstractMemberOfInterface() = private fun CallableMemberDescriptor.isNonAbstractMemberOfInterface() =
modality != Modality.ABSTRACT && DescriptorUtils.isInterface(containingDeclaration) && modality != Modality.ABSTRACT &&
this !is PropertyAccessorDescriptor DescriptorUtils.isInterface(containingDeclaration) &&
this !is PropertyAccessorDescriptor
private fun CallableMemberDescriptor.isNullableProperty() = this is PropertyDescriptor && TypeUtils.isNullableType(type) private fun CallableMemberDescriptor.isNullableProperty() = this is PropertyDescriptor && TypeUtils.isNullableType(type)