Skip to content

Partially fix Java interop for emitted inner classes #1894

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 11, 2017

Conversation

smarter
Copy link
Member

@smarter smarter commented Jan 10, 2017

The backend uses rawname to define the "inner name" of an InnerClass
entry in a classfile, this should be the simple name of the class before
any mangling takes place but before this commit, we put the mangled name
after flatten there.

Fixing this allows Java code to reference dotty inner classes, except if
they're defined in objects which is still broken until
lampepfl/scala#4 is merged and a new backend
is published.

Review by @DarkDimius

@odersky odersky requested a review from DarkDimius January 11, 2017 03:16
smarter added a commit to dotty-staging/dotty that referenced this pull request Jan 11, 2017
It does not compile with dotty because of
scala#1894 and
lampepfl/scala#4
smarter added a commit to dotty-staging/dotty that referenced this pull request Jan 11, 2017
It does not compile with dotty because of
scala#1894 and
lampepfl/scala#4
smarter added a commit to dotty-staging/dotty that referenced this pull request Jan 11, 2017
It does not compile with dotty because of
scala#1894 and
lampepfl/scala#4
@smarter smarter mentioned this pull request Jan 11, 2017
Copy link
Contributor

@DarkDimius DarkDimius left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Otherwise LGTM

@@ -560,7 +560,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
def javaBinaryName: Name = toDenot(sym).fullNameSeparated("/") // addModuleSuffix(fullNameInternal('/'))
def javaClassName: String = toDenot(sym).fullName.toString// addModuleSuffix(fullNameInternal('.')).toString
def name: Name = sym.name
def rawname: Name = sym.name // todo ????
def rawname: Name = sym.name(ctx.withPhase(ctx.flattenPhase))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be initial phase, instead of flatten.

The backend uses `rawname` to define the "inner name" of an InnerClass
entry in a classfile, this should be the simple name of the class before
any mangling takes place.

Fixing this allows Java code to reference dotty inner classes, except if
they're defined in objects which is still broken until
lampepfl/scala#4 is merged and a new backend
is published.
@smarter smarter force-pushed the fix/inner-class-emission branch from 755abf7 to 50268a1 Compare January 11, 2017 12:51
@smarter smarter merged commit e9165e4 into scala:master Jan 11, 2017
@allanrenucci allanrenucci deleted the fix/inner-class-emission branch December 14, 2017 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants