Skip to content
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

[internal] java: infer scala encoded symbols #13739

Merged
merged 3 commits into from
Nov 30, 2021

Conversation

tdyas
Copy link
Contributor

@tdyas tdyas commented Nov 30, 2021

Use analysis of Scala encoded symbols ("name-mangling") to allow inference of those symbols in Java sources. This is the last part of solving #13662.

Fixes #13662.

[ci skip-rust]

@tdyas tdyas requested review from stuhood and chrisjrn November 30, 2021 00:25
@tdyas
Copy link
Contributor Author

tdyas commented Nov 30, 2021

@stuhood: Where is the suggested location for tests that test Java->Scala interoperation? (I still need to add such a test.)

@tdyas
Copy link
Contributor Author

tdyas commented Nov 30, 2021

Is the namespacing approach acceptable? My intent was to not expose Scala name-mangled symbols from one file to other Scala code. That could be fine and would simplify this PR to just the lines that added the provided_symbols_encoded into the symbol map.

@stuhood
Copy link
Member

stuhood commented Nov 30, 2021

@stuhood: Where is the suggested location for tests that test Java->Scala interoperation? (I still need to add such a test.)

I've started adding some in src/python/pants/jvm/**/*_test.py, with comments that attempt to direct folks to write language-specific tests where possible.

Comment on lines 31 to 36
class SymbolNamespace(Enum):
"""Represents a "namespace" for a symbol, i.e. is the symbol a generic JVM name or did it
originate from a particular language (and may be encoded for JVM purposes)."""

JVM = "jvm"
SCALA = "scala"
Copy link
Member

@stuhood stuhood Nov 30, 2021

Choose a reason for hiding this comment

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

This seems fine... but it seems like it could also become multiple different mappings instead, which might reduce complexity of this class (which could maybe become a trie at some point). That's the approach I took in #13621 (comment).

More generally though, I don't think it will ever be possible to classify thirdparty deps (except maybe by parsing and de-mangling their symbols), so I wonder whether it is actually worth it to try and namespace them like this. I'm also not seeing the pitfall to Scala pulling in a mangled symbol.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Okay will just lump them together for now. We can always revisit an approach like this if it actually becomes necessary.

Tom Dyas added 3 commits November 30, 2021 13:03
[ci skip-rust]

[ci skip-build-wheels]
[ci skip-rust]

[ci skip-build-wheels]
[ci skip-rust]

[ci skip-build-wheels]
@tdyas tdyas force-pushed the java_infer_scala_encoded_symbols branch from 7192b87 to 7bf8896 Compare November 30, 2021 19:38
@tdyas tdyas requested a review from stuhood November 30, 2021 19:40
@tdyas
Copy link
Contributor Author

tdyas commented Nov 30, 2021

Simplified the PR and added a test. This is ready for review.

@stuhood stuhood merged commit 8fc8d0b into pantsbuild:main Nov 30, 2021
illicitonion added a commit that referenced this pull request Dec 7, 2021
Internal changes:

* [internal] Remove superfluous f-string specifiers ([#13821](#13821))

* [internal] scala: extract annotations as consumed types ([#13810](#13810))

* [jvm] Split nailgun digest from input file digests ([#13813](#13813))

* [internal] jvm: add jre_major_version and use stderr to properly extract version ([#13812](#13812))

* [internal] Clean up Go `embed` support's handling of dependencies ([#13801](#13801))

* [internal] scala: handle package object syntax in parser ([#13809](#13809))

* [internal] java: fix junit sentinel rule setup ([#13815](#13815))

* [internal] upgrade to rust v1.57.0 ([#13807](#13807))

* [internal] add failing test for FrozenDict equality issue ([#13389](#13389))

* [internal] Use `PyObject` instead of `Value` in more places ([#13802](#13802))

* Remove MultiPlatform Process abstractions ([#12725](#12725))

* [internal] add `JvmToolBase` for lockfile handling for JVM tools ([#13777](#13777))

* [internal] Port `MergeDigests` to Rust ([#13773](#13773))

* [jvm] Spawn nailgun servers outside the pool lock ([#13796](#13796))

* [internal] DRY loading internal Go binaries ([#13800](#13800))

* [internal] Convert unit tests to use pytest ([#13798](#13798))

* [internal] remove dead code - socket util. ([#13797](#13797))

* [internal] Reorganize Go parser scripts ([#13791](#13791))

* Adds Jackson core/datatype to `JVM_ARTIFACT_MAPPINGS` ([#13792](#13792))

* [internal] go: initial support for embedding resources ([#13743](#13743))

* [internal] Refer to `go.mod` path when downloading packages ([#13786](#13786))

* [internal] More robust Go dependency inference tests ([#13785](#13785))

* [internal] `tailor` doesn't add `go_package` for `testdata` folder ([#13783](#13783))

* [internal] Add Scala backend to dryrun for wheel builds. ([#13772](#13772))

* [internal] Unify JVM thirdparty resolves ([#13771](#13771))

* [internal] scala: infer dependencies from consumed symbols and intermediate scopes ([#13758](#13758))

* [internal] java: infer scala encoded symbols ([#13739](#13739))

* [internal] scala: parse and report package scopes ([#13738](#13738))

* [internal] go: configure included env vars for `GoSdkProcess` ([#13734](#13734))

* Fix some `./cargo audit` vulnerabilities. ([#13728](#13728))

* [internal] fix non-empty __init__.py ([#13730](#13730))

* Compute RepositoryPex directly from addresses. ([#13716](#13716))

* Upgrade to cargo-audit 0.16.0. ([#13729](#13729))

* Simplify `NativeHandler`. ([#13727](#13727))

* [internal] Switch to a maintained fork of the `fuse` crate for `brfs`. ([#13679](#13679))

* [internal] Add infrastructure to support deprecating field names ([#13666](#13666))

* [internal] Introduce OptionalPex/OptionalPexRequest. ([#13712](#13712))

* [internal] tailor adds go_package targets ([#13703](#13703))

* [internal] Remove unused testproject for pants-plugin ([#13704](#13704))

* [internal] Rename ambiguous `subpath` variable for Go code ([#13701](#13701))

* [internal] scala: generate the JVM names seen by Java code for Scala code ([#13696](#13696))

* Use RequirementsPexRequest in run_pex_binary.py. ([#13693](#13693))

* [internal] Refactor finding owning `go_mod` for first-party packages ([#13695](#13695))

* [internal] repl: add append_only_caches / run_in_workspace attributes to ReplRequest ([#13599](#13599))

* [internal] switch back to official `cargo-ensure-prefix` crate ([#13692](#13692))

* [internal] scala: extract type names from all Type.* AST nodes ([#13685](#13685))

* [internal] Convert unit tests to use pytest ([#13652](#13652))

* Unblock codegen support for java export analysis (#13645) ([#13675](#13675))

* [internal] upgrade to Rust 2021 Edition ([#13644](#13644))

* [internal] Don't store derived values on `go_first_party_package` targets ([#13676](#13676))

* Upgrade to py03 0.15.1. ([#13725](#13725))

* Add PyPDF2 to module mapping ([#13717](#13717))

* Upgrade console and indacatif. ([#13726](#13726))
@tdyas tdyas deleted the java_infer_scala_encoded_symbols branch February 20, 2023 20:25
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.

Java imports of Scala symbols with trailing $ not inferred
2 participants