Add entry-point annotations for test-only code. (flutter/engine#57158)

This change adds entry-point annotations to methods and classes accessed
by native code during engine tests. Currently, entry point annotations
are not checked by the Dart VM when running in JIT mode, only in AOT
mode. In order to also enforce entry point annotations in JIT mode,
first tests in Flutter must be appropriately annotated to avoid roll
failures.

Related issues:
* https://github.com/flutter/flutter/issues/118608
* https://github.com/dart-lang/sdk/issues/50649
This commit is contained in:
Tess Strickland 2024-12-13 16:22:17 +01:00 committed by GitHub
parent b821ed5a05
commit ee9024da88
2 changed files with 11 additions and 3 deletions

View File

@ -9,11 +9,15 @@ import 'package:test/test.dart';
typedef StringFunction = String Function();
typedef IntFunction = int Function();
@pragma('vm:entry-point', 'get')
String top() => 'top';
@pragma('vm:entry-point')
class Foo {
const Foo();
@pragma('vm:entry-point')
static int getInt() => 1;
@pragma('vm:entry-point')
double getDouble() => 1.0;
}
@ -23,14 +27,16 @@ void main() {
final CallbackHandle hTop = PluginUtilities.getCallbackHandle(top)!;
expect(hTop, isNot(0));
expect(PluginUtilities.getCallbackHandle(top), hTop);
final StringFunction topClosure = PluginUtilities.getCallbackFromHandle(hTop)! as StringFunction;
final StringFunction topClosure =
PluginUtilities.getCallbackFromHandle(hTop)! as StringFunction;
expect(topClosure(), 'top');
// Static method callback.
final CallbackHandle hGetInt = PluginUtilities.getCallbackHandle(Foo.getInt)!;
expect(hGetInt, isNot(0));
expect(PluginUtilities.getCallbackHandle(Foo.getInt), hGetInt);
final IntFunction getIntClosure = PluginUtilities.getCallbackFromHandle(hGetInt)! as IntFunction;
final IntFunction getIntClosure =
PluginUtilities.getCallbackFromHandle(hGetInt)! as IntFunction;
expect(getIntClosure(), 1);
// Instance method callbacks cannot be looked up.
@ -38,7 +44,8 @@ void main() {
expect(PluginUtilities.getCallbackHandle(foo.getDouble), isNull);
// Anonymous closures cannot be looked up.
final Function anon = (int a, int b) => a + b; // ignore: prefer_function_declarations_over_variables
final Function anon = // ignore: prefer_function_declarations_over_variables
(int a, int b) => a + b;
expect(PluginUtilities.getCallbackHandle(anon), isNull);
});
}

View File

@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@pragma('vm:entry-point', 'get')
void main() {}
@pragma('vm:entry-point')