Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVikas Chandra2020-12-17 09:08:09 +0000
committerVikas Chandra2020-12-17 09:08:09 +0000
commit733334560083204c878cb0d94833586939f82172 (patch)
treefa76760ffc4da4c07c35d560c62fe0d074aa150d
parent41c3dd0f2350eee5a4dc4afde5420d56590612d5 (diff)
downloadeclipse.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>
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java51
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/WorkspaceBaseline.java25
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<>();

Back to the top