Skip to content

Commit

Permalink
Remove unmodifiable collection wrappers in ResolveContext
Browse files Browse the repository at this point in the history
This fixes #700 (Java is unhelpful and the Collections.unmodifiableList etc
methods don't check whether the thing is already wrapped).

These were just an assertion basically intended to find any accidental
modification of these collections, so not essential.
  • Loading branch information
havocp committed Jul 24, 2020
1 parent e0984d4 commit 4739cba
Showing 1 changed file with 6 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,12 @@ final class ResolveContext {
this.memos = memos;
this.options = options;
this.restrictToChild = restrictToChild;
this.resolveStack = Collections.unmodifiableList(resolveStack);
this.cycleMarkers = Collections.unmodifiableSet(cycleMarkers);
// we don't defensively copy/wrap these because Collections.unmodifiableList etc.
// nest infinitely in a way that causes stack overflow (they don't check to avoid
// multiple wrappers). But they should be treated as immutable because they end
// up shared between multiple ResolveContext.
this.resolveStack = resolveStack;
this.cycleMarkers = cycleMarkers;
}

private static Set<AbstractConfigValue> newCycleMarkers() {
Expand Down

0 comments on commit 4739cba

Please sign in to comment.