// 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() {
  method1a(null);
  method1b(null);
  method2a(null);
  method2b(null);
  method3a(null);
  method3b(null);
  method4a(null);
  method4b(null);
  method5a(null);
  method5b(null);
  method6a(null);
  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> {}

@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>;
