与 #8896 中的断言和变更日志相反,与 3.18.1 一起打包在 jar 中的协议二进制文件似乎不包含此更改。
一些证据:
$ sha1sum <the file>
00b97c1fefac42a993e66cdd10760b7797b67cfb $HOME/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protoc/3.18.1/b97c1fefac42a993e66cdd10760b7797b67cfb/protoc-3.18.1-linux-x86_64.exe
$ strings $HOME/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protoc/3.18.1/b97c1fefac42a993e66cdd10760b7797b67cfb/protoc-3.18.1-linux-x86_64.exe |grep -i suppresswarnings
@SuppressWarnings({"unused"})
@SuppressWarnings({"rawtypes"})
@java.lang.SuppressWarnings("unchecked")
@SuppressWarnings({"rawtypes"})
@SuppressWarnings({"rawtypes"})
@java.lang.SuppressWarnings({"unchecked", "fallthrough"})
@java.lang.SuppressWarnings({"ReferenceEquality"})
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
$ strings $HOME/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protoc/3.18.1/b97c1fefac42a993e66cdd10760b7797b67cfb/protoc-3.18.1-linux-x86_64.exe |grep INLIN
template<> PROTOBUF_NOINLINE $classtype$* Arena::CreateMaybeMessage< $classtype$ >(Arena* arena) {
inline PROTOBUF_ALWAYS_INLINE void _internal_set_$name$(const std::string& value);
inline PROTOBUF_ALWAYS_INLINE bool _internal_$name$_donated() const;
inline PROTOBUF_ALWAYS_INLINE
inline PROTOBUF_ALWAYS_INLINE
我可能会得出结论,当构建 3.18.1 jar 时,它错误地包含了较旧的本机二进制文件,但是:
$ $HOME/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protoc/3.18.1/b97c1fefac42a993e66cdd10760b7797b67cfb/protoc-3.18.1-linux-x86_64.exe --version
libprotoc 3.18.1
您使用什么版本的 protobuf 以及什么语言? 版本:3.18.1 语言:Java 和 Kotlin
什么操作系统(Linux、Windows...)和版本? 软呢帽 33
您使用什么运行时/编译器(例如,python 版本或 gcc 版本) Java 11,Gradle 插件 0.8.17
你做了什么? 从 protobuf 生成 Kotlin 代码
您期望看到
生成的 Kotlin 代码包含什么@SuppressWarnings("NOTHING_TO_INLINE")
你看到了什么?
生成的 Kotlin 代码不包含@SuppressWarnings
,因此我收到警告;)
关于您的项目/环境我们还应该了解的其他信息