| // Copyright (c) 2020, 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. |
| |
| class ComponentFactory<T> { |
| @pragma('dart2js:noInline') |
| Type get componentType => T; |
| } |
| |
| var mm = {'String': String, 'int': int}; |
| var gf1 = ComponentFactory<int>(); |
| var gf2 = ComponentFactory<dynamic>(); |
| Map<String, ComponentFactory> mf = {'RegExp': ComponentFactory<RegExp>()}; |
| |
| ComponentFactory test(String s, [Map<String, ComponentFactory> mf2]) { |
| var f = mf[s]; |
| if (f == null) { |
| var t = mm[s]; |
| if (mf2 != null) f = mf2[s]; |
| if (t != null && t != f?.componentType) { |
| print('not match $t'); |
| f = gf2; |
| } |
| } |
| return f; |
| } |
| |
| main() { |
| Map<String, ComponentFactory> mf2 = {'int': ComponentFactory<num>()}; |
| |
| test('String'); |
| test('String', mf2); |
| test('int'); |
| test('int', mf2); |
| test('RegExp'); |
| test('RegExp', mf2); |
| } |