ScalaPB icon indicating copy to clipboard operation
ScalaPB copied to clipboard

Error in custom options after upgrade to 0.11.18

Open ahjohannessen opened this issue 4 months ago • 6 comments

Hi @thesamet,

I am getting an error with respect to custom options after upgrading to 0.11.18 - I wonder what has changed that results in this:

[error] /Users/ahjohannessen/Development/Work/sbt-transforms/code-gen/target/jvm-2.12/src_managed/main/scalapb/alspb/options/Alspb.java:515:29: name clash: clearExtension(com.google.protobuf.GeneratedMessage.GeneratedExtension<alspb.options.Alspb.MessageOptions,?>) in alspb.options.Alspb.MessageOptions.Builder and clearExtension(com.google.protobuf.GeneratedMessage.GeneratedExtension<alspb.options.Alspb.MessageOptions,T>) in com.google.protobuf.GeneratedMessageV3.ExtendableBuilder have the same erasure, yet neither overrides the other
[error] @java.lang.Override
[error]       public <Type> Builder clearExtension(
[error]           com.google.protobuf.GeneratedMessage.GeneratedExtension<
[error]               alspb.options.Alspb.MessageOptions, ?> extension) {
[error]         return super.clearExtension(extension);
[error]       }
[error]                             ^
[error] /Users/ahjohannessen/Development/Work/sbt-transforms/code-gen/target/jvm-2.12/src_managed/main/scalapb/alspb/options/Alspb.java:514:7: method does not override or implement a method from a supertype
[error] @java.lang.Override
[error]       ^
[error] /Users/ahjohannessen/Development/Work/sbt-transforms/code-gen/target/jvm-2.13/src_managed/main/scalapb/alspb/options/Alspb.java:515:29: name clash: clearExtension(com.google.protobuf.GeneratedMessage.GeneratedExtension<alspb.options.Alspb.MessageOptions,?>) in alspb.options.Alspb.MessageOptions.Builder and clearExtension(com.google.protobuf.GeneratedMessage.GeneratedExtension<alspb.options.Alspb.MessageOptions,T>) in com.google.protobuf.GeneratedMessageV3.ExtendableBuilder have the same erasure, yet neither overrides the other
[error] @java.lang.Override
[error]       public <Type> Builder clearExtension(
[error]           com.google.protobuf.GeneratedMessage.GeneratedExtension<
[error]               alspb.options.Alspb.MessageOptions, ?> extension) {
[error]         return super.clearExtension(extension);
[error]       }
[error]                             ^
[error] /Users/ahjohannessen/Development/Work/sbt-transforms/code-gen/target/jvm-2.13/src_managed/main/scalapb/alspb/options/Alspb.java:514:7: method does not override or implement a method from a supertype
[error] @java.lang.Override
[error]       ^
[error] /Users/ahjohannessen/Development/Work/sbt-transforms/code-gen/target/jvm-3/src_managed/main/scalapb/alspb/options/Alspb.java:515:29: name clash: clearExtension(com.google.protobuf.GeneratedMessage.GeneratedExtension<alspb.options.Alspb.MessageOptions,?>) in alspb.options.Alspb.MessageOptions.Builder and clearExtension(com.google.protobuf.GeneratedMessage.GeneratedExtension<alspb.options.Alspb.MessageOptions,T>) in com.google.protobuf.GeneratedMessageV3.ExtendableBuilder have the same erasure, yet neither overrides the other
[error] @java.lang.Override
[error]       public <Type> Builder clearExtension(
[error]           com.google.protobuf.GeneratedMessage.GeneratedExtension<
[error]               alspb.options.Alspb.MessageOptions, ?> extension) {
[error]         return super.clearExtension(extension);
[error]       }
[error]                             ^
[error] /Users/ahjohannessen/Development/Work/sbt-transforms/code-gen/target/jvm-3/src_managed/main/scalapb/alspb/options/Alspb.java:514:7: method does not override or implement a method from a supertype
[error] @java.lang.Override
[error]       ^
[error] (codeGenJVM2_12 / Compile / compileIncremental) javac returned non-zero exit code
[error] (codeGenJVM3 / Compile / compileIncremental) javac returned non-zero exit code
[error] (codeGenJVM2_13 / Compile / compileIncremental) javac returned non-zero exit code
[error] Total time: 10 s, completed 10.06.2025, 09:04:33

The build definition in sbt:

lazy val codeGen = (projectMatrix in file("code-gen"))
  .enablePlugins(BuildInfoPlugin)
  .defaultAxes()
  .settings(
    name             := "sbt-transforms",
    buildInfoPackage := "fo.als.transforms.compiler",
    buildInfoKeys := Seq[BuildInfoKey](
      name,
      organization,
      version,
      scalaVersion,
      scalaBinaryVersion,
      sbtVersion,
      "coreName" -> (core.jvm(autoScalaLibrary = true) / name).value
    ),
    libraryDependencies ++= Seq(
      scalaPb,
      // For finding google/protobuf/descriptor.proto
      scalaPbRuntime % "protobuf",
      alsPb          % "protobuf-src" intransitive ()
    ),
    Compile / PB.targets       := Seq(PB.gens.java(versions.scalaPbProtobuf) -> (Compile / sourceManaged).value / "scalapb"),
    Compile / PB.protocVersion := versions.scalaPbProtobuf
  )
  .jvmPlatform(
    scalaVersions = Seq(Scala212, Scala213, Scala3),
    noScalaDocOrSrc
  )

lazy val codeGenJVM212 = codeGen
  .jvm(Scala212)
  .settings(noScalaDocOrSrc)

This has been working fine for years.

The custom option that is failing is this:

syntax = "proto2";

import "google/protobuf/descriptor.proto";
import "scalapb/scalapb.proto";

package alspb.options;

option java_package = "alspb.options";

option (scalapb.options) = {
  scope: FILE
  flat_package: false
  single_file: true
  lenses: false
  java_conversions: false
  preserve_unknown_fields: true
};

///====================================================================================================================
/// Message Options
///====================================================================================================================

enum MessageKind {
  Data    = 0;
  Event   = 1;
  Command = 2;
}

message MessageOptions {

  // Classifies message usage.
  optional MessageKind kind = 1;

  extensions 1000 to max;
}

extend google.protobuf.MessageOptions {
  optional MessageOptions message = 50001;
}

///====================================================================================================================

ahjohannessen avatar Jun 10 '25 08:06 ahjohannessen