library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:22:10: Warning: Operand of null-aware operation '??=' has type 'String' which excludes null.
//     super[42] ??= "bar"; // Warning.
//          ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:27:3: Warning: Operand of null-aware operation '?.' has type 'String' which excludes null.
//   s?.length; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:28:3: Warning: Operand of null-aware operation '?..' has type 'String' which excludes null.
//   s?..length; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:29:3: Warning: Operand of null-aware operation '??' has type 'String' which excludes null.
//   s ?? "foo"; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:30:3: Warning: Operand of null-aware operation '??=' has type 'String' which excludes null.
//   s ??= "foo"; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:31:8: Warning: Operand of null-aware operation '...?' has type 'List<String>' which excludes null.
//  - 'List' is from 'dart:core'.
//   [...?l]; // Warning.
//        ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:32:16: Warning: Operand of null-aware operation '...?' has type 'List<String>' which excludes null.
//  - 'List' is from 'dart:core'.
//   var a = {...?l}; // Warning.
//                ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:33:16: Warning: Operand of null-aware operation '...?' has type 'List<String>' which excludes null.
//  - 'List' is from 'dart:core'.
//   <String>{...?l}; // Warning.
//                ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:34:16: Warning: Operand of null-aware operation '...?' has type 'Map<String, int>' which excludes null.
//  - 'Map' is from 'dart:core'.
//   var b = {...?m}; // Warning.
//                ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:35:21: Warning: Operand of null-aware operation '...?' has type 'Map<String, int>' which excludes null.
//  - 'Map' is from 'dart:core'.
//   <String, int>{...?m}; // Warning.
//                     ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:36:3: Warning: Operand of null-aware operation '!' has type 'String' which excludes null.
//   s!; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:37:3: Warning: Operand of null-aware operation '?.' has type 'String' which excludes null.
//   s?.substring(0, 0); // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:38:3: Warning: Operand of null-aware operation '?.' has type 'List<String>' which excludes null.
//  - 'List' is from 'dart:core'.
//   l?.length = 42; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:39:3: Warning: Operand of null-aware operation '?.' has type 'List<String>' which excludes null.
//  - 'List' is from 'dart:core'.
//   l?.length += 42; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:40:3: Warning: Operand of null-aware operation '?.' has type 'List<String>' which excludes null.
//  - 'List' is from 'dart:core'.
//   l?.length ??= 42; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:41:3: Warning: Operand of null-aware operation '?.' has type 'String' which excludes null.
//   s?.foo; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:42:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
//   E(s)[42] ??= 42; // Warning.
//       ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:43:4: Warning: Operand of null-aware operation '??=' has type 'String' which excludes null.
//   l[42] ??= "foo"; // Warning.
//    ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:44:5: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
//   l.length ??= 42; // Warning.
//     ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:45:3: Warning: Operand of null-aware operation '?..' has type 'List<String>' which excludes null.
//  - 'List' is from 'dart:core'.
//   l?..length = 42; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:46:3: Warning: Operand of null-aware operation '?..' has type 'List<String>' which excludes null.
//  - 'List' is from 'dart:core'.
//   l?..length ??= 42; // Warning.
//   ^
//
// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:46:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
//   l?..length ??= 42; // Warning.
//       ^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  operator [](core::int index) → core::String
    return "foo";
  operator []=(core::int index, core::String value) → void {}
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
  method test() → void {
    let final core::int #t1 = 42 in super.{self::A::[]}(#t1) == null ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
  }
}
extension E on core::String {
  get foo = self::E|get#foo;
  operator []= = self::E|[]=;
  operator [] = self::E|[];
}
static method E|get#foo(lowered final core::String #this) → core::int
  return 42;
static method E|[]=(lowered final core::String #this, core::int index, core::int value) → void {}
static method E|[](lowered final core::String #this, core::int index) → core::int
  return 42;
static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
  let final core::String #t2 = s in #t2 == null ?{core::int?} null : #t2.{core::String::length}{core::int};
  let final core::String #t3 = s in #t3 == null ?{core::String} null : block {
    #t3.{core::String::length}{core::int};
  } =>#t3;
  let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
  s == null ?{core::String} s = "foo" : null;
  block {
    final core::List<core::String> #t5 = <core::String>[];
    final core::Iterable<core::String>? #t6 = l;
    if(!(#t6 == null))
      #t5.{core::List::addAll}(#t6{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
  } =>#t5;
  core::Set<core::String> a = block {
    final core::Set<core::String> #t7 = col::LinkedHashSet::•<core::String>();
    final core::Iterable<dynamic>? #t8 = l;
    if(!(#t8 == null))
      for (final dynamic #t9 in #t8{core::Iterable<dynamic>}) {
        final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
        #t7.{core::Set::add}(#t10){(core::String) → core::bool};
      }
  } =>#t7;
  block {
    final core::Set<core::String> #t11 = col::LinkedHashSet::•<core::String>();
    final core::Iterable<core::String>? #t12 = l;
    if(!(#t12 == null))
      #t11.{core::Set::addAll}(#t12{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
  } =>#t11;
  core::Map<core::String, core::int> b = block {
    final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
    final core::Map<core::String, core::int>? #t14 = m;
    if(!(#t14 == null))
      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
        #t13.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
  } =>#t13;
  block {
    final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
    final core::Map<core::String, core::int>? #t17 = m;
    if(!(#t17 == null))
      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
        #t16.{core::Map::[]=}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
  } =>#t16;
  s!;
  let final core::String #t19 = s in #t19 == null ?{core::String?} null : #t19.{core::String::substring}(0, 0){(core::int, [core::int?]) → core::String};
  let final core::List<core::String> #t20 = l in #t20 == null ?{core::int?} null : #t20.{core::List::length} = 42;
  let final core::List<core::String> #t21 = l in #t21 == null ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}{core::int}.{core::num::+}(42){(core::num) → core::int};
  let final core::List<core::String> #t22 = l in #t22 == null ?{core::int?} null : #t22.{core::List::length}{core::int} == null ?{core::int} #t22.{core::List::length} = 42 : null;
  let final core::String #t23 = s in #t23 == null ?{core::int?} null : self::E|get#foo(#t23);
  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25) == null ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27){(core::int) → core::String} == null ?{core::String} #t26.{core::List::[]=}(#t27, "foo"){(core::int, core::String) → void} : null;
  let final core::List<core::String> #t28 = l in #t28.{core::List::length}{core::int} == null ?{core::int} #t28.{core::List::length} = 42 : null;
  let final core::List<core::String> #t29 = l in #t29 == null ?{core::List<core::String>} null : block {
    #t29.{core::List::length} = 42;
  } =>#t29;
  let final core::List<core::String> #t30 = l in #t30 == null ?{core::List<core::String>} null : block {
    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}{core::int} == null ?{core::int} #t31.{core::List::length} = 42 : null;
  } =>#t30;
}
static method main() → dynamic {}
