// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

part of ui;

// ignore_for_file: avoid_classes_with_only_static_members

/// Helper functions for Dart Plugin Registrants.
class DartPluginRegistrant {
  /// Makes sure the that the Dart Plugin Registrant has been called for this
  /// isolate. This can safely be executed multiple times on the same isolate,
  /// but should not be called on the Root isolate.
  static void ensureInitialized() {
    throw UnimplementedError('`ensureInitialized` is not implemented on the web.');
  }
}


List<int> saveCompilationTrace() {
  if (engine.assertionsEnabled) {
    throw UnimplementedError('saveCompilationTrace is not implemented on the web.');
  }
  throw UnimplementedError();
}
