Skip to content

Conversation

@timtebeek
Copy link
Member

@timtebeek timtebeek commented Jan 12, 2026

@timtebeek
Copy link
Member Author

@timtebeek timtebeek moved this from In Progress to Ready to Review in OpenRewrite Jan 12, 2026
@timtebeek timtebeek merged commit 1890ce1 into main Jan 12, 2026
2 of 4 checks passed
@timtebeek timtebeek deleted the retain-nested-class-imports-in-ChangePackage branch January 12, 2026 19:38
@github-project-automation github-project-automation bot moved this from Ready to Review to Done in OpenRewrite Jan 12, 2026
knutwannheden added a commit that referenced this pull request Jan 14, 2026
* UUID generation fallback for Node version pre-14.17.0 (#6495)

* UUID generation fallback for Node version pre-14.17.0

* Apply suggestions from code review

* Use module-load-time selection for performance

* Polish

---------

Co-authored-by: Tim te Beek <tim@moderne.io>
Co-authored-by: Knut Wannheden <knut@moderne.io>

* Changing `AddDependencyVisitor` so it is able to broaden the scope of a direct dependency if needed (#6434)

* Allowing `AddDependency` to broaden the scope of existing dependency, provided you're requesting an equal or higher version number. If requesting same scope but higher version number, the version number will be upgraded.

* Dropping `import` scope validity in favour of `compile`, given `import` is only applicable for dependencies in `dependencyManagement`

Co-authored-by: Tim te Beek <tim@moderne.io>

---------

Co-authored-by: Tim te Beek <tim@moderne.io>

* Add style parameter to OrderImports. (#6496)

* Drop Lombok hint from RemoveUnusedImports class (#6500)

* Drop Lombok hint from RemoveUnusedImports class

Since we've supported Lombok for quite some time now.

* Also update recipes.csv

* In yaml `CopyValue`, invoke `UnfoldProperties` after `MergeYaml` (#6499)

* unit test with poc for UnfoldProperties

* use imperative CopyValue in unit test

* Invoke UnfoldProperties after MergeYaml

* Apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Slight polish

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Tim te Beek <tim@moderne.io>

* Allow adding comments to Maven plugins too

Fixes #6502

* JavaScript: Make visitor base clases sync and add async alternative

* Polish parser APIs

* More async cleanups

* JavaScript: Notify about parsed source files from `parseProject()`

* Polish object property shorthand

* Fix Prettier integration when calling it using sync API

* Altering check for `AddDependency` to compare versions differently when direct vs indirect dependency. (#6505)

* If transitive, actually just allow regardless of version, as per old behaviour.

* Changing the parsing of the `relativePath` for `parent` in the `MavenPomDownloader` to prevent the situation where `/` was producing `/\pom.xml` on Windows rather than `\pom.xml` (#6506)

* Claude/catalogue async apis u67 hy (#6507)

* Convert package-manager and related APIs from async to sync

- Convert runInstallInTempDir and runWorkspaceInstallInTempDir to use sync
  fs APIs (fs.mkdtempSync, fs.writeFileSync, fs.readFileSync, fs.rmSync)
- Convert runInstallIfNeeded callback from async to sync
- Convert updateNodeResolutionMarker to sync (was marked async with no awaits)
- Convert createLockFileEditor to use sync JsonVisitor and TreeVisitor
- Update add-dependency, upgrade-dependency-version, and
  upgrade-transitive-dependency-version recipes to use sync visitors
- Convert Result.diff() to sync (createTwoFilesPatch is already sync)

The package manager operations were unnecessarily async since the underlying
process spawning (spawnSync) was already synchronous. Only the file I/O was
async, which is negligible compared to the npm/yarn/pnpm install time.

* Remove unnecessary async from IsSourceFile.preVisit()

* Add async property to TreeVisitor and AsyncTreeVisitor

Add a readonly `async` property to both visitor base classes:
- TreeVisitor: async = false
- AsyncTreeVisitor: async = true

This allows runtime discrimination of sync vs async visitors via the
RecipeVisitor union type. Useful for sync-to-sync recipe composition
where a sync visitor wants to call another sync visitor without async
overhead.

* Lift async I/O out of visitors into editorWithData()

Refactor package-manager recipes to do async I/O (npm install) in
editorWithData() before returning the visitor, keeping visitors pure.

Changes:
- Add async runInstallInTempDirAsync() using spawn() and fs.promises
- Add async runWorkspaceInstallInTempDirAsync() for workspace support
- Refactor AddDependency, UpgradeDependencyVersion, and
  UpgradeTransitiveDependencyVersion to run package manager installs
  in editorWithData() before returning visitors
- Remove unused runInstallIfNeeded() helper function
- Visitors are now pure tree transformations with no I/O

This provides a cleaner separation of concerns:
- Async I/O happens in the recipe's async editor() method
- Visitors are pure, synchronous tree transformations using pre-computed data

* More sync visitors

* Simplify receivers by extending visitors

---------

Co-authored-by: Claude <noreply@anthropic.com>

* Bugfix

* Add back runInstallIfNeeded()

* Also parse `jrxml` as XML

Fixes #6512

* Update description for onlyIfUsing option

Clarified description for 'onlyIfUsing' option to specify its importance in multi-module projects.

Fixes #5795

* Retain nested class imports in `ChangePackage` (#6515)

Fixes #6513

* Add Python language support (#6508)

* Compact array RpcObjectData only for JS

* Less async test code

---------

Co-authored-by: Benjamin Muschko <benjamin.muschko@gmail.com>
Co-authored-by: Tim te Beek <tim@moderne.io>
Co-authored-by: Steve Elliott <steve@moderne.io>
Co-authored-by: Sam Snyder <sam@moderne.io>
Co-authored-by: David Grieve <david@moderne.io>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jonathan Schnéider <jkschneider@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

ChangePackage removes required imports for nested classes

3 participants