Skip to content

Commit

Permalink
Detect java name conflicts and append OuterClass suffix when detected.
Browse files Browse the repository at this point in the history
This follows the behavior of the official Java generator.

Fixes #26
  • Loading branch information
thesamet committed Aug 22, 2015
1 parent 32c67e0 commit 69bfe7c
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,11 @@ trait DescriptorPimps {
case None => message.getFile.scalaPackageName + "." + nameSymbol
}

private[compiler] def hasConflictingJavaClassName(className: String): Boolean = (
(message.getName == className) ||
(message.getEnumTypes.exists(_.getName == className)) ||
(message.nestedTypes.exists(_.hasConflictingJavaClassName(className))))

def javaTypeName = message.getFile.fullJavaName(message.getFullName)

def messageOptions: MessageOptions = message.getOptions.getExtension[MessageOptions](Scalapb.message)
Expand Down Expand Up @@ -227,11 +232,18 @@ trait DescriptorPimps {
def javaPackageAsSymbol: String =
javaPackage.split('.').map(_.asSymbol).mkString(".")

private def hasConflictingJavaClassName(className: String) = (
file.getEnumTypes.exists(_.getName == className) ||
file.getServices.exists(_.getName == className) ||
file.getMessageTypes.exists(_.hasConflictingJavaClassName(className)))

def javaOuterClassName =
if (file.getOptions.hasJavaOuterClassname)
file.getOptions.getJavaOuterClassname
else {
snakeCaseToCamelCase(baseName(file.getName), true)
val r = snakeCaseToCamelCase(baseName(file.getName), true)
if (!hasConflictingJavaClassName(r)) r
else r + "OuterClass"
}

def scalaPackageName = {
Expand Down
9 changes: 9 additions & 0 deletions e2e/src/main/protobuf/issue26.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Regression test for https://github.com/trueaccord/ScalaPB/issues/26
syntax = "proto3";

package name_test;

message Issue26 {
int32 a = 1;
}

0 comments on commit 69bfe7c

Please sign in to comment.