Fixes for jdk providers#104
Conversation
📝 WalkthroughWalkthroughThis PR refactors JDK provider folder acceptance logic by removing format validation from the base class and delegating it to subclasses, centralizes JDK root path resolution across providers with new ChangesJDK Provider Refactoring and Windows Discovery
🎯 3 (Moderate) | ⏱️ ~25 minutes
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning Tools execution failed with the following error: Failed to run tools: 13 INTERNAL: Received RST_STREAM with code 2 (Internal server error) Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/main/java/dev/jbang/devkitman/jdkproviders/JBangJdkProvider.java`:
- Around line 91-92: The boolean expression currently allows parseToInt(...) > 0
to return true even when super.acceptFolder(jdkFolder) is false; update the
logic in JBangJdkProvider.acceptFolder so super.acceptFolder(jdkFolder) is
required and grouped with the ID checks by changing the expression to require
super.acceptFolder(jdkFolder) && (isValidId(jdkFolder.getFileName().toString())
|| JavaUtils.parseToInt(jdkFolder.getFileName().toString(), 0) > 0); this
ensures super.acceptFolder(...) is evaluated first and both ID or numeric checks
are applied only when the superclass accepts the folder.
In `@src/main/java/dev/jbang/devkitman/jdkproviders/WindowsJdkProvider.java`:
- Around line 42-44: The WindowsJdkProvider constructor accepts a RegistryReader
annotated `@NonNull` but doesn't guard at runtime; add an explicit null check in
the WindowsJdkProvider(`@NonNull` RegistryReader registryReader) constructor
(e.g., use Objects.requireNonNull or an if-check) to validate registryReader and
throw a clear NPE/IllegalArgumentException so callers fail fast instead of
deferring to listInstalled() when registryReader is used.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 43ce00cb-7641-4d5e-b218-e9321bfb4e31
📒 Files selected for processing (17)
src/main/java/dev/jbang/devkitman/jdkproviders/BaseFoldersJdkProvider.javasrc/main/java/dev/jbang/devkitman/jdkproviders/JBangJdkProvider.javasrc/main/java/dev/jbang/devkitman/jdkproviders/LinkedJdkProvider.javasrc/main/java/dev/jbang/devkitman/jdkproviders/LinuxJdkProvider.javasrc/main/java/dev/jbang/devkitman/jdkproviders/MiseJdkProvider.javasrc/main/java/dev/jbang/devkitman/jdkproviders/ScoopJdkProvider.javasrc/main/java/dev/jbang/devkitman/jdkproviders/SdkmanJdkProvider.javasrc/main/java/dev/jbang/devkitman/jdkproviders/WindowsJdkProvider.javasrc/main/resources/META-INF/services/dev.jbang.devkitman.JdkDiscoverysrc/test/java/dev/jbang/devkitman/TestJdkProviders.javasrc/test/java/dev/jbang/devkitman/jdkproviders/ExternalJdkProviderTest.javasrc/test/java/dev/jbang/devkitman/jdkproviders/JavaHomeJdkProviderTest.javasrc/test/java/dev/jbang/devkitman/jdkproviders/MiseJdkProviderTest.javasrc/test/java/dev/jbang/devkitman/jdkproviders/MultiHomeJdkProviderTest.javasrc/test/java/dev/jbang/devkitman/jdkproviders/PathJdkProviderTest.javasrc/test/java/dev/jbang/devkitman/jdkproviders/ScoopJdkProviderTest.javasrc/test/java/dev/jbang/devkitman/jdkproviders/WindowsJdkProviderTest.java
| public WindowsJdkProvider(@NonNull RegistryReader registryReader) { | ||
| this.registryReader = registryReader; | ||
| } |
There was a problem hiding this comment.
Enforce non-null RegistryReader in the constructor.
@NonNull is not a runtime guard. If null is passed, the failure is deferred until dereference in listInstalled() (Line 70), making diagnosis harder.
Suggested fix
public WindowsJdkProvider(`@NonNull` RegistryReader registryReader) {
- this.registryReader = registryReader;
+ this.registryReader = Objects.requireNonNull(registryReader, "registryReader");
}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/main/java/dev/jbang/devkitman/jdkproviders/WindowsJdkProvider.java`
around lines 42 - 44, The WindowsJdkProvider constructor accepts a
RegistryReader annotated `@NonNull` but doesn't guard at runtime; add an explicit
null check in the WindowsJdkProvider(`@NonNull` RegistryReader registryReader)
constructor (e.g., use Objects.requireNonNull or an if-check) to validate
registryReader and throw a clear NPE/IllegalArgumentException so callers fail
fast instead of deferring to listInstalled() when registryReader is used.
Summary by CodeRabbit
New Features
Bug Fixes
Tests