// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.7

main() {
  var c = new Class();
  c.method1a(null);
  c.method1b(null);
  c.method2a(null);
  c.method2b(null);
  c.method3a(null);
  c.method3b(null);
  c.method4a(null);
  c.method4b(null);
  c.method5a(null);
  c.method5b(null);
  c.method6a(null);
  c.method6b(null);
}

// Checks are needed both with and without --omit-implicit-checks.
/*spec:nnbd-off|prod:nnbd-off.class: Class1a:explicit=[Class1a]*/
/*spec:nnbd-sdk|prod:nnbd-sdk.class: Class1a:explicit=[Class1a*]*/
class Class1a {}

// Checks are needed neither with nor without --omit-implicit-checks.
/*class: Class1b:*/
class Class1b {}

// Checks are needed both with and without --omit-implicit-checks.
/*spec:nnbd-off|prod:nnbd-off.class: Class2a:explicit=[Class2a]*/
/*spec:nnbd-sdk|prod:nnbd-sdk.class: Class2a:explicit=[Class2a*]*/
class Class2a {}

// Checks are needed neither with nor without --omit-implicit-checks.
/*class: Class2b:*/
class Class2b {}

// Checks are needed both with and without --omit-implicit-checks.
/*spec:nnbd-off|prod:nnbd-off.class: Class3a:explicit=[Class3a]*/
/*spec:nnbd-sdk|prod:nnbd-sdk.class: Class3a:explicit=[Class3a*]*/
class Class3a {}

// Checks are needed neither with nor without --omit-implicit-checks.
/*class: Class3b:*/
class Class3b {}

// Checks are needed both with and without --omit-implicit-checks.
/*spec:nnbd-off|prod:nnbd-off.class: Class4a:explicit=[Class4a<int>],needsArgs*/
/*spec:nnbd-sdk|prod:nnbd-sdk.class: Class4a:explicit=[Class4a<int*>*],needsArgs*/
class Class4a<T> {}

// Checks are needed neither with nor without --omit-implicit-checks.
/*class: Class4b:*/
class Class4b<T> {}

// Checks are needed both with and without --omit-implicit-checks.
/*spec:nnbd-off|prod:nnbd-off.class: Class5a:explicit=[Class5a<int>],needsArgs*/
/*spec:nnbd-sdk|prod:nnbd-sdk.class: Class5a:explicit=[Class5a<int*>*],needsArgs*/
class Class5a<T> {}

// Checks are needed neither with nor without --omit-implicit-checks.
/*class: Class5b:*/
class Class5b<T> {}

// Checks are needed both with and without --omit-implicit-checks.
/*spec:nnbd-off|prod:nnbd-off.class: Class6a:explicit=[Class6a<int>],needsArgs*/
/*spec:nnbd-sdk|prod:nnbd-sdk.class: Class6a:explicit=[Class6a<int*>*],needsArgs*/
class Class6a<T> {}

// Checks are needed neither with nor without --omit-implicit-checks.
/*class: Class6b:*/
class Class6b<T> {}

class Class {
  @pragma('dart2js:parameter:check')
  method1a(Class1a c) {}

  @pragma('dart2js:parameter:trust')
  method1b(Class1b c) {}

  @pragma('dart2js:downcast:check')
  Class2a method2a(o) => o;

  @pragma('dart2js:downcast:trust')
  Class2b method2b(o) => o;

  @pragma('dart2js:as:check')
  method3a(o) => o as Class3a;

  @pragma('dart2js:as:trust')
  method3b(o) => o as Class3b;

  @pragma('dart2js:parameter:check')
  method4a(Class4a<int> c) {}

  @pragma('dart2js:parameter:trust')
  method4b(Class4b<int> c) {}

  @pragma('dart2js:downcast:check')
  Class5a<int> method5a(o) => o;

  @pragma('dart2js:downcast:trust')
  Class5b<int> method5b(o) => o;

  @pragma('dart2js:as:check')
  method6a(o) => o as Class6a<int>;

  @pragma('dart2js:as:trust')
  method6b(o) => o as Class6b<int>;
}
