Skip to content

Null pointer when try to convert a bridge class def to json. #103

@Murmurl912

Description

@Murmurl912

Full code at: https://github.com/Murmurl912/flutter_code_push_flutter_eval/blob/main/hot_update/test/generate_binding.dart
Error is thrown in BridgeTypeRef.toJson, ref = null

class BridgeTypeRef {
  /// Reference a type by its spec (library URI and name)
  const BridgeTypeRef(this.spec, [this.typeArgs = const []])
      : cacheId = null,
        gft = null,
        ref = null;

  /// Reference a type by its local in-context name
  /// (e.g. a type parameter name such as T)
  const BridgeTypeRef.ref(this.ref, [this.typeArgs = const []])
      : cacheId = null,
        gft = null,
        spec = null;

  /// Internal use only.
  const BridgeTypeRef.type(this.cacheId, [this.typeArgs = const []])
      : ref = null,
        gft = null,
        spec = null;

  /// Reference a generic function type.
  /// Currently maps to [CoreTypes.function]
  const BridgeTypeRef.genericFunction(this.gft)
      : typeArgs = const [],
        ref = null,
        cacheId = null,
        spec = null;

  /// Load a type ref from its JSON representation.
  factory BridgeTypeRef.fromJson(Map<String, dynamic> json) {
    final id = json['id'];
    final ta = [
      for (final arg in json['typeArgs']) BridgeTypeRef.fromJson(arg)
    ];
    if (id != null) {
      return BridgeTypeRef.type(id, ta);
    }
    final gft = json['gft'];
    if (gft != null) {
      return BridgeTypeRef.genericFunction(gft);
    }
    final unresolved = json['unresolved'];
    if (unresolved != null) {
      return BridgeTypeRef(BridgeTypeSpec.fromJson(json['unresolved']), ta);
    }
    return BridgeTypeRef.ref(json['ref'], ta);
  }

  final int? cacheId;
  final String? ref;
  final BridgeFunctionDef? gft;
  final BridgeTypeSpec? spec;
  final List<BridgeTypeRef> typeArgs;

  /// Convert the type ref to its JSON representation.
  Map<String, dynamic> toJson() => {
        if (cacheId != null)
          'id': cacheId!
        else if (spec != null)
          'unresolved': spec!.toJson()
        else
          'ref': ref!, /// ref is null
        'typeArgs': [for (final t in typeArgs) t.toJson()]
      };
}

serialize failed: Null check operator used on a null value
#0 BridgeTypeRef.toJson (package:dart_eval/src/eval/bridge/declaration/type.dart:134:21)
#1 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:33:27)
#2 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:27:7)
#3 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:34:7)
#4 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:27:7)
#5 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:34:7)
#6 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:19:7)
#7 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:27:7)
#8 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:34:7)
#9 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:27:7)
#10 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:34:7)
#11 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:27:7)
#12 nestToJson (flutter_code_push_flutter_eval/hot_update/test/generate_binding.dart:27:7)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions