isNativeOrEntryPoint function

bool isNativeOrEntryPoint(
  1. AnnotatedNode node
)

Checks if an AST node has native or runtime entrypoint annotations (@Native, @native, or explicit entrypoint @pragma like @pragma('vm:entry-point') or @pragma('vm:isolate-unsendable')).

Optimization and inlining pragmas (e.g. @pragma('vm:prefer-inline'), @pragma('dart2js:noInline')) are NOT treated as entrypoints.

Implementation

bool isNativeOrEntryPoint(AnnotatedNode node) {
  for (final meta in node.metadata) {
    final rawName = meta.name.name;
    final baseName = rawName.contains('.') ? rawName.split('.').last : rawName;
    if (_nativeAnnotationNames.contains(baseName)) {
      return true;
    }
    final constructorName = meta.constructorName?.name;
    if (constructorName != null &&
        _nativeAnnotationNames.contains(constructorName)) {
      return true;
    }
    if (baseName == 'pragma' || constructorName == 'pragma') {
      final args = meta.arguments?.arguments;
      if (args != null && args.isNotEmpty) {
        final firstArg = args.first;
        String? pragmaName;
        if (firstArg is SimpleStringLiteral) {
          pragmaName = firstArg.value;
        } else if (firstArg is StringLiteral) {
          pragmaName = firstArg.stringValue;
        } else {
          for (final entity in firstArg.childEntities) {
            if (entity is SimpleStringLiteral) {
              pragmaName = entity.value;
              break;
            } else if (entity is StringLiteral) {
              pragmaName = entity.stringValue;
              break;
            }
          }
        }
        if (pragmaName != null && _entryPointPragmas.contains(pragmaName)) {
          return true;
        }
      }
    }
  }
  return false;
}