google / protobuf.dart

Runtime library for Dart protobufs
https://pub.dev/packages/protobuf
BSD 3-Clause "New" or "Revised" License
527 stars 183 forks source link

[protoc_plugin] Error `The method '$_clearField' isn't defined for the class 'DartMixin'.` #922

Open jonasbadstuebner opened 6 months ago

jonasbadstuebner commented 6 months ago

dart pub global activate -sgit https://github.com/google/protobuf.dart.git --git-path protoc_plugin/ gives me the following error:

* protoc_plugin 22.0.0-dev from git https://github.com/google/protobuf.dart.git at b76135 in protoc_plugin (was 21.1.2)                                                                                                                                                                                                   
Building package executables...                                                                                                                                                                                                                                                                                           
Failed to build protoc_plugin:protoc_plugin:                                                                                                                                                                                                                                                                              
../../../../../../.pub-cache/git/protobuf.dart-b7613581d847e1e36e76f0e36db3a412d8fea5b1/protoc_plugin/lib/src/generated/dart_options.pb.dart:85:23: Error: The method '$_clearField' isn't defined for the class 'DartMixin'.

ref is b7613581d847e1e36e76f0e36db3a412d8fea5b1

Dart SDK version: 3.3.1 (stable) (Wed Mar 6 13:09:19 2024 +0000) on "linux_x64"

dart pub global activate -sgit https://github.com/google/protobuf.dart.git --git-path protoc_plugin --git-ref 1822b81df565f7b7d54450b33fa2c997f69a9995 works as expected, so the problem is somewhere in b7613581d847e1e36e76f0e36db3a412d8fea5b1

Am I missing something or is this a newly introduced problem?

osa1 commented 5 months ago

protoc_plugin in https://github.com/google/protobuf.dart/commit/b7613581d847e1e36e76f0e36db3a412d8fea5b1 can only be compiled with the protobuf in the same commit (or later). Since we don't override the protobuf dependency to ../protobuf (I don't even know if that's possible when running dart pub global activate ...) it's trying to use the latest released protobuf library, which is not compatible.

Things to fix:

Note that after the second step above your project may fail to compile unless you also use the protobuf library from the git repo with the same rev as the protoc_plugin.

jonasbadstuebner commented 3 months ago

By the way, it works on master.

Is there an ETA for 4.0.0, so I don't have to use a local repository?