Skip to content

(via ryandens): Use getOrElse(emptyMap()) for agentOptions to avoid IllegalStateExceptio - #391

Merged
macroscopeapp[bot] merged 3 commits into
worktree-javaagent-options-issue-50from
macroscope/worktree-javaagent-options-issue-50
Jul 23, 2026
Merged

macroscopeapp[bot] merged 3 commits into
worktree-javaagent-options-issue-50from
macroscope/worktree-javaagent-options-issue-50

Conversation

@macroscopeapp

@macroscopeapp macroscopeapp Bot commented Jul 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes an IllegalStateException that occurs when agentOptions is not explicitly configured in the Jib extension.

Changes

  • Updated JavaagentJibExtension.kt to use getOrElse(emptyMap()) instead of get() when accessing agentOptions
  • When agentOptions is not configured, the code now gracefully defaults to an empty map rather than throwing an exception

Problem

Previously, calling extraConfig.get().agentOptions.get() would throw an IllegalStateException if the user had not set any agent options in their configuration. This made agentOptions effectively required even though it should be optional.

Solution

Using getOrElse(emptyMap()) provides a safe default value, making agentOptions truly optional as intended.

Note

Macroscope: Fix It For Me

Activity

Currently: Auto-merged de8ee7d

Previously
  • Waiting on checks
  • Pushed ce934b7
  • Action failed: Validate
  • Waiting on checks
  • Pushed c882d5a
  • Working on next commit...
  • Waiting on checks
  • Pushed 089c78f

Note

Fix IllegalStateException by keying agent options on canonical file path

  • Fixes a runtime IllegalStateException in JavaagentJibExtension by replacing Provider.get() with Provider.getOrElse(emptyMap()) when no agentOptions are configured.
  • Changes AgentOptionsResolver.optionsByFileName to optionsByFilePath, keying the options map by each artifact's canonical file path instead of its file name. All consumers (JavaForkOptionsConfigurer, JavaagentAwareStartScriptGenerator, Jib plugin, run/test/distribution plugins) are updated to match.
  • Behavioral Change: agent option lookups in JVM fork args and generated start scripts now use canonical paths; configs that relied on file-name keying will need to be re-evaluated if duplicate file names exist across different directories.

Macroscope summarized ce934b7.

@macroscopeapp
macroscopeapp Bot merged commit de8ee7d into worktree-javaagent-options-issue-50 Jul 23, 2026
4 checks passed
@macroscopeapp
macroscopeapp Bot deleted the macroscope/worktree-javaagent-options-issue-50 branch July 23, 2026 20:54
ryandens pushed a commit that referenced this pull request Oct 17, 2026
…llegalStateExceptio (#391)

## Summary

Fixes an `IllegalStateException` that occurs when `agentOptions` is not
explicitly configured in the Jib extension.

## Changes

- Updated `JavaagentJibExtension.kt` to use `getOrElse(emptyMap())`
instead of `get()` when accessing `agentOptions`
- When `agentOptions` is not configured, the code now gracefully
defaults to an empty map rather than throwing an exception

## Problem

Previously, calling `extraConfig.get().agentOptions.get()` would throw
an `IllegalStateException` if the user had not set any agent options in
their configuration. This made `agentOptions` effectively required even
though it should be optional.

## Solution

Using `getOrElse(emptyMap())` provides a safe default value, making
`agentOptions` truly optional as intended.

<!-- Macroscope (Fix It For Me) template starts here -->
> [!NOTE]
> ### Macroscope: _Fix It For Me_
> - This PR originated from [this
comment](https://github.com/ryandens/javaagent-gradle-plugin/pull/379/files#r3641209014)
in #379.
> - Since auto-merge is on, Macroscope will merge this PR after waiting
for checks to pass.
> - If you'd rather not wait, you can always merge this yourself but
**no further action from you is currently needed**.
> - You can also @mention Macroscope in this PR to request further
changes.
>
> #### Activity
> Currently: <!-- Macroscope (Fix It For Me) current status starts here
-->_Waiting on checks_<!-- Macroscope (Fix It For Me) current status
ends here -->
>
> <details>
> <summary>Previously</summary>
>
> <!-- Macroscope (Fix It For Me) previous status starts here -->
> - Pushed ce934b7
> - Action failed: Validate
> - Waiting on checks
> - Pushed c882d5a
> - Working on next commit...
> - Waiting on checks
> - Pushed 089c78f
> <!-- Macroscope (Fix It For Me) previous status ends here -->
>
> </details>

----
<!-- Macroscope (Fix It For Me) template ends here -->
<!-- Macroscope's pull request summary starts here -->
<!-- Macroscope will only edit the content between these invisible
markers, and the markers themselves will not be visible in the GitHub
rendered markdown. -->
<!-- If you delete either of the start / end markers from your PR's
description, Macroscope will append its summary at the bottom of the
description. -->
> [!NOTE]
> ### Fix `IllegalStateException` by keying agent options on canonical
file path
> - Fixes a runtime `IllegalStateException` in `JavaagentJibExtension`
by replacing `Provider.get()` with `Provider.getOrElse(emptyMap())` when
no `agentOptions` are configured.
> - Changes `AgentOptionsResolver.optionsByFileName` to
`optionsByFilePath`, keying the options map by each artifact's canonical
file path instead of its file name. All consumers
(`JavaForkOptionsConfigurer`, `JavaagentAwareStartScriptGenerator`, Jib
plugin, run/test/distribution plugins) are updated to match.
> - Behavioral Change: agent option lookups in JVM fork args and
generated start scripts now use canonical paths; configs that relied on
file-name keying will need to be re-evaluated if duplicate file names
exist across different directories.
>
> <!-- Macroscope's review summary starts here -->
>
> <sup><a href="https://app.macroscope.com">Macroscope</a> summarized
ce934b7.</sup>
> <!-- Macroscope's review summary ends here -->
>
<!-- macroscope-ui-refresh -->
<!-- Macroscope's pull request summary ends here -->

---------

Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
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.

1 participant