KT-2752: prohibit JSName on extension properties
This commit is contained in:
-3
@@ -19,6 +19,3 @@ class A {
|
||||
@JsName("mm_") var mm: Int
|
||||
<!JS_NAME_ON_ACCESSOR_AND_PROPERTY!>@JsName("get_mm")<!> get() = 23
|
||||
<!JS_NAME_ON_ACCESSOR_AND_PROPERTY!>@JsName("set_mm")<!> set(value) {}
|
||||
|
||||
@JsName("ext_") val A.ext: Int
|
||||
<!JS_NAME_ON_ACCESSOR_AND_PROPERTY!>@JsName("get_ext")<!> get() = 23
|
||||
-1
@@ -4,7 +4,6 @@ package foo {
|
||||
@kotlin.js.JsName(name = "mm_") public var mm: kotlin.Int
|
||||
@kotlin.js.JsName(name = "xx_") public val xx: kotlin.Int
|
||||
@kotlin.js.JsName(name = "yy_") public val yy: kotlin.Int = 0
|
||||
@kotlin.js.JsName(name = "ext_") public val foo.A.ext: kotlin.Int
|
||||
|
||||
public final class A {
|
||||
public constructor A()
|
||||
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
package foo
|
||||
|
||||
class A
|
||||
|
||||
<!JS_NAME_PROHIBITED_FOR_EXTENSION_PROPERTY!>@JsName("xx")<!> val A.x: Int
|
||||
get() = 23
|
||||
|
||||
<!JS_NAME_PROHIBITED_FOR_EXTENSION_PROPERTY!>@property:JsName("yy")<!> val A.y: Int
|
||||
get() = 42
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
package
|
||||
|
||||
package foo {
|
||||
@kotlin.js.JsName(name = "xx") public val foo.A.x: kotlin.Int
|
||||
@property:kotlin.js.JsName(name = "yy") public val foo.A.y: kotlin.Int
|
||||
|
||||
public final class A {
|
||||
public constructor A()
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
@@ -361,6 +361,12 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("jsNameProhibitedOnExtensionProperty.kt")
|
||||
public void testJsNameProhibitedOnExtensionProperty() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameProhibitedOnExtensionProperty.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("jsNameUseTargetOnProperty.kt")
|
||||
public void testJsNameUseTargetOnProperty() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameUseTargetOnProperty.kt");
|
||||
|
||||
+1
@@ -45,6 +45,7 @@ private val DIAGNOSTIC_FACTORY_TO_RENDERER by lazy {
|
||||
put(ErrorsJs.JS_NAME_ON_ACCESSOR_AND_PROPERTY, "@JsName can be either on a property or its accessors, not both of them")
|
||||
put(ErrorsJs.JS_NAME_IS_NOT_ON_ALL_ACCESSORS, "@JsName should be on all of the property accessors")
|
||||
put(ErrorsJs.JS_NAME_PROHIBITED_FOR_OVERRIDE, "@JsName is prohibited for overridden members")
|
||||
put(ErrorsJs.JS_NAME_PROHIBITED_FOR_EXTENSION_PROPERTY, "@JsName is prohibited for extension properties")
|
||||
|
||||
this
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ public interface ErrorsJs {
|
||||
DiagnosticFactory0<KtElement> JS_NAME_ON_ACCESSOR_AND_PROPERTY = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> JS_NAME_IS_NOT_ON_ALL_ACCESSORS = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> JS_NAME_PROHIBITED_FOR_OVERRIDE = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> JS_NAME_PROHIBITED_FOR_EXTENSION_PROPERTY = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
Object _initializer = new Object() {
|
||||
|
||||
@@ -21,6 +21,8 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||
import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DeclarationChecker
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||
import org.jetbrains.kotlin.resolve.SimpleDeclarationChecker
|
||||
|
||||
object JsNameChecker : SimpleDeclarationChecker {
|
||||
@@ -51,6 +53,11 @@ object JsNameChecker : SimpleDeclarationChecker {
|
||||
diagnosticHolder.report(ErrorsJs.JS_NAME_ON_ACCESSOR_AND_PROPERTY.on(jsNamePsi))
|
||||
}
|
||||
}
|
||||
is PropertyDescriptor -> {
|
||||
if (descriptor.isExtension) {
|
||||
diagnosticHolder.report(ErrorsJs.JS_NAME_PROHIBITED_FOR_EXTENSION_PROPERTY.on(jsNamePsi))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user