From 68828317b87921c8121cd754974dc45e964ec099 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 12 Feb 2016 18:28:52 +0300 Subject: [PATCH] [KT-4124] Suppress error reporting about native local classes --- .../resolve/diagnostics/LocalClassChecker.kt | 3 ++- .../callTranslator/FunctionCallCases.kt | 5 ++--- .../callTranslator/VariableCallCases.kt | 2 +- .../ClassInitializerTranslator.java | 5 +++-- .../reference/CallArgumentTranslator.kt | 22 +++++-------------- 5 files changed, 14 insertions(+), 23 deletions(-) diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/LocalClassChecker.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/LocalClassChecker.kt index ac585cf0a90..533eee5897c 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/LocalClassChecker.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/LocalClassChecker.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.diagnostics.rendering.renderKind +import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DeclarationChecker @@ -32,7 +33,7 @@ class LocalClassChecker : DeclarationChecker { if (descriptor !is ClassDescriptor || declaration !is KtNamedDeclaration) { return; } - if (isAnonymousObject(descriptor) || isObject(descriptor)) { + if (isAnonymousObject(descriptor) || isObject(descriptor) || AnnotationsUtils.isNativeObject(descriptor)) { return } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt index 0127b6ff660..fa707b5c007 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt @@ -222,7 +222,7 @@ object ConstructorCallCase : FunctionCallCase() { val functionRef = context.aliasOrValue(callableDescriptor) { fqName } val constructorDescriptor = callableDescriptor as ConstructorDescriptor - val receiver = this.superCallReceiver + val receiver = superCallReceiver var allArguments = when (receiver) { null -> argumentsInfo.translateArguments else -> (sequenceOf(receiver) + argumentsInfo.translateArguments).toList() @@ -246,8 +246,7 @@ object SuperCallCase : FunctionCallCase() { // TODO: spread operator val prototypeClass = JsNameRef(Namer.getPrototypeName(), dispatchReceiver!!) val functionRef = Namer.getFunctionCallRef(JsNameRef(functionName, prototypeClass)) - val superReceiver = this.superCallReceiver - val receiver = if (superReceiver != null) superReceiver else JsLiteral.THIS; + val receiver = superCallReceiver ?: JsLiteral.THIS; return JsInvocation(functionRef, argumentsInfo.argsWithReceiver(receiver)) } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/VariableCallCases.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/VariableCallCases.kt index 1f67bde0035..6e218c5402f 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/VariableCallCases.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/VariableCallCases.kt @@ -110,7 +110,7 @@ object DelegatePropertyAccessIntrinsic : DelegateIntrinsic { object SuperPropertyAccessCase : VariableAccessCase() { override fun VariableAccessInfo.dispatchReceiver(): JsExpression { val variableName = context.program().getStringLiteral(this.variableName.ident) - val jsReceiver = this.superCallReceiver + val jsReceiver = superCallReceiver var propertyOwner = when (jsReceiver) { null -> JsLiteral.THIS else -> jsReceiver diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java index 2d9ed12a71d..9a031ec3c40 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.js.translate.declaration.DelegationTranslator; import org.jetbrains.kotlin.js.translate.general.AbstractTranslator; import org.jetbrains.kotlin.js.translate.reference.CallArgumentTranslator; +import org.jetbrains.kotlin.js.translate.utils.JsAstUtils; import org.jetbrains.kotlin.js.translate.utils.jsAstUtils.AstUtilsKt; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.psi.*; @@ -127,8 +128,8 @@ public final class ClassInitializerTranslator extends AbstractTranslator { initFunction.getParameters().add(0, new JsParameter(outerName)); JsExpression target = new JsNameRef(outerName, JsLiteral.THIS); - JsExpression paramRef = new JsNameRef(outerName); - JsExpression assignment = new JsBinaryOperation(JsBinaryOperator.ASG, target, paramRef); + JsExpression paramRef = outerName.makeRef(); + JsExpression assignment = JsAstUtils.assignment(target, paramRef); initFunction.getBody().getStatements().add(new JsExpressionStatement(assignment)); } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt index 53639da2edb..1e0dfb835f6 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt @@ -18,24 +18,19 @@ package org.jetbrains.kotlin.js.translate.reference import com.google.dart.compiler.backend.js.ast.* import com.intellij.util.SmartList -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.js.descriptorUtils.nameIfStandardType import org.jetbrains.kotlin.js.translate.context.TemporaryConstVariable -import org.jetbrains.kotlin.js.translate.context.TemporaryVariable import org.jetbrains.kotlin.js.translate.context.TranslationContext import org.jetbrains.kotlin.js.translate.expression.PatternTranslator import org.jetbrains.kotlin.js.translate.general.AbstractTranslator import org.jetbrains.kotlin.js.translate.general.Translation -import org.jetbrains.kotlin.js.translate.utils.* -import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils +import org.jetbrains.kotlin.js.translate.utils.JsAstUtils +import org.jetbrains.kotlin.js.translate.utils.TranslationUtils import org.jetbrains.kotlin.psi.ValueArgument import org.jetbrains.kotlin.resolve.calls.model.* import org.jetbrains.kotlin.types.KotlinType - -import java.util.ArrayList -import java.util.Collections +import java.util.* class CallArgumentTranslator private constructor( private val resolvedCall: ResolvedCall<*>, @@ -102,13 +97,8 @@ class CallArgumentTranslator private constructor( val arguments = actualArgument.getArguments() val size = arguments.size - var i = 0 - while (i != size) { - if (arguments.get(i).getSpreadElement() != null) { - hasSpreadOperator = true - break - } - ++i + if (!hasSpreadOperator) { + hasSpreadOperator = arguments.any { it.getSpreadElement() != null } } if (hasSpreadOperator) {