Bug 578257 - API job should cancel execution on disposed baseline, take
2
Added monitor to considerReference() too.
Change-Id: Ieb6d1843cea39615d1c364b46cc6168ee5d2b909
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Reviewed-on: https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/189798
Tested-by: PDE Bot <pde-bot@eclipse.org>
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalMethodReference.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalMethodReference.java
index 555199d..e0fd224 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalMethodReference.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalMethodReference.java
@@ -59,9 +59,9 @@
}
@Override
- public boolean considerReference(IReference reference) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
MethodKey key = new MethodKey(reference.getReferencedTypeName(), reference.getReferencedMemberName(), reference.getReferencedSignature(), true);
- if (super.considerReference(reference) && fIllegalMethods.containsKey(key)) {
+ if (super.considerReference(reference, monitor) && fIllegalMethods.containsKey(key)) {
retainReference(reference);
return true;
}
@@ -77,7 +77,7 @@
if (member instanceof IApiMethod) {
IApiMethod method = (IApiMethod) member;
if (method.isDefaultMethod()) {
- return considerReference(reference);
+ return considerReference(reference, monitor);
}
}
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
index 511017a..499c084 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
@@ -62,8 +62,8 @@
}
@Override
- public boolean considerReference(IReference reference) {
- if (super.considerReference(reference) && fIllegalTypes.containsKey(reference.getReferencedTypeName())) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
+ if (super.considerReference(reference, monitor) && fIllegalTypes.containsKey(reference.getReferencedTypeName())) {
retainReference(reference);
return true;
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
index 077aedb..9523c6d 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
@@ -160,7 +160,7 @@
}
@Override
- public boolean considerReference(IReference reference) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
return reference != null && (reference.getReferenceKind() & getReferenceKinds()) > 0;
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractTypeLeakDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractTypeLeakDetector.java
index 255433f..1bf3a20 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractTypeLeakDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractTypeLeakDetector.java
@@ -48,11 +48,11 @@
}
@Override
- public boolean considerReference(IReference reference) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
// consider the reference if the location the reference is made from is
// visible:
// i.e. a public or protected class in an API package
- if (super.considerReference(reference) && isNonAPIReference(reference)) {
+ if (super.considerReference(reference, monitor) && isNonAPIReference(reference)) {
IApiMember member = reference.getMember();
int modifiers = member.getModifiers();
if (((Flags.AccPublic | Flags.AccProtected) & modifiers) > 0) {
@@ -68,6 +68,7 @@
}
} catch (CoreException e) {
ApiPlugin.log(e.getStatus());
+ checkIfDisposed(reference.getMember().getApiComponent(), monitor);
}
}
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalAnnotationReferenceDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalAnnotationReferenceDetector.java
index f9cc96b..9c060df 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalAnnotationReferenceDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalAnnotationReferenceDetector.java
@@ -14,6 +14,7 @@
package org.eclipse.pde.api.tools.internal.builder;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.IAnnotatable;
import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.ISourceRange;
@@ -59,8 +60,8 @@
}
@Override
- public boolean considerReference(IReference reference) {
- return super.considerReference(reference);
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
+ return super.considerReference(reference, monitor);
}
@Override
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalFieldReferenceDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalFieldReferenceDetector.java
index 8279f46..0868fa9 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalFieldReferenceDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalFieldReferenceDetector.java
@@ -78,9 +78,9 @@
}
@Override
- public boolean considerReference(IReference reference) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
MethodKey key = new MethodKey(reference.getReferencedTypeName(), reference.getReferencedMemberName(), reference.getReferencedSignature(), true);
- if ((super.considerReference(reference) && fIllegalFields.containsKey(key)) || isEnclosedBy(reference.getReferencedTypeName(), fIllegalTypes.keySet())) {
+ if ((super.considerReference(reference, monitor) && fIllegalFields.containsKey(key)) || isEnclosedBy(reference.getReferencedTypeName(), fIllegalTypes.keySet())) {
retainReference(reference);
return true;
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalImplementsProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalImplementsProblemDetector.java
index 006b04b..1edde8c 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalImplementsProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalImplementsProblemDetector.java
@@ -58,9 +58,9 @@
}
@Override
- public boolean considerReference(IReference reference) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
try {
- if (super.considerReference(reference)) {
+ if (super.considerReference(reference, monitor)) {
return true;
}
IApiType type = (IApiType) reference.getMember();
@@ -80,6 +80,7 @@
if (ApiPlugin.DEBUG_PROBLEM_DETECTOR) {
ApiPlugin.log(ce);
}
+ checkIfDisposed(reference.getMember().getApiComponent(), monitor);
}
return false;
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalMethodReferenceDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalMethodReferenceDetector.java
index 9747421..d120b09 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalMethodReferenceDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalMethodReferenceDetector.java
@@ -52,8 +52,8 @@
}
@Override
- public boolean considerReference(IReference reference) {
- if (super.considerReference(reference)) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
+ if (super.considerReference(reference, monitor)) {
return true;
}
if (isEnclosedBy(reference.getReferencedTypeName(), fIllegalTypes.keySet())) {
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/MethodLeakDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/MethodLeakDetector.java
index ae90789..43e5ad6 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/MethodLeakDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/MethodLeakDetector.java
@@ -139,8 +139,8 @@
}
@Override
- public boolean considerReference(IReference reference) {
- if (super.considerReference(reference) && isNonAPIReference(reference)) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
+ if (super.considerReference(reference, monitor) && isNonAPIReference(reference)) {
IApiMember member = reference.getMember();
if (member != null && matchesSourceModifiers(member) && matchesSourceApiRestrictions(member)) {
retainReference(reference);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
index 6053d3f..7db08bf 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
@@ -97,13 +97,19 @@
List<IReference> references = type.extractReferences(fAllReferenceKinds, null);
// keep potential matches
for (IReference ref : references) {
+ if (fMonitor.isCanceled()) {
+ break;
+ }
// compute index of interested problem detectors
int index = getLog2(ref.getReferenceKind());
IApiProblemDetector[] detectors = fIndexedDetectors[index];
boolean added = false;
if (detectors != null) {
for (IApiProblemDetector detector : detectors) {
- if (detector.considerReference(ref)) {
+ if (fMonitor.isCanceled()) {
+ break;
+ }
+ if (detector.considerReference(ref, fMonitor)) {
if (!added) {
fReferences.add(ref);
added = true;
@@ -114,6 +120,7 @@
}
} catch (CoreException e) {
fStatus.add(e.getStatus());
+ AbstractProblemDetector.checkIfDisposed(classFile.getApiComponent(), fMonitor);
}
}
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
index b305f8e..c783a43 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
@@ -367,7 +367,7 @@
}
@Override
- public boolean considerReference(IReference reference) {
+ public boolean considerReference(IReference reference, IProgressMonitor monitor) {
try {
IApiComponent apiComponent = reference.getMember().getApiComponent();
IApiBaseline baseline = apiComponent.getBaseline();
@@ -394,6 +394,7 @@
}
} catch (CoreException e) {
ApiPlugin.log(e);
+ checkIfDisposed(reference.getMember().getApiComponent(), monitor);
}
return false;
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/builder/IApiProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/builder/IApiProblemDetector.java
index 62f0da8..d9a69e0 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/builder/IApiProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/builder/IApiProblemDetector.java
@@ -38,9 +38,10 @@
* for further analysis once references have been resolved.
*
* @param reference potential problem
+ * @param monitor the monitor to report progress.
* @return whether the unresolved reference is a potential problem
*/
- public boolean considerReference(IReference reference);
+ public boolean considerReference(IReference reference, IProgressMonitor monitor);
/**
* Returns a list of any problems detected after analyzing potential
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
index a88d015..e92148f 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
@@ -21,6 +21,7 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.jdt.core.Flags;
+import org.eclipse.pde.api.tools.internal.builder.AbstractProblemDetector;
import org.eclipse.pde.api.tools.internal.comparator.ClassFileComparator;
import org.eclipse.pde.api.tools.internal.comparator.Delta;
import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
@@ -786,11 +787,13 @@
}
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(container.getApiComponent(), iterationMonitor);
}
}
});
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(container.getApiComponent(), loopMonitor);
}
}
}
@@ -908,11 +911,13 @@
}
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(container.getApiComponent(), apiContainerIterationMonitor);
}
}
});
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(container.getApiComponent(), apiContainerIterationMonitor);
}
}
}
@@ -952,11 +957,13 @@
Util.getComponentVersionsId(component2) }));
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(container.getApiComponent(), iterationMonitor);
}
}
});
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(container.getApiComponent(), iterationMonitor);
}
}
}
@@ -1008,11 +1015,13 @@
Util.getComponentVersionsId(component) }));
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(container.getApiComponent(), typeContainerIterationMonitor);
}
}
});
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(container.getApiComponent(), typeContainerIterationMonitor);
}
}
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/CompareApiScopeVisitor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/CompareApiScopeVisitor.java
index 0610a2a..348d3e9 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/CompareApiScopeVisitor.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/CompareApiScopeVisitor.java
@@ -17,6 +17,7 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.pde.api.tools.internal.builder.AbstractProblemDetector;
import org.eclipse.pde.api.tools.internal.comparator.Delta;
import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
import org.eclipse.pde.api.tools.internal.provisional.model.ApiScopeVisitor;
@@ -79,6 +80,7 @@
compareApiTypeRoot(typeroot);
} catch (CoreException e) {
ApiPlugin.log(e);
+ AbstractProblemDetector.checkIfDisposed(typeroot.getApiComponent(), localMonitor);
}
}
});
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java
index 0dc3de7..3a631f5 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java
@@ -246,7 +246,7 @@
if (monitor.isCanceled()) {
break;
}
- if (detector.considerReference(reference)) {
+ if (detector.considerReference(reference, monitor)) {
Reference ref = (Reference) reference;
ref.setFlags(IReference.F_ILLEGAL);
try {