Compare commits
1 Commits
release@1.
...
release@1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
90efd93b72
|
13
.classpath
13
.classpath
@@ -13,19 +13,6 @@
|
|||||||
<attribute name="test" value="true"/>
|
<attribute name="test" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="src" output="bin/main" path="src/main/resources">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="gradle_scope" value="main"/>
|
|
||||||
<attribute name="gradle_used_by_scope" value="main,test"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="src" output="bin/test" path="src/test/resources">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="gradle_scope" value="test"/>
|
|
||||||
<attribute name="gradle_used_by_scope" value="test"/>
|
|
||||||
<attribute name="test" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21/"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21/"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
|
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
|
||||||
<classpathentry kind="output" path="bin/default"/>
|
<classpathentry kind="output" path="bin/default"/>
|
||||||
|
|||||||
@@ -85,6 +85,46 @@ public enum Ctx implements CtxInterface {
|
|||||||
return contexts.computeIfAbsent(name, k -> new CtxInstance());
|
return contexts.computeIfAbsent(name, k -> new CtxInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a named context previously created via {@link #getContext(String)}.
|
||||||
|
* <p>
|
||||||
|
* The context is atomically removed from the internal registry and then
|
||||||
|
* {@linkplain CtxInterface#clear() cleared} to release stored values and
|
||||||
|
* listener references. This operation is thread-safe and idempotent: if the
|
||||||
|
* specified context does not exist, the method returns {@code false} and
|
||||||
|
* performs no action.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Calling {@code getContext(name)} again after a successful removal will create
|
||||||
|
* a brand-new, empty context. The default/global context represented by
|
||||||
|
* {@link #INSTANCE} is not affected.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param name the name of the context to remove; must not be {@code null} or
|
||||||
|
* blank
|
||||||
|
* @return {@code true} if a context with the given name existed and was
|
||||||
|
* removed; {@code false} otherwise
|
||||||
|
* @throws IllegalArgumentException if {@code name} is {@code null} or blank
|
||||||
|
* @implNote Uses {@link ConcurrentHashMap#remove(Object)} for atomic removal,
|
||||||
|
* then invokes {@link CtxInterface#clear()} on the removed instance.
|
||||||
|
* @since 2025.08
|
||||||
|
*/
|
||||||
|
public boolean removeContext(String name) {
|
||||||
|
if (name == null || name.isBlank()) {
|
||||||
|
throw new IllegalArgumentException("name must not be null or blank");
|
||||||
|
}
|
||||||
|
CtxInterface ctx = contexts.remove(name);
|
||||||
|
final boolean existed = ctx != null;
|
||||||
|
if (existed) {
|
||||||
|
try {
|
||||||
|
ctx.clear();
|
||||||
|
} catch (RuntimeException ignore) { // NOPMD
|
||||||
|
// Best-effort cleanup; deregistration already succeeded.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return existed;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the set of names for all currently registered contexts.
|
* Returns the set of names for all currently registered contexts.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user