diff options
| author | Vikas Chandra | 2020-12-17 09:08:09 +0000 |
|---|---|---|
| committer | Vikas Chandra | 2020-12-17 09:08:09 +0000 |
| commit | 733334560083204c878cb0d94833586939f82172 (patch) | |
| tree | fa76760ffc4da4c07c35d560c62fe0d074aa150d | |
| parent | 41c3dd0f2350eee5a4dc4afde5420d56590612d5 (diff) | |
| download | eclipse.pde.ui-733334560083204c878cb0d94833586939f82172.tar.gz eclipse.pde.ui-733334560083204c878cb0d94833586939f82172.tar.xz eclipse.pde.ui-733334560083204c878cb0d94833586939f82172.zip | |
Bug 569771 - checkBaselineMismatch is recalculated multiple times forI20201221-1800I20201220-1800I20201219-1800I20201218-1800I20201217-1800
the same workspace and baseline combination
Change-Id: Ic629b7c5e3eeb6778d086bc5c6604a0e31fc7991
Signed-off-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
2 files changed, 69 insertions, 7 deletions
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java index 38d666b7fd..41031f12bd 100644 --- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java +++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java @@ -79,6 +79,7 @@ import org.eclipse.pde.api.tools.internal.IApiCoreConstants; import org.eclipse.pde.api.tools.internal.comparator.Delta; import org.eclipse.pde.api.tools.internal.model.ProjectComponent; import org.eclipse.pde.api.tools.internal.model.StubApiComponent; +import org.eclipse.pde.api.tools.internal.model.WorkspaceBaseline; import org.eclipse.pde.api.tools.internal.problems.ApiProblemFactory; import org.eclipse.pde.api.tools.internal.problems.ApiProblemFilter; import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin; @@ -2521,6 +2522,42 @@ public class BaseApiAnalyzer implements IApiAnalyzer { * project in the workspace */ public void checkBaselineMismatch(IApiBaseline baseline, IApiBaseline workspaceBaseline) { + int severityLevel = ApiPlugin.getDefault().getSeverityLevel(IApiProblemTypes.MISSING_DEFAULT_API_BASELINE, + null); + if (severityLevel == ApiPlugin.SEVERITY_IGNORE) { + return; + } + if (workspaceBaseline instanceof WorkspaceBaseline && baseline != null) { + // if this workspace has been processed before for this baseline, get it from + // past processing + if (((WorkspaceBaseline) workspaceBaseline).containsBaseline(baseline)) { + IApiProblem pro = ((WorkspaceBaseline) workspaceBaseline).getProblem(baseline); + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + try { + IMarker[] findMarkers = root.findMarkers(IApiMarkerConstants.DEFAULT_API_BASELINE_PROBLEM_MARKER, + false, IResource.DEPTH_ZERO); + if (pro != null && findMarkers.length == 1) { + return; // since we have baseline, so cant be missing baseline + } + if (pro == null && findMarkers.length == 0) { + return; + } + if (pro == null && findMarkers.length == 1) { + for (IMarker iMarker : findMarkers) { + iMarker.delete(); + } + return; + } + if (pro != null && findMarkers.length == 0) { + addProblem(pro); + return; + } + } catch (CoreException e) { + ApiPlugin.log(e); + } + return; + } + } IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); try { IMarker[] findMarkers = root.findMarkers(IApiMarkerConstants.DEFAULT_API_BASELINE_PROBLEM_MARKER, false, @@ -2534,11 +2571,7 @@ public class BaseApiAnalyzer implements IApiAnalyzer { if (baseline == null || workspaceBaseline == null) { return; } - int severityLevel = ApiPlugin.getDefault().getSeverityLevel(IApiProblemTypes.MISSING_DEFAULT_API_BASELINE, - null); - if (severityLevel == ApiPlugin.SEVERITY_IGNORE) { - return; - } + IApiComponent[] workspacesComponents = workspaceBaseline.getApiComponents(); boolean found = false; for (IApiComponent iApiComponent : workspacesComponents) { @@ -2549,15 +2582,21 @@ public class BaseApiAnalyzer implements IApiAnalyzer { break; } } + } if (found) { + if (workspaceBaseline instanceof WorkspaceBaseline) { + ((WorkspaceBaseline) workspaceBaseline).putMismatchInfo(baseline, null); + } return; } - IApiProblem problem = ApiProblemFactory.newApiBaselineProblem(Path.EMPTY.toString(), new String[] { IApiMarkerConstants.API_MARKER_ATTR_ID }, new Object[] { Integer.valueOf(IApiMarkerConstants.DEFAULT_API_BASELINE_MARKER_ID) }, IElementDescriptor.RESOURCE, IApiProblem.API_BASELINE_MISMATCH); + if (workspaceBaseline instanceof WorkspaceBaseline) { + ((WorkspaceBaseline) workspaceBaseline).putMismatchInfo(baseline, problem); + } addProblem(problem); } diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/WorkspaceBaseline.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/WorkspaceBaseline.java index 987a4e0d27..9d173a26e0 100644 --- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/WorkspaceBaseline.java +++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/WorkspaceBaseline.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2013 IBM Corporation and others. + * Copyright (c) 2009, 2020 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -14,12 +14,15 @@ package org.eclipse.pde.api.tools.internal.model; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; import org.eclipse.core.runtime.CoreException; import org.eclipse.osgi.service.resolver.State; import org.eclipse.pde.api.tools.internal.ApiBaselineManager; +import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline; import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent; +import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem; import org.eclipse.pde.internal.core.PDECore; /** @@ -29,6 +32,10 @@ import org.eclipse.pde.internal.core.PDECore; */ public class WorkspaceBaseline extends ApiBaseline { + // If workspace is changed, then WorkspaceBaseline is disposed and a + // new WorkspaceBaseline is created, hence mismatch problem can be stored + // with a workspace baseline + public HashMap<IApiBaseline, IApiProblem> mismatch = new HashMap<>(); /** * Constructor */ @@ -39,6 +46,7 @@ public class WorkspaceBaseline extends ApiBaseline { @Override public void dispose() { doDispose(); + mismatch.clear(); } @Override @@ -46,6 +54,21 @@ public class WorkspaceBaseline extends ApiBaseline { return PDECore.getDefault().getModelManager().getState().getState(); } + + public boolean containsBaseline(IApiBaseline b) { + return mismatch.containsKey(b); + } + + // can be null showing no problem + public IApiProblem getProblem(IApiBaseline b) { + return mismatch.get(b); + } + + public void putMismatchInfo(IApiBaseline baseline, IApiProblem problem) { + mismatch.put(baseline, problem); + + } + @Override public void addApiComponents(IApiComponent[] components) throws CoreException { HashSet<String> ees = new HashSet<>(); |
