[Wasm] Suppress unused parameters warning for functions with JS body
These parameters can be used in js(code)
This commit is contained in:
committed by
Space Team
parent
71e6b19760
commit
60ef7fcb49
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.wasm.analyze
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.JsStandardClassIds
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.checkers.PlatformDiagnosticSuppressor
|
||||
import org.jetbrains.kotlin.wasm.util.hasValidJsCodeBody
|
||||
|
||||
|
||||
object WasmDiagnosticSuppressor : PlatformDiagnosticSuppressor {
|
||||
override fun shouldReportUnusedParameter(parameter: VariableDescriptor, bindingContext: BindingContext): Boolean {
|
||||
val containingDeclaration = parameter.containingDeclaration
|
||||
if (containingDeclaration is FunctionDescriptor) {
|
||||
return !containingDeclaration.hasValidJsCodeBody(bindingContext)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun shouldReportNoBody(descriptor: CallableMemberDescriptor): Boolean = true
|
||||
}
|
||||
+2
-2
@@ -8,13 +8,13 @@ package org.jetbrains.kotlin.wasm.resolve
|
||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||
import org.jetbrains.kotlin.container.useImpl
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.js.analyze.JsNativeDiagnosticSuppressor
|
||||
import org.jetbrains.kotlin.js.naming.NameSuggestion
|
||||
import org.jetbrains.kotlin.js.resolve.ExtensionFunctionToExternalIsInlinable
|
||||
import org.jetbrains.kotlin.js.resolve.diagnostics.*
|
||||
import org.jetbrains.kotlin.resolve.PlatformConfiguratorBase
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.LateinitIntrinsicApplicabilityChecker
|
||||
import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker
|
||||
import org.jetbrains.kotlin.wasm.analyze.WasmDiagnosticSuppressor
|
||||
import org.jetbrains.kotlin.wasm.resolve.diagnostics.WasmExternalDeclarationChecker
|
||||
import org.jetbrains.kotlin.wasm.resolve.diagnostics.WasmExternalInheritanceChecker
|
||||
import org.jetbrains.kotlin.wasm.resolve.diagnostics.WasmImportAnnotationChecker
|
||||
@@ -50,7 +50,7 @@ object WasmPlatformConfigurator : PlatformConfiguratorBase(
|
||||
container.useImpl<JsReifiedNativeChecker>()
|
||||
container.useInstance(ExtensionFunctionToExternalIsInlinable)
|
||||
container.useInstance(JsQualifierChecker)
|
||||
container.useInstance(JsNativeDiagnosticSuppressor)
|
||||
container.useInstance(WasmDiagnosticSuppressor)
|
||||
}
|
||||
|
||||
override fun configureModuleDependentCheckers(container: StorageComponentContainer) {
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.wasm.util
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.js.resolve.diagnostics.JsCallChecker.Companion.isJsCall
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||
|
||||
fun FunctionDescriptor.hasValidJsCodeBody(bindingContext: BindingContext): Boolean {
|
||||
val psi = source.getPsi() as? KtNamedFunction ?: return false
|
||||
return psi.hasValidJsCodeBody(bindingContext)
|
||||
}
|
||||
|
||||
private fun KtDeclarationWithBody.hasValidJsCodeBody(bindingContext: BindingContext): Boolean {
|
||||
if (!hasBody()) return true
|
||||
val body = bodyExpression!!
|
||||
return when {
|
||||
!hasBlockBody() -> body.isJsCall(bindingContext)
|
||||
body is KtBlockExpression -> {
|
||||
val statement = body.statements.singleOrNull() ?: return false
|
||||
statement.isJsCall(bindingContext)
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtExpression.isJsCall(bindingContext: BindingContext): Boolean {
|
||||
return getResolvedCall(bindingContext)?.isJsCall() ?: false
|
||||
}
|
||||
Reference in New Issue
Block a user