Skip to content

Commit 59ea85b

Browse files
committed
Fail if a workspace is disposed outside the manager
Currently one can obtain a workspace baseline and dispose it leading to hard to track errors. This now fails if someone tries to dispose the baseline without using the manager.
1 parent b127fb1 commit 59ea85b

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %pluginName
44
Bundle-SymbolicName: org.eclipse.pde.api.tools;singleton:=true
5-
Bundle-Version: 1.3.600.qualifier
5+
Bundle-Version: 1.3.700.qualifier
66
Bundle-Vendor: %providerName
77
Bundle-Localization: plugin
88
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.29.0,4.0.0)",

apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
128128
/**
129129
* The current workspace baseline
130130
*/
131-
private volatile IApiBaseline workspacebaseline;
131+
private volatile WorkspaceBaseline workspacebaseline;
132132

133133
/**
134134
* The default save location for persisting the cache from this manager.
@@ -548,7 +548,7 @@ public void stop() {
548548
}
549549
synchronized (this) {
550550
if (workspacebaseline != null) {
551-
workspacebaseline.dispose();
551+
workspacebaseline.disposeInternal();
552552
}
553553
}
554554
if (handlecache != null) {
@@ -620,12 +620,12 @@ public IApiBaseline getWorkspaceBaseline() {
620620
* the next request.
621621
*/
622622
public void disposeWorkspaceBaseline() {
623-
final IApiBaseline originalBaseline = workspacebaseline;
623+
final WorkspaceBaseline originalBaseline = workspacebaseline;
624624
if (originalBaseline == null) {
625625
return;
626626
}
627627
IJobFunction runnable = m -> {
628-
IApiBaseline oldBaseline = null;
628+
WorkspaceBaseline oldBaseline = null;
629629
synchronized (ApiBaselineManager.this) {
630630
if (workspacebaseline != null && originalBaseline == workspacebaseline) {
631631
if (ApiPlugin.DEBUG_BASELINE_MANAGER) {
@@ -637,7 +637,7 @@ public void disposeWorkspaceBaseline() {
637637
}
638638
}
639639
if (oldBaseline != null) {
640-
oldBaseline.dispose();
640+
oldBaseline.disposeInternal();
641641
}
642642
return Status.OK_STATUS;
643643
};
@@ -681,9 +681,9 @@ public boolean isConflicting(ISchedulingRule rule) {
681681
*
682682
* @return a new workspace {@link IApiBaseline} or <code>null</code>
683683
*/
684-
private IApiBaseline createWorkspaceBaseline() throws CoreException {
684+
private WorkspaceBaseline createWorkspaceBaseline() throws CoreException {
685685
long time = System.currentTimeMillis();
686-
IApiBaseline baseline = new WorkspaceBaseline();
686+
WorkspaceBaseline baseline = new WorkspaceBaseline();
687687
try {
688688
// populate it with only projects that are API aware
689689
List<IPluginModelBase> models = Arrays.asList(PluginRegistry.getWorkspaceModels());

apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/WorkspaceBaseline.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ public WorkspaceBaseline() {
5252

5353
@Override
5454
public void dispose() {
55+
throw new UnsupportedOperationException(
56+
"ApiBaselineManager.disposeWorkspaceBaseline() must be used to dispose the workspace baseline"); //$NON-NLS-1$
57+
}
58+
59+
/**
60+
* <b>Only public for technical reasons</b> do not call directly!
61+
*/
62+
public void disposeInternal() {
5563
doDispose();
5664
mismatch.clear();
5765
}

0 commit comments

Comments
 (0)