import 'dart:_js_helper';

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

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

external externalTopLevelFunction();

external get externalTopLevelGetter;

external set externalTopLevelSetter(_);

get nativeTopLevelGetter native;

get topLevelGetter => null;

main() {}

nativeTopLevelFunction() native;

set nativeTopLevelSetter(_) native;

set topLevelSetter(_) {}

topLevelFunction() {}

var topLevelField;
