library test;
import self as self;
import "dart:core" as core;
import "infer_statics_transitively_a.dart" as inf;

import "org-dartlang-testcase:///infer_statics_transitively_a.dart";

static final field dynamic m1 = inf::a1;
static final field dynamic m2 = inf::A::a2;
static method foo() → dynamic {
  core::int* i;
  i = self::m1;
}
static method main() → dynamic {}

library;
import self as inf;
import "dart:core" as core;
import "infer_statics_transitively_b.dart" as inf2;
import "infer_statics_transitively.dart" as self;

import "org-dartlang-testcase:///infer_statics_transitively.dart";
import "org-dartlang-testcase:///infer_statics_transitively_b.dart";

class A extends core::Object {
  static final field dynamic a2 = inf2::b1;
  synthetic constructor •() → inf::A*
    : super core::Object::•()
    ;
}
static final field dynamic a1 = self::m2;
static method main() → dynamic {}

library;
import self as inf2;

static final field dynamic b1 = 2;
static method main() → dynamic {
  inf2::b1;
}
