Inject ConstantExpressionEvaluator into JsCallChecker

Do not pass expected type into evaluateExpression
This commit is contained in:
Pavel V. Talanov
2015-07-23 16:19:22 +03:00
parent 065945176e
commit 2b9fc5268e
2 changed files with 15 additions and 4 deletions
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.js.resolve
import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.js.resolve.diagnostics.JsCallChecker
import org.jetbrains.kotlin.resolve.PlatformConfigurator
import org.jetbrains.kotlin.types.DynamicTypesAllowed
@@ -23,7 +25,13 @@ import org.jetbrains.kotlin.types.DynamicTypesAllowed
public object JsPlatformConfigurator : PlatformConfigurator(
DynamicTypesAllowed(),
additionalDeclarationCheckers = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker(), ClassDeclarationChecker()),
additionalCallCheckers = listOf(JsCallChecker()),
additionalCallCheckers = listOf(),
additionalTypeCheckers = listOf(),
additionalSymbolUsageValidators = listOf()
)
) {
override fun configure(container: StorageComponentContainer) {
super.configure(container)
container.useImpl<JsCallChecker>()
}
}
@@ -44,9 +44,12 @@ import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant
import org.jetbrains.kotlin.resolve.constants.StringValue
import org.jetbrains.kotlin.resolve.constants.TypedCompileTimeConstant
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
import org.jetbrains.kotlin.types.TypeUtils
import kotlin.platform.platformStatic
public class JsCallChecker : CallChecker {
public class JsCallChecker(
private val constantExpressionEvaluator: ConstantExpressionEvaluator
) : CallChecker {
companion object {
private val JS_PATTERN: DescriptorPredicate = PatternBuilder.pattern("kotlin.js.js(String)")
@@ -74,7 +77,7 @@ public class JsCallChecker : CallChecker {
val trace = TemporaryBindingTrace.create(context.trace, "JsCallChecker")
val evaluationResult = ConstantExpressionEvaluator.evaluate(argument, trace, KotlinBuiltIns.getInstance().getStringType())
val evaluationResult = constantExpressionEvaluator.evaluateExpression(argument, trace, TypeUtils.NO_EXPECTED_TYPE)
val code = extractStringValue(evaluationResult)
if (code == null) {