| // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| // Tests static errors for JS interop members without an external keyword. | |
| @JS() | |
| library external_member_static_test; | |
| import 'package:js/js.dart'; | |
| @JS() | |
| class JSClass { | |
| int? field; | |
| @JS() | |
| int? fieldWithJS; | |
| static int? staticField; | |
| @JS() | |
| static int? staticFieldWithJS; | |
| JSClass.constructor(); | |
| // [error column 3] | |
| // [web] JS interop classes do not support non-external constructors. | |
| @JS() | |
| JSClass.constructorWithJS(); | |
| // [error column 3] | |
| // [web] JS interop classes do not support non-external constructors. | |
| // Dart factories of a JS interop class are allowed. | |
| factory JSClass.fact() => JSClass.constructor(); | |
| factory JSClass.redirectingFactory() = JSClass.constructor; | |
| external factory JSClass.externalFactory(); | |
| @JS() | |
| factory JSClass.factoryWithJS() => JSClass.fact(); | |
| int get getSet => 0; | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| @JS() | |
| int get getSetWithJS => 0; | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| set getSet(int val) {} | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| @JS() | |
| set getSetWithJS(int val) {} | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| int method() => 0; | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| @JS() | |
| int methodWithJS() => 0; | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| // Static methods on JS interop classes are allowed. | |
| static int staticMethod() => 0; | |
| @JS() | |
| static int staticMethodWithJS() => 0; | |
| } | |
| @JS() | |
| @anonymous | |
| class JSAnonymousClass { | |
| int? field; | |
| @JS() | |
| int? fieldWithJS; | |
| static int? staticField; | |
| @JS() | |
| static int? staticFieldWithJS; | |
| JSAnonymousClass.constructor(); | |
| // [error column 3] | |
| // [web] JS interop classes do not support non-external constructors. | |
| @JS() | |
| JSAnonymousClass.constructorWithJS(); | |
| // [error column 3] | |
| // [web] JS interop classes do not support non-external constructors. | |
| factory JSAnonymousClass.fact() => JSAnonymousClass.constructor(); | |
| factory JSAnonymousClass.redirectingFactory() = JSAnonymousClass.fact; | |
| external factory JSAnonymousClass.externalFactory(); | |
| @JS() | |
| factory JSAnonymousClass.factoryWithJS() => JSAnonymousClass.fact(); | |
| int get getSet => 0; | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| @JS() | |
| int get getSetWithJS => 0; | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| set getSet(int val) {} | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| @JS() | |
| set getSetWithJS(int val) {} | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| int method() => 0; | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| @JS() | |
| int methodWithJS() => 0; | |
| // ^ | |
| // [web] This JS interop member must be annotated with `external`. Only factories and static methods can be non-external. | |
| static int staticMethod() => 0; | |
| @JS() | |
| static int staticMethodWithJS() => 0; | |
| } | |
| @JS() | |
| abstract class JSAbstractClass { | |
| int? field; | |
| @JS() | |
| int? fieldWithJS; | |
| static int? staticField; | |
| @JS() | |
| static int? staticFieldWithJS; | |
| JSAbstractClass.constructor(); | |
| // [error column 3] | |
| // [web] JS interop classes do not support non-external constructors. | |
| @JS() | |
| JSAbstractClass.constructorWithJS(); | |
| // [error column 3] | |
| // [web] JS interop classes do not support non-external constructors. | |
| factory JSAbstractClass.fact() => JSAbstractClass.factoryWithJS(); | |
| factory JSAbstractClass.redirectingFactory() = JSAbstractClass.fact; | |
| external factory JSAbstractClass.externalFactory(); | |
| @JS() | |
| factory JSAbstractClass.factoryWithJS() => JSAbstractClass.fact(); | |
| // Members in an abstract class are allowed. | |
| int get getSet; | |
| @JS() | |
| int get getSetWithJS; | |
| set getSet(int val); | |
| @JS() | |
| set getSetWithJS(int val); | |
| int method(); | |
| @JS() | |
| int methodWithJS(); | |
| static int staticMethod() => 0; | |
| @JS() | |
| static int staticMethodWithJS() => 0; | |
| } | |
| @JS() | |
| class JSClassWithSyntheticConstructor {} | |
| @JS() | |
| int? globalWithJS; | |
| @JS() | |
| int get getSetWithJS => 0; | |
| @JS() | |
| set getSetWithJS(int val) {} | |
| @JS() | |
| int methodWithJS() => 0; | |
| external int get getSet; | |
| external set getSet(int val); | |
| external int method(); | |
| main() {} |