library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue44654.dart:7:7: Error: A value of type 'bool?' can't be assigned to a variable of type 'bool'.
//   if (string?.isNotEmpty) ;
//       ^
//
import self as self;
import "dart:core" as core;

static method test2() → void {
  has-declared-initializer core::String? string = null;
  if(invalid-expression "pkg/front_end/testcases/general/issue44654.dart:7:7: Error: A value of type 'bool?' can't be assigned to a variable of type 'bool'.
  if (string?.isNotEmpty) ;
      ^" in (let final core::String? #t1 = string in #t1 == null ?{core::bool?} null : #t1{core::String}.{core::String::isNotEmpty}{core::bool}) as{TypeError} core::bool)
    ;
}
static method main() → void {
  try {
    self::test2();
  }
  on core::Object catch(final core::Object e, final core::StackTrace s) {
    self::checkFirstLineHasPosition(s);
  }
}
static method checkFirstLineHasPosition(core::StackTrace stackTrace) → void {
  core::String firstLine = "${stackTrace}".{core::String::split}("
"){(core::Pattern) → core::List<core::String>}.{core::Iterable::firstWhere}((core::String line) → core::bool => line.{core::String::startsWith}("#0"){(core::Pattern, [core::int]) → core::bool}){((core::String) → core::bool, {orElse: () →? core::String}) → core::String};
  core::int lastParen = firstLine.{core::String::lastIndexOf}(")"){(core::Pattern, [core::int?]) → core::int};
  if(!(lastParen =={core::num::==}{(core::Object) → core::bool} 1.{core::int::unary-}(){() → core::int})) {
    core::int secondColon = firstLine.{core::String::lastIndexOf}(":", lastParen.{core::num::-}(1){(core::num) → core::int}){(core::Pattern, [core::int?]) → core::int};
    if(!(secondColon =={core::num::==}{(core::Object) → core::bool} 1.{core::int::unary-}(){() → core::int})) {
      core::int firstColon = firstLine.{core::String::lastIndexOf}(":", secondColon.{core::num::-}(1){(core::num) → core::int}){(core::Pattern, [core::int?]) → core::int};
      core::String lineText = firstLine.{core::String::substring}(firstColon.{core::num::+}(1){(core::num) → core::int}, secondColon){(core::int, [core::int?]) → core::String};
      core::String posText = firstLine.{core::String::substring}(secondColon.{core::num::+}(1){(core::num) → core::int}, lastParen){(core::int, [core::int?]) → core::String};
      core::int? line = core::int::tryParse(lineText);
      core::int? pos = core::int::tryParse(posText);
      if(!(line == null) && !(pos == null)) {
        core::print("Found position ${line{core::int}}:${pos{core::int}}");
        return;
      }
    }
  }
  throw "No position found in \"${firstLine}\"";
}
