Skip to content

Excluding local classes created by Parcelize #300

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 3 commits into from
Jun 13, 2025
Merged

Conversation

shanshin
Copy link
Contributor

In some rare cases, JVM accepts not to specify method name (passing to outerMethod) in EnclosingMethod attribute, only class name. It's relevant for cases if local class is enclosed in an instance initializer, static initializer, instance variable initializer, or class variable initializer (see https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.7)

Normally Kotlin compiler always fills method name but kotlin-parcelize can generate different instructions because it is a compiler plugin.

Fixes #112

In some rare cases, JVM accepts not to specify method name (passing to `outerMethod`) in `EnclosingMethod` attribute, only class name.
It's relevant for cases if local class is enclosed in an instance initializer, static initializer, instance variable initializer, or class variable initializer (see https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.7)

Normally Kotlin compiler always fills method name but kotlin-parcelize can generate different instructions because it is a compiler plugin.

Fixes #112
@shanshin shanshin requested a review from fzhinkin June 12, 2025 21:12
Copy link
Collaborator

@fzhinkin fzhinkin left a comment

Choose a reason for hiding this comment

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

Nice! I have just a few minor comments.

Copy link
Collaborator

Choose a reason for hiding this comment

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

It seems like this class could be removed safely, for test purposes it's enough to have only the $Creator one.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hmmm, yes )

@shanshin shanshin requested a review from fzhinkin June 13, 2025 11:37
@shanshin shanshin merged commit 0403f92 into master Jun 13, 2025
1 check passed
@shanshin shanshin deleted the fix-parcelize branch June 13, 2025 12:26
svc-squareup-copybara pushed a commit to cashapp/misk that referenced this pull request Jun 26, 2025
| Package | Type | Package file | Manager | Update | Change |
|---|---|---|---|---|---|
|
[com.google.api.grpc:proto-google-common-protos](https://github.com/googleapis/sdk-platform-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.58.2` -> `2.59.0` |
| [com.google.api:gax](https://github.com/googleapis/sdk-platform-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.67.2` -> `2.68.0` |
|
[com.google.errorprone:error_prone_annotations](https://errorprone.info)
([source](https://github.com/google/error-prone)) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `2.38.0` -> `2.39.0` |
|
[org.jetbrains.kotlinx.binary-compatibility-validator](https://github.com/Kotlin/binary-compatibility-validator)
| plugin | misk/gradle/libs.versions.toml | gradle | minor | `0.17.0` ->
`0.18.0` |
|
[com.autonomousapps.dependency-analysis](https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin)
| plugin | misk/gradle/libs.versions.toml | gradle | minor | `2.18.0` ->
`2.19.0` |
| [software.amazon.awssdk:sdk-core](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.69` -> `2.31.70` |
| [software.amazon.awssdk:sqs](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.69` -> `2.31.70` |
|
[software.amazon.awssdk:dynamodb-enhanced](https://aws.amazon.com/sdkforjava)
| dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.69` -> `2.31.70` |
| [software.amazon.awssdk:dynamodb](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.69` -> `2.31.70` |
| [software.amazon.awssdk:aws-core](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.69` -> `2.31.70` |
| [software.amazon.awssdk:bom](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.69` -> `2.31.70` |
| [software.amazon.awssdk:auth](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.69` -> `2.31.70` |

---

### Release Notes

<details>
<summary>googleapis/sdk-platform-java
(com.google.api.grpc:proto-google-common-protos)</summary>

###
[`v2.59.0`](https://github.com/googleapis/sdk-platform-java/blob/HEAD/CHANGELOG.md#2590-2025-06-02)

##### Features

- add logic to set universe domain to ServiceAccountJwtAccessCredentials
([#&#8203;3806](googleapis/sdk-platform-java#3806))
([5b45708](googleapis/sdk-platform-java@5b45708))
- use debian base image for `java-library-generation`
([#&#8203;3817](googleapis/sdk-platform-java#3817))
([94d0b30](googleapis/sdk-platform-java@94d0b30))

##### Bug Fixes

- manage graalvm image versions via Hermetic Build templates *only*
([#&#8203;3800](googleapis/sdk-platform-java#3800))
([244c5dc](googleapis/sdk-platform-java@244c5dc))

##### Dependencies

- update dependency com.google.oauth-client:google-oauth-client-bom to
v1.39.0
([#&#8203;3813](googleapis/sdk-platform-java#3813))
([196a7ca](googleapis/sdk-platform-java@196a7ca))
- update google api dependencies
([#&#8203;3791](googleapis/sdk-platform-java#3791))
([45ef2e0](googleapis/sdk-platform-java@45ef2e0))
- update google auth library dependencies to v1.36.0
([#&#8203;3814](googleapis/sdk-platform-java#3814))
([07f834a](googleapis/sdk-platform-java@07f834a))
- update grpc dependencies to 1.71.0
([#&#8203;3807](googleapis/sdk-platform-java#3807))
([49a7ae5](googleapis/sdk-platform-java@49a7ae5))
- Upgrade Protobuf-Java to v3.25.8
([#&#8203;3810](googleapis/sdk-platform-java#3810))
([ab90662](googleapis/sdk-platform-java@ab90662))

</details>

<details>
<summary>google/error-prone
(com.google.errorprone:error_prone_annotations)</summary>

###
[`v2.39.0`](https://github.com/google/error-prone/releases/tag/v2.39.0):
Error Prone 2.39.0

Changes:

- Temporarily downgrade to Guava 33.4.0
([#&#8203;5108](google/error-prone#5108))

Checks:

- [`BooleanLiteral`](https://errorprone.info/bugpattern/BooleanLiteral):
Prefer `true` to `Boolean.TRUE`
-
[`ExpensiveLenientFormatString`](https://errorprone.info/bugpattern/ExpensiveLenientFormatString):
Renamed from `PreconditionsExpensiveString`, detects unnecessary calls
to `String.format` in the arguments of lenient formatting methods.
-
[`UnnecessaryQualifier`](https://errorprone.info/bugpattern/UnnecessaryQualifier):
Detects `@Qualifier` or `@BindingAnnotation` annotations that have no
effect, and can be removed

Issues:
[#&#8203;4996](google/error-prone#4996),
[#&#8203;5045](google/error-prone#5045)

Full changelog:
google/error-prone@v2.38.0...v2.39.0

</details>

<details>
<summary>Kotlin/binary-compatibility-validator
(org.jetbrains.kotlinx.binary-compatibility-validator)</summary>

###
[`v0.18.0`](https://github.com/Kotlin/binary-compatibility-validator/releases/tag/0.18.0)

[Compare
Source](Kotlin/binary-compatibility-validator@0.17.0...0.18.0)

#### What's Changed

- Supported KLIB cross compilation enabled in Kotlin 2.1.0
[#&#8203;299](Kotlin/binary-compatibility-validator#299)
- Fixed issue with early properties evaluation
[#&#8203;286](Kotlin/binary-compatibility-validator#286)
- Started excluding local classes created by Parcelize
[#&#8203;300](Kotlin/binary-compatibility-validator#300)

Thanks to [@&#8203;TheMrMilchmann](https://github.com/TheMrMilchmann),
[@&#8203;osipxd](https://github.com/osipxd), and
[@&#8203;Goooler](https://github.com/Goooler) for their contributions!

</details>

<details>
<summary>autonomousapps/dependency-analysis-android-gradle-plugin
(com.autonomousapps.dependency-analysis)</summary>

###
[`v2.19.0`](https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin/blob/HEAD/CHANGELOG.md#Version-2190)

- \[Feat]: support advices for Android test fixtures source sets
- \[Feat]: support typesafe project accessors in IssueHandler
- \[Fix]: bump kotlin-metadata-jvm to 2.1.21 to support K2.2 projects.
- \[Chore]: move publishing to new `central.sonatype.com` repo.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 6pm every weekday,before 2am
every weekday" in timezone Australia/Melbourne, Automerge - At any time
(no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://github.com/renovatebot/renovate).

GitOrigin-RevId: d85db8eca9307834b88f72100e0026a94e3b4aa2
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.

After upgrading to kotlin 1.5.0, the kotlin-parcelize generated code started to be reported as public by binary-compatibility-validator
2 participants