Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
/** Provides a mocking framework for the extension point registry. */
public final class ExtensionRegistryMock {

private static final Object LOCK = new Object();

private static IExtensionRegistry registry;
private static IExtensionRegistry registrySpy;
private static Multimap<String, IConfigurationElement> configurationElements = LinkedHashMultimap.create();
Expand All @@ -52,18 +54,20 @@ private ExtensionRegistryMock() {
* if the registry provider cannot be set
*/
@SuppressWarnings("restriction") // for accessing RegistryProviderFactory
public static synchronized void mockRegistry() {
if (registrySpy == null) {
registry = RegistryFactory.getRegistry();
registrySpy = spy(registry);
org.eclipse.core.internal.registry.RegistryProviderFactory.releaseDefault();
try {
RegistryFactory.setDefaultRegistryProvider(() -> {
return registrySpy;
});
} catch (CoreException e) {
// This shouldn't happen as the default was released.
throw new WrappedException(e);
public static void mockRegistry() {
synchronized (LOCK) {
if (registrySpy == null) {
registry = RegistryFactory.getRegistry();
registrySpy = spy(registry);
org.eclipse.core.internal.registry.RegistryProviderFactory.releaseDefault();
try {
RegistryFactory.setDefaultRegistryProvider(() -> {
return registrySpy;
});
} catch (CoreException e) {
// This shouldn't happen as the default was released.
throw new WrappedException(e);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ public String toString() {

}

private final Object lock = new Object();

private final JobFinder finder;
private final long waitTimeout;

Expand Down Expand Up @@ -183,17 +185,19 @@ public static JobMatcher registerNewJobByFamilyMatcher(final Object family) {
*
* @return the list of matching existing jobs
*/
public final synchronized List<Job> register() {
newJobs = Collections.synchronizedList(Lists.<Job> newArrayList());
jobQueue = new LinkedBlockingQueue<Job>();
Job.getJobManager().addJobChangeListener(this);
public final List<Job> register() {
synchronized (lock) {
newJobs = Collections.synchronizedList(Lists.<Job> newArrayList());
jobQueue = new LinkedBlockingQueue<Job>();
Job.getJobManager().addJobChangeListener(this);

// save list of existing jobs *after* adding job listener (in case jobs finish in the mean time)
existingJobs = ImmutableList.copyOf(finder.find());
finishedJobs = Collections.synchronizedList(Lists.<Job> newArrayList());
timeout = System.currentTimeMillis() + waitTimeout;
// save list of existing jobs *after* adding job listener (in case jobs finish in the mean time)
existingJobs = ImmutableList.copyOf(finder.find());
finishedJobs = Collections.synchronizedList(Lists.<Job> newArrayList());
timeout = System.currentTimeMillis() + waitTimeout;

return ImmutableList.copyOf(existingJobs);
return ImmutableList.copyOf(existingJobs);
}
}

/**
Expand Down Expand Up @@ -290,18 +294,22 @@ private Job getNextJob() throws InterruptedException {
}

@Override
public synchronized void scheduled(final IJobChangeEvent event) {
Job job = event.getJob();
if (finder.apply(job)) {
newJobs.add(job);
public void scheduled(final IJobChangeEvent event) {
synchronized (lock) {
Job job = event.getJob();
if (finder.apply(job)) {
newJobs.add(job);
}
}
}

@Override
public synchronized void done(final IJobChangeEvent event) {
Job job = event.getJob();
if (finder.apply(job)) {
jobQueue.add(job);
public void done(final IJobChangeEvent event) {
synchronized (lock) {
Job job = event.getJob();
if (finder.apply(job)) {
jobQueue.add(job);
}
}
}
}
4 changes: 4 additions & 0 deletions ddk-configuration/findbugs/exclusion-filter.xml
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,8 @@
<Match>
<Class name="~.*Activator.*" />
</Match>
<!-- Widening an override from protected to public is accepted, deliberate API design here. -->
<Match>
<Bug pattern="IAOM_DO_NOT_INCREASE_METHOD_ACCESSIBILITY" />
</Match>
</FindBugsFilter>