//
// Problems outside component:
//
// pkg/front_end/testcases/dart2js/native_legacy.dart: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
import "dart:_js_helper" as _js;

import "dart:_js_helper";

class Class extends core::Object {
  field dynamic instanceField;
  static field dynamic staticField = null;
  constructor generative() → self::Class
    : self::Class::instanceField = null, super core::Object::•()
    ;
  external constructor externalGenerative() → self::Class;
  @#C2
  external constructor nativeGenerative() → self::Class;
  static method _#generative#tearOff() → self::Class
    return new self::Class::generative();
  static factory fact() → self::Class
    return (null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
  static method _#fact#tearOff() → self::Class
    return self::Class::fact();
  static method _#externalGenerative#tearOff() → self::Class
    return new self::Class::externalGenerative();
  external static factory externalFact() → self::Class;
  static method _#externalFact#tearOff() → self::Class
    return self::Class::externalFact();
  static method _#nativeGenerative#tearOff() → self::Class
    return new self::Class::nativeGenerative();
  @#C2
  external static factory nativeFact() → self::Class;
  static method _#nativeFact#tearOff() → self::Class
    return self::Class::nativeFact();
  get instanceGetter() → dynamic
    return null;
  set instanceSetter(dynamic _) → void {}
  method instanceMethod() → dynamic {}
  static get staticGetter() → dynamic
    return null;
  static set staticSetter(dynamic _) → void {}
  static method staticMethod() → dynamic {}
  external get externalInstanceGetter() → dynamic;
  external set externalInstanceSetter(dynamic _) → void;
  external method externalInstanceMethod() → dynamic;
  external static get externalStaticGetter() → dynamic;
  external static set externalStaticSetter(dynamic _) → void;
  external static method externalStaticMethod() → dynamic;
  @#C2
  external get nativeInstanceGetter() → dynamic;
  @#C2
  external set nativeInstanceSetter(dynamic _) → void;
  @#C2
  external method nativeInstanceMethod() → dynamic;
  @#C2
  external static get nativeStaticGetter() → dynamic;
  @#C2
  external static set nativeStaticSetter(dynamic _) → void;
  @#C2
  external static method nativeStaticMethod() → dynamic;
}
@#C4
class NativeClass extends core::Object {
  field dynamic instanceField;
  static field dynamic staticField = null;
  field dynamic instanceNamedField;
  constructor generative() → self::NativeClass
    : self::NativeClass::instanceNamedField = null, self::NativeClass::instanceField = null, super core::Object::•()
    ;
  external constructor externalGenerative() → self::NativeClass;
  @#C2
  external constructor nativeGenerative() → self::NativeClass;
  static method _#generative#tearOff() → self::NativeClass
    return new self::NativeClass::generative();
  static factory fact() → self::NativeClass
    return (null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} self::NativeClass;
  static method _#fact#tearOff() → self::NativeClass
    return self::NativeClass::fact();
  static method _#externalGenerative#tearOff() → self::NativeClass
    return new self::NativeClass::externalGenerative();
  external static factory externalFact() → self::NativeClass;
  static method _#externalFact#tearOff() → self::NativeClass
    return self::NativeClass::externalFact();
  static method _#nativeGenerative#tearOff() → self::NativeClass
    return new self::NativeClass::nativeGenerative();
  @#C2
  external static factory nativeFact() → self::NativeClass;
  static method _#nativeFact#tearOff() → self::NativeClass
    return self::NativeClass::nativeFact();
  get instanceGetter() → dynamic
    return null;
  set instanceSetter(dynamic _) → void {}
  method instanceMethod() → dynamic {}
  static get staticGetter() → dynamic
    return null;
  static set staticSetter(dynamic _) → void {}
  static method staticMethod() → dynamic {}
  external get externalInstanceGetter() → dynamic;
  external set externalInstanceSetter(dynamic _) → void;
  external method externalInstanceMethod() → dynamic;
  external static get externalStaticGetter() → dynamic;
  external static set externalStaticSetter(dynamic _) → void;
  external static method externalStaticMethod() → dynamic;
  @#C2
  external get nativeInstanceGetter() → dynamic;
  @#C2
  external set nativeInstanceSetter(dynamic _) → void;
  @#C2
  external method nativeInstanceMethod() → dynamic;
  @#C2
  external static get nativeStaticGetter() → dynamic;
  @#C2
  external static set nativeStaticSetter(dynamic _) → void;
  @#C2
  external static method nativeStaticMethod() → dynamic;
}
static field dynamic topLevelField;
static get topLevelGetter() → dynamic
  return null;
static set topLevelSetter(dynamic _) → void {}
static method topLevelFunction() → dynamic {}
external static get externalTopLevelGetter() → dynamic;
external static set externalTopLevelSetter(dynamic _) → void;
external static method externalTopLevelFunction() → dynamic;
@#C2
external static get nativeTopLevelGetter() → dynamic;
@#C2
external static set nativeTopLevelSetter(dynamic _) → void;
@#C2
external static method nativeTopLevelFunction() → dynamic;
static method main() → dynamic {
  if(true)
    return;
  self::topLevelField;
  self::topLevelGetter;
  self::topLevelSetter = null;
  self::topLevelFunction();
  self::externalTopLevelGetter;
  self::externalTopLevelSetter = null;
  self::externalTopLevelFunction();
  self::nativeTopLevelGetter;
  self::nativeTopLevelSetter = null;
  self::nativeTopLevelFunction();
  self::Class c1 = new self::Class::generative();
  self::Class::fact();
  new self::Class::externalGenerative();
  self::Class::externalFact();
  new self::Class::nativeGenerative();
  self::Class::nativeFact();
  c1.{self::Class::instanceField}{dynamic};
  c1.{self::Class::instanceGetter}{dynamic};
  c1.{self::Class::instanceSetter} = null;
  c1.{self::Class::instanceMethod}(){() → dynamic};
  self::Class::staticField;
  self::Class::staticGetter;
  self::Class::staticSetter = null;
  self::Class::staticMethod();
  c1.{self::Class::externalInstanceGetter}{dynamic};
  c1.{self::Class::externalInstanceSetter} = null;
  c1.{self::Class::externalInstanceMethod}(){() → dynamic};
  self::Class::externalStaticGetter;
  self::Class::externalStaticSetter = null;
  self::Class::externalStaticMethod();
  c1.{self::Class::nativeInstanceGetter}{dynamic};
  c1.{self::Class::nativeInstanceSetter} = null;
  c1.{self::Class::nativeInstanceMethod}(){() → dynamic};
  self::Class::nativeStaticGetter;
  self::Class::nativeStaticSetter = null;
  self::Class::nativeStaticMethod();
  self::NativeClass c2 = new self::NativeClass::generative();
  self::NativeClass::fact();
  new self::NativeClass::externalGenerative();
  self::NativeClass::externalFact();
  new self::NativeClass::nativeGenerative();
  self::NativeClass::nativeFact();
  c2.{self::NativeClass::instanceField}{dynamic};
  c2.{self::NativeClass::instanceGetter}{dynamic};
  c2.{self::NativeClass::instanceSetter} = null;
  c2.{self::NativeClass::instanceMethod}(){() → dynamic};
  self::NativeClass::staticField;
  self::NativeClass::staticGetter;
  self::NativeClass::staticSetter = null;
  self::NativeClass::staticMethod();
  c2.{self::NativeClass::externalInstanceGetter}{dynamic};
  c2.{self::NativeClass::externalInstanceSetter} = null;
  c2.{self::NativeClass::externalInstanceMethod}(){() → dynamic};
  self::NativeClass::externalStaticGetter;
  self::NativeClass::externalStaticSetter = null;
  self::NativeClass::externalStaticMethod();
  c2.{self::NativeClass::nativeInstanceGetter}{dynamic};
  c2.{self::NativeClass::nativeInstanceSetter} = null;
  c2.{self::NativeClass::nativeInstanceMethod}(){() → dynamic};
  self::NativeClass::nativeStaticGetter;
  self::NativeClass::nativeStaticSetter = null;
  self::NativeClass::nativeStaticMethod();
}

constants  {
  #C1 = ""
  #C2 = _in::ExternalName {name:#C1}
  #C3 = "d"
  #C4 = _js::Native {name:#C3}
}

Extra constant evaluation status:
Evaluated: AsExpression @ org-dartlang-testcase:///native_legacy.dart:35:32 -> NullConstant(null)
Evaluated: AsExpression @ org-dartlang-testcase:///native_legacy.dart:95:38 -> NullConstant(null)
Extra constant evaluation: evaluated: 96, effectively constant: 2


Constructor coverage from constants:
org-dartlang-testcase:///native_legacy.dart:
- ExternalName. (from org-dartlang-sdk:///lib/internal/internal.dart)
- Object. (from org-dartlang-sdk:///lib/core/object.dart)
- Native. (from org-dartlang-sdk:///lib/_internal/js_runtime/lib/annotations.dart)
