// Copyright (c) 2013, 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.

// Test that final fields in @MirrorsUsed are still inferred.

import 'package:expect/expect.dart';
import "package:async_helper/async_helper.dart";
import 'package:compiler/src/commandline_options.dart';
import '../memory_compiler.dart' show runCompiler;
import '../compiler_helper.dart' show findElement;
import '../inference/type_mask_test_helper.dart';

const MEMORY_SOURCE_FILES = const <String, String>{
  'main.dart': """
import 'dart:mirrors';

const field = 42;

main() {
  var mirror = reflect(field);
  mirror.invoke(null, null);
}
"""
};

void main() {
  asyncTest(() async {
    var result = await runCompiler(
        memorySourceFiles: MEMORY_SOURCE_FILES,
        options: [Flags.useOldFrontend]);
    var compiler = result.compiler;
    var element = findElement(compiler, 'field');
    var typesInferrer = compiler.globalInference.typesInferrerInternal;
    var closedWorld = typesInferrer.closedWorld;
    var commonMasks = closedWorld.commonMasks;
    Expect.equals(commonMasks.uint31Type,
        simplify(typesInferrer.getTypeOfMember(element), closedWorld), 'field');
  });
}
