Fix REPL clashing with CWD artefacts #14021
Merged
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
This reverts the change that moves all the REPL's artefacts into the
"repl$" package (#12607), moving everything back to the empty package.
Then it fixes the class name and package name shadowing issue, by
simulating what the batch compiler does when it compiles a source file
without a package statement: it considers the sources to be in the empty
package. Then the imports for the previous runs and the user-defined
imports will be in sub-contexts of the empty package.
The reason the working directory artefacts were shadowing the REPL
artefacts was because before the imports were being added to
sub-contexts of the root package, afterwhich the REPL tree was being
wrapped in the empty package. That meant that the classes found in the
empty package (i.e. classfiles in the working directory, or even
directories) had precedence over the wildcard imports for the previous
runs.
The tests now cascade up into contexts that don't have the current
compilation unit stored on them, so I had to safeguard against that in
Typer.
Also, I developed a variant of ShadowingTests, using the batch compiler,
to automate the expectations of how the shadowing should and shouldn't
work.