//
// Problems outside component:
//
// pkg/front_end/testcases/dart2js/native.dart:38:12: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external Class.externalGenerative();
//            ^
//
// pkg/front_end/testcases/dart2js/native.dart:44:3: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   Class.nativeGenerative() native;
//   ^
//
// pkg/front_end/testcases/dart2js/native.dart:41:20: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external factory Class.externalFact();
//                    ^
//
// pkg/front_end/testcases/dart2js/native.dart:47:11: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   factory Class.nativeFact() native;
//           ^
//
// pkg/front_end/testcases/dart2js/native.dart:60:16: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external get externalInstanceGetter;
//                ^
//
// pkg/front_end/testcases/dart2js/native.dart:63:16: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external set externalInstanceSetter(_);
//                ^
//
// pkg/front_end/testcases/dart2js/native.dart:66:12: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external externalInstanceMethod();
//            ^
//
// pkg/front_end/testcases/dart2js/native.dart:69:23: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external static get externalStaticGetter;
//                       ^
//
// pkg/front_end/testcases/dart2js/native.dart:72:23: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external static set externalStaticSetter(_);
//                       ^
//
// pkg/front_end/testcases/dart2js/native.dart:75:19: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external static externalStaticMethod();
//                   ^
//
// pkg/front_end/testcases/dart2js/native.dart:77:7: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   get nativeInstanceGetter native;
//       ^
//
// pkg/front_end/testcases/dart2js/native.dart:78:7: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   set nativeInstanceSetter(_) native;
//       ^
//
// pkg/front_end/testcases/dart2js/native.dart:79:3: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   nativeInstanceMethod() native;
//   ^
//
// pkg/front_end/testcases/dart2js/native.dart:82:14: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   static get nativeStaticGetter native;
//              ^
//
// pkg/front_end/testcases/dart2js/native.dart:85:14: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   static set nativeStaticSetter(_) native;
//              ^
//
// pkg/front_end/testcases/dart2js/native.dart:88:10: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   static nativeStaticMethod() native;
//          ^
//
// pkg/front_end/testcases/dart2js/native.dart:98:12: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external NativeClass.externalGenerative();
//            ^
//
// pkg/front_end/testcases/dart2js/native.dart:102:3: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   NativeClass.nativeGenerative() native;
//   ^
//
// pkg/front_end/testcases/dart2js/native.dart:100:20: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external factory NativeClass.externalFact();
//                    ^
//
// pkg/front_end/testcases/dart2js/native.dart:103:11: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   factory NativeClass.nativeFact() native;
//           ^
//
// pkg/front_end/testcases/dart2js/native.dart:118:16: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external get externalInstanceGetter;
//                ^
//
// pkg/front_end/testcases/dart2js/native.dart:121:16: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external set externalInstanceSetter(_);
//                ^
//
// pkg/front_end/testcases/dart2js/native.dart:124:12: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external externalInstanceMethod();
//            ^
//
// pkg/front_end/testcases/dart2js/native.dart:127:23: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external static get externalStaticGetter;
//                       ^
//
// pkg/front_end/testcases/dart2js/native.dart:130:23: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external static set externalStaticSetter(_);
//                       ^
//
// pkg/front_end/testcases/dart2js/native.dart:133:19: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   external static externalStaticMethod();
//                   ^
//
// pkg/front_end/testcases/dart2js/native.dart:135:7: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   get nativeInstanceGetter native;
//       ^
//
// pkg/front_end/testcases/dart2js/native.dart:136:7: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   set nativeInstanceSetter(_) native;
//       ^
//
// pkg/front_end/testcases/dart2js/native.dart:137:3: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   nativeInstanceMethod() native;
//   ^
//
// pkg/front_end/testcases/dart2js/native.dart:139:14: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   static get nativeStaticGetter native;
//              ^
//
// pkg/front_end/testcases/dart2js/native.dart:140:14: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   static set nativeStaticSetter(_) native;
//              ^
//
// pkg/front_end/testcases/dart2js/native.dart:141:10: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//   static nativeStaticMethod() native;
//          ^
//
// pkg/front_end/testcases/dart2js/native.dart:19:14: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
// external get externalTopLevelGetter;
//              ^
//
// pkg/front_end/testcases/dart2js/native.dart:22:14: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
// external set externalTopLevelSetter(_);
//              ^
//
// pkg/front_end/testcases/dart2js/native.dart:25:10: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
// external externalTopLevelFunction();
//          ^
//
// pkg/front_end/testcases/dart2js/native.dart:27:5: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
// get nativeTopLevelGetter native;
//     ^
//
// pkg/front_end/testcases/dart2js/native.dart:29:5: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
// set nativeTopLevelSetter(_) native;
//     ^
//
// pkg/front_end/testcases/dart2js/native.dart:31:1: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
// nativeTopLevelFunction() native;
// ^
//
library;
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 dynamic) as{TypeError,ForDynamic} 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(wildcard dynamic _#wc3#formal) → void {}
  method instanceMethod() → dynamic {}
  static get staticGetter() → dynamic
    return null;
  static set staticSetter(wildcard dynamic _#wc4#formal) → void {}
  static method staticMethod() → dynamic {}
  external get externalInstanceGetter() → dynamic;
  external set externalInstanceSetter(wildcard dynamic _#wc5#formal) → void;
  external method externalInstanceMethod() → dynamic;
  external static get externalStaticGetter() → dynamic;
  external static set externalStaticSetter(wildcard dynamic _#wc6#formal) → void;
  external static method externalStaticMethod() → dynamic;
  @#C2
  external get nativeInstanceGetter() → dynamic;
  @#C2
  external set nativeInstanceSetter(wildcard dynamic _#wc7#formal) → void;
  @#C2
  external method nativeInstanceMethod() → dynamic;
  @#C2
  external static get nativeStaticGetter() → dynamic;
  @#C2
  external static set nativeStaticSetter(wildcard dynamic _#wc8#formal) → 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 dynamic) as{TypeError,ForDynamic} 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(wildcard dynamic _#wc9#formal) → void {}
  method instanceMethod() → dynamic {}
  static get staticGetter() → dynamic
    return null;
  static set staticSetter(wildcard dynamic _#wc10#formal) → void {}
  static method staticMethod() → dynamic {}
  external get externalInstanceGetter() → dynamic;
  external set externalInstanceSetter(wildcard dynamic _#wc11#formal) → void;
  external method externalInstanceMethod() → dynamic;
  external static get externalStaticGetter() → dynamic;
  external static set externalStaticSetter(wildcard dynamic _#wc12#formal) → void;
  external static method externalStaticMethod() → dynamic;
  @#C2
  external get nativeInstanceGetter() → dynamic;
  @#C2
  external set nativeInstanceSetter(wildcard dynamic _#wc13#formal) → void;
  @#C2
  external method nativeInstanceMethod() → dynamic;
  @#C2
  external static get nativeStaticGetter() → dynamic;
  @#C2
  external static set nativeStaticSetter(wildcard dynamic _#wc14#formal) → void;
  @#C2
  external static method nativeStaticMethod() → dynamic;
}
static field dynamic topLevelField;
static get topLevelGetter() → dynamic
  return null;
static set topLevelSetter(wildcard dynamic _#wc0#formal) → void {}
static method topLevelFunction() → dynamic {}
external static get externalTopLevelGetter() → dynamic;
external static set externalTopLevelSetter(wildcard dynamic _#wc1#formal) → void;
external static method externalTopLevelFunction() → dynamic;
@#C2
external static get nativeTopLevelGetter() → dynamic;
@#C2
external static set nativeTopLevelSetter(wildcard dynamic _#wc2#formal) → 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.dart:35:32 -> NullConstant(null)
Evaluated: AsExpression @ org-dartlang-testcase:///native.dart:95:38 -> NullConstant(null)
Extra constant evaluation: evaluated: 96, effectively constant: 2


Constructor coverage from constants:
org-dartlang-testcase:///native.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)
