Skip to content

Commit dd4b1fc

Browse files
committed
Avoid deprecation warnings in generated code
Add `nowarn` annotations so generated code does not produce deprecation warnings during compilation.
1 parent 705a9aa commit dd4b1fc

File tree

5 files changed

+39
-12
lines changed

5 files changed

+39
-12
lines changed

build.sbt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ lazy val runtime = (projectMatrix in file("scalapb-runtime"))
6060
Compile / unmanagedResourceDirectories += (LocalRootProject / baseDirectory).value / "protobuf",
6161
scalacOptions ++= (if (!isScala3.value)
6262
Seq(
63-
"-P:silencer:globalFilters=avaGenerateEqualsAndHash in class .* is deprecated",
6463
"-P:silencer:lineContentFilters=import scala.collection.compat._"
6564
)
6665
else Nil),
@@ -431,8 +430,7 @@ lazy val e2e = (projectMatrix in file("e2e"))
431430
.settings(
432431
scalacOptions ++= (if (!isScala3.value)
433432
Seq(
434-
"-P:silencer:globalFilters=value deprecatedInt32 in class TestDeprecatedFields is deprecated",
435-
"-P:silencer:pathFilters=custom_options_use;CustomAnnotationProto.scala;TestDeprecatedFields.scala",
433+
"-P:silencer:pathFilters=custom_options_use;CustomAnnotationProto.scala",
436434
"-P:silencer:lineContentFilters=import com.thesamet.pb.MisplacedMapper.weatherMapper"
437435
)
438436
else Nil),

compiler-plugin/src/main/scala/scalapb/compiler/DescriptorImplicits.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,8 +551,19 @@ class DescriptorImplicits private[compiler] (
551551
Nil
552552
}
553553

554+
def containsADeprecatedField = message.fields.exists(_.getOptions.getDeprecated)
555+
556+
private[this] def ignoreDeprecatedFieldsAnnotation: Option[String] = {
557+
if (containsADeprecatedField)
558+
Some(ProtobufGenerator.ignoreDeprecatedAnnotation)
559+
else
560+
None
561+
}
562+
554563
def annotationList: Seq[String] = {
555-
deprecatedAnnotation ++ messageOptions.getAnnotationsList().asScala
564+
deprecatedAnnotation ++ ignoreDeprecatedFieldsAnnotation.toList ++ messageOptions
565+
.getAnnotationsList()
566+
.asScala
556567
}
557568

558569
def companionAnnotationList: Seq[String] = {

compiler-plugin/src/main/scala/scalapb/compiler/ProtobufGenerator.scala

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,7 @@ class ProtobufGenerator(
766766
def generateToJavaProto(message: Descriptor)(printer: FunctionalPrinter): FunctionalPrinter = {
767767
val myFullScalaName = message.scalaType.fullName
768768
printer
769+
.when(message.containsADeprecatedField)(_.add(ProtobufGenerator.ignoreDeprecatedAnnotation))
769770
.add(s"def toJavaProto(scalaPbSource: $myFullScalaName): ${message.javaTypeName} = {")
770771
.indent
771772
.add(s"val javaPbOut = ${message.javaTypeName}.newBuilder")
@@ -780,6 +781,7 @@ class ProtobufGenerator(
780781
def generateFromJavaProto(message: Descriptor)(printer: FunctionalPrinter): FunctionalPrinter = {
781782
val myFullScalaName = message.scalaType.fullName
782783
printer
784+
.when(message.containsADeprecatedField)(_.add(ProtobufGenerator.ignoreDeprecatedAnnotation))
783785
.add(
784786
s"def fromJavaProto(javaPbSource: ${message.javaTypeName}): $myFullScalaName = $myFullScalaName("
785787
)
@@ -961,27 +963,36 @@ class ProtobufGenerator(
961963
.indent
962964
.print(message.fields) { case (printer, field) =>
963965
val fieldName = field.scalaName.asSymbol
966+
967+
val deprecatedAnnotation: String = {
968+
if (field.getOptions.getDeprecated) {
969+
ProtobufGenerator.deprecatedAnnotation + " "
970+
} else {
971+
""
972+
}
973+
}
974+
964975
if (!field.isInOneof) {
965976
if (field.supportsPresence) {
966977
val optionLensName = "optional" + field.upperScalaName
967978
printer
968979
.add(
969-
s"""def $fieldName: ${lensType(
980+
s"""${deprecatedAnnotation}def $fieldName: ${lensType(
970981
field.singleScalaTypeName
971982
)} = field(_.${field.getMethod})((c_, f_) => c_.copy($fieldName = _root_.scala.Option(f_)))
972-
|def ${optionLensName}: ${lensType(
983+
|${deprecatedAnnotation}def ${optionLensName}: ${lensType(
973984
field.scalaTypeName
974985
)} = field(_.$fieldName)((c_, f_) => c_.copy($fieldName = f_))""".stripMargin
975986
)
976987
} else
977988
printer.add(
978-
s"def $fieldName: ${lensType(field.scalaTypeName)} = field(_.$fieldName)((c_, f_) => c_.copy($fieldName = f_))"
989+
s"${deprecatedAnnotation}def $fieldName: ${lensType(field.scalaTypeName)} = field(_.$fieldName)((c_, f_) => c_.copy($fieldName = f_))"
979990
)
980991
} else {
981992
val oneofName = field.getContainingOneof.scalaName.nameSymbol
982993
printer
983994
.add(
984-
s"def $fieldName: ${lensType(field.scalaTypeName)} = field(_.${field.getMethod})((c_, f_) => c_.copy($oneofName = ${field.oneOfTypeName
995+
s"${deprecatedAnnotation}def $fieldName: ${lensType(field.scalaTypeName)} = field(_.${field.getMethod})((c_, f_) => c_.copy($oneofName = ${field.oneOfTypeName
985996
.fullNameWithMaybeRoot(message)}(f_)))"
986997
)
987998
}
@@ -1772,6 +1783,9 @@ object ProtobufGenerator {
17721783
val deprecatedAnnotation: String =
17731784
"""@scala.deprecated(message="Marked as deprecated in proto file", "")"""
17741785

1786+
val ignoreDeprecatedAnnotation: String =
1787+
"""@scala.annotation.nowarn("cat=deprecation")"""
1788+
17751789
private[scalapb] def escapeScalaString(raw: String): String =
17761790
raw
17771791
.map {

scalapb-runtime/src/main/js-native/com/google/protobuf/descriptor/FileOptions.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ package com.google.protobuf.descriptor
8787
* See the documentation for the "Options" section above.
8888
*/
8989
@SerialVersionUID(0L)
90+
@scala.annotation.nowarn("cat=deprecation")
9091
final case class FileOptions(
9192
javaPackage: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None,
9293
javaOuterClassname: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None,
@@ -655,8 +656,8 @@ object FileOptions extends scalapb.GeneratedMessageCompanion[com.google.protobuf
655656
def optionalJavaOuterClassname: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Predef.String]] = field(_.javaOuterClassname)((c_, f_) => c_.copy(javaOuterClassname = f_))
656657
def javaMultipleFiles: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getJavaMultipleFiles)((c_, f_) => c_.copy(javaMultipleFiles = _root_.scala.Option(f_)))
657658
def optionalJavaMultipleFiles: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.javaMultipleFiles)((c_, f_) => c_.copy(javaMultipleFiles = f_))
658-
def javaGenerateEqualsAndHash: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getJavaGenerateEqualsAndHash)((c_, f_) => c_.copy(javaGenerateEqualsAndHash = _root_.scala.Option(f_)))
659-
def optionalJavaGenerateEqualsAndHash: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.javaGenerateEqualsAndHash)((c_, f_) => c_.copy(javaGenerateEqualsAndHash = f_))
659+
@scala.deprecated(message="Marked as deprecated in proto file", "") def javaGenerateEqualsAndHash: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getJavaGenerateEqualsAndHash)((c_, f_) => c_.copy(javaGenerateEqualsAndHash = _root_.scala.Option(f_)))
660+
@scala.deprecated(message="Marked as deprecated in proto file", "") def optionalJavaGenerateEqualsAndHash: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.javaGenerateEqualsAndHash)((c_, f_) => c_.copy(javaGenerateEqualsAndHash = f_))
660661
def javaStringCheckUtf8: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getJavaStringCheckUtf8)((c_, f_) => c_.copy(javaStringCheckUtf8 = _root_.scala.Option(f_)))
661662
def optionalJavaStringCheckUtf8: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.javaStringCheckUtf8)((c_, f_) => c_.copy(javaStringCheckUtf8 = f_))
662663
def optimizeFor: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.descriptor.FileOptions.OptimizeMode] = field(_.getOptimizeFor)((c_, f_) => c_.copy(optimizeFor = _root_.scala.Option(f_)))

scalapb-runtime/src/main/scalajvm/com/google/protobuf/descriptor/FileOptions.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ import _root_.scalapb.internal.compat.JavaConverters._
8888
* See the documentation for the "Options" section above.
8989
*/
9090
@SerialVersionUID(0L)
91+
@scala.annotation.nowarn("cat=deprecation")
9192
final case class FileOptions(
9293
javaPackage: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None,
9394
javaOuterClassname: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None,
@@ -425,6 +426,7 @@ final case class FileOptions(
425426

426427
object FileOptions extends scalapb.GeneratedMessageCompanion[com.google.protobuf.descriptor.FileOptions] with scalapb.JavaProtoSupport[com.google.protobuf.descriptor.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions] {
427428
implicit def messageCompanion: scalapb.GeneratedMessageCompanion[com.google.protobuf.descriptor.FileOptions] with scalapb.JavaProtoSupport[com.google.protobuf.descriptor.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions] = this
429+
@scala.annotation.nowarn("cat=deprecation")
428430
def toJavaProto(scalaPbSource: com.google.protobuf.descriptor.FileOptions): com.google.protobuf.DescriptorProtos.FileOptions = {
429431
val javaPbOut = com.google.protobuf.DescriptorProtos.FileOptions.newBuilder
430432
scalaPbSource.javaPackage.foreach(javaPbOut.setJavaPackage)
@@ -450,6 +452,7 @@ object FileOptions extends scalapb.GeneratedMessageCompanion[com.google.protobuf
450452
javaPbOut.addAllUninterpretedOption(_root_.scalapb.internal.compat.toIterable(scalaPbSource.uninterpretedOption.iterator.map(com.google.protobuf.descriptor.UninterpretedOption.toJavaProto(_))).asJava)
451453
javaPbOut.build
452454
}
455+
@scala.annotation.nowarn("cat=deprecation")
453456
def fromJavaProto(javaPbSource: com.google.protobuf.DescriptorProtos.FileOptions): com.google.protobuf.descriptor.FileOptions = com.google.protobuf.descriptor.FileOptions(
454457
javaPackage = if (javaPbSource.hasJavaPackage) Some(javaPbSource.getJavaPackage) else _root_.scala.None,
455458
javaOuterClassname = if (javaPbSource.hasJavaOuterClassname) Some(javaPbSource.getJavaOuterClassname) else _root_.scala.None,
@@ -709,8 +712,8 @@ object FileOptions extends scalapb.GeneratedMessageCompanion[com.google.protobuf
709712
def optionalJavaOuterClassname: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Predef.String]] = field(_.javaOuterClassname)((c_, f_) => c_.copy(javaOuterClassname = f_))
710713
def javaMultipleFiles: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getJavaMultipleFiles)((c_, f_) => c_.copy(javaMultipleFiles = _root_.scala.Option(f_)))
711714
def optionalJavaMultipleFiles: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.javaMultipleFiles)((c_, f_) => c_.copy(javaMultipleFiles = f_))
712-
def javaGenerateEqualsAndHash: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getJavaGenerateEqualsAndHash)((c_, f_) => c_.copy(javaGenerateEqualsAndHash = _root_.scala.Option(f_)))
713-
def optionalJavaGenerateEqualsAndHash: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.javaGenerateEqualsAndHash)((c_, f_) => c_.copy(javaGenerateEqualsAndHash = f_))
715+
@scala.deprecated(message="Marked as deprecated in proto file", "") def javaGenerateEqualsAndHash: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getJavaGenerateEqualsAndHash)((c_, f_) => c_.copy(javaGenerateEqualsAndHash = _root_.scala.Option(f_)))
716+
@scala.deprecated(message="Marked as deprecated in proto file", "") def optionalJavaGenerateEqualsAndHash: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.javaGenerateEqualsAndHash)((c_, f_) => c_.copy(javaGenerateEqualsAndHash = f_))
714717
def javaStringCheckUtf8: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getJavaStringCheckUtf8)((c_, f_) => c_.copy(javaStringCheckUtf8 = _root_.scala.Option(f_)))
715718
def optionalJavaStringCheckUtf8: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.javaStringCheckUtf8)((c_, f_) => c_.copy(javaStringCheckUtf8 = f_))
716719
def optimizeFor: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.descriptor.FileOptions.OptimizeMode] = field(_.getOptimizeFor)((c_, f_) => c_.copy(optimizeFor = _root_.scala.Option(f_)))

0 commit comments

Comments
 (0)