import 'dart:_js_helper';

var topLevelField;
get topLevelGetter => null;
set topLevelSetter(_) {}
topLevelFunction() {}
external get externalTopLevelGetter;
external set externalTopLevelSetter(_);
external externalTopLevelFunction();
get nativeTopLevelGetter native;
set nativeTopLevelSetter(_) native;
nativeTopLevelFunction() native;

class Class {
  Class.generative();
  factory Class.fact() => null as dynamic;
  external Class.externalGenerative();
  external factory Class.externalFact();
  Class.nativeGenerative() native;
  factory Class.nativeFact() native;
  var instanceField;
  get instanceGetter => null;
  set instanceSetter(_) {}
  instanceMethod() {}
  static var staticField;
  static get staticGetter => null;
  static set staticSetter(_) {}
  static staticMethod() {}
  external get externalInstanceGetter;
  external set externalInstanceSetter(_);
  external externalInstanceMethod();
  external static get externalStaticGetter;
  external static set externalStaticSetter(_);
  external static externalStaticMethod();
  get nativeInstanceGetter native;
  set nativeInstanceSetter(_) native;
  nativeInstanceMethod() native;
  static get nativeStaticGetter native;
  static set nativeStaticSetter(_) native;
  static nativeStaticMethod() native;
}

@Native('d')
class NativeClass {
  NativeClass.generative();
  factory NativeClass.fact() => null as dynamic;
  external NativeClass.externalGenerative();
  external factory NativeClass.externalFact();
  NativeClass.nativeGenerative() native;
  factory NativeClass.nativeFact() native;
  var instanceField;
  get instanceGetter => null;
  set instanceSetter(_) {}
  instanceMethod() {}
  static var staticField;
  static get staticGetter => null;
  static set staticSetter(_) {}
  static staticMethod() {}
  var instanceNamedField;
  external get externalInstanceGetter;
  external set externalInstanceSetter(_);
  external externalInstanceMethod();
  external static get externalStaticGetter;
  external static set externalStaticSetter(_);
  external static externalStaticMethod();
  get nativeInstanceGetter native;
  set nativeInstanceSetter(_) native;
  nativeInstanceMethod() native;
  static get nativeStaticGetter native;
  static set nativeStaticSetter(_) native;
  static nativeStaticMethod() native;
}

main() {}
