mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-30 12:25:35 +02:00
Code cleanup in DSF examples.
- Added @Override where necessary. - Added src_ant to source directories in build.properties - Fixed resource leaks - Added type parameters where missing (e.g. Vector in PreProcessor.java) - Removed unused imports Change-Id: I28c7e295891833f9b561975da0adc92d55f2e048 Signed-off-by: Jesper Eskilson <jesper.eskilson@iar.com>
This commit is contained in:
parent
a08b9582d3
commit
92cd626895
14 changed files with 167 additions and 101 deletions
|
@ -420,32 +420,33 @@ public class PDAVirtualMachine {
|
|||
pdaVM.run();
|
||||
}
|
||||
|
||||
PDAVirtualMachine(String inputFile, boolean debug, int commandPort, int eventPort) throws IOException {
|
||||
fFilename = inputFile;
|
||||
PDAVirtualMachine(String inputFile, boolean debug, int commandPort, int eventPort) throws IOException {
|
||||
fFilename = inputFile;
|
||||
|
||||
// Load all the code into memory
|
||||
FileReader fileReader = new FileReader(inputFile);
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
List<String> code = new LinkedList<String>();
|
||||
int c = fileReader.read();
|
||||
while (c != -1) {
|
||||
if (c == '\n') {
|
||||
code.add(stringWriter.toString().trim());
|
||||
stringWriter = new StringWriter();
|
||||
} else {
|
||||
stringWriter.write(c);
|
||||
}
|
||||
c = fileReader.read();
|
||||
}
|
||||
code.add(stringWriter.toString().trim());
|
||||
fCode = code.toArray(new String[code.size()]);
|
||||
// Load all the code into memory
|
||||
try (FileReader fileReader = new FileReader(inputFile)) {
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
List<String> code = new LinkedList<String>();
|
||||
int c = fileReader.read();
|
||||
while (c != -1) {
|
||||
if (c == '\n') {
|
||||
code.add(stringWriter.toString().trim());
|
||||
stringWriter = new StringWriter();
|
||||
} else {
|
||||
stringWriter.write(c);
|
||||
}
|
||||
c = fileReader.read();
|
||||
}
|
||||
code.add(stringWriter.toString().trim());
|
||||
fCode = code.toArray(new String[code.size()]);
|
||||
|
||||
fLabels = mapLabels(fCode);
|
||||
fLabels = mapLabels(fCode);
|
||||
|
||||
fDebug = debug;
|
||||
fCommandPort = commandPort;
|
||||
fEventPort = eventPort;
|
||||
}
|
||||
fDebug = debug;
|
||||
fCommandPort = commandPort;
|
||||
fEventPort = eventPort;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the labels map
|
||||
|
|
|
@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
|
|||
Bundle-Name: %pluginName
|
||||
Bundle-Vendor: %providerName
|
||||
Bundle-SymbolicName: org.eclipse.cdt.examples.dsf;singleton:=true
|
||||
Bundle-Version: 2.1.0.qualifier
|
||||
Bundle-Version: 2.2.0.qualifier
|
||||
Bundle-Activator: org.eclipse.cdt.examples.dsf.DsfExamplesPlugin
|
||||
Bundle-Localization: plugin
|
||||
Require-Bundle: org.eclipse.ui,
|
||||
|
|
|
@ -8,7 +8,8 @@
|
|||
# Contributors:
|
||||
# Wind River Systems - initial API and implementation
|
||||
###############################################################################
|
||||
source.. = src/
|
||||
source.. = src/,\
|
||||
src_ant/
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.,\
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<version>2.1.0-SNAPSHOT</version>
|
||||
<version>2.2.0-SNAPSHOT</version>
|
||||
<artifactId>org.eclipse.cdt.examples.dsf</artifactId>
|
||||
<packaging>eclipse-plugin</packaging>
|
||||
</project>
|
||||
|
|
|
@ -47,9 +47,9 @@ import org.apache.tools.ant.util.FileUtils;
|
|||
*/
|
||||
public class PreProcessor extends Task {
|
||||
|
||||
private Vector fFileSets = new Vector();
|
||||
private Vector<FileSet> fFileSets = new Vector<>();
|
||||
private File fDestDir = null;
|
||||
private Set fSymbols = new HashSet();
|
||||
private Set<String> fSymbols = new HashSet<>();
|
||||
private FileUtils fUtils = FileUtils.getFileUtils();
|
||||
|
||||
// possible states
|
||||
|
@ -116,7 +116,7 @@ public class PreProcessor extends Task {
|
|||
throw new BuildException("destdir does not exist: " + fDestDir.getAbsolutePath());
|
||||
}
|
||||
StringBuffer buf = new StringBuffer("Symbols: ");
|
||||
String[] symbols = (String[]) fSymbols.toArray(new String[fSymbols.size()]);
|
||||
String[] symbols = fSymbols.toArray(new String[fSymbols.size()]);
|
||||
for (int i = 0; i < symbols.length; i++) {
|
||||
String symbol = symbols[i];
|
||||
buf.append(symbol);
|
||||
|
@ -126,9 +126,9 @@ public class PreProcessor extends Task {
|
|||
}
|
||||
log(buf.toString());
|
||||
|
||||
Iterator fileSets = fFileSets.iterator();
|
||||
Iterator<FileSet> fileSets = fFileSets.iterator();
|
||||
while (fileSets.hasNext()) {
|
||||
FileSet fileSet = (FileSet) fileSets.next();
|
||||
FileSet fileSet = fileSets.next();
|
||||
DirectoryScanner scanner = fileSet.getDirectoryScanner(getProject());
|
||||
String[] includedFiles = scanner.getIncludedFiles();
|
||||
File baseDir = fileSet.getDir(getProject());
|
||||
|
@ -188,9 +188,7 @@ public class PreProcessor extends Task {
|
|||
* @return
|
||||
*/
|
||||
public String preProcessFile(File srcFile, String strip) {
|
||||
try {
|
||||
FileReader fileReader = new FileReader(srcFile);
|
||||
BufferedReader reader = new BufferedReader(fileReader);
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(srcFile))) {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
String line = reader.readLine();
|
||||
String activeSymbol = null;
|
||||
|
|
|
@ -80,11 +80,13 @@ public class ACPMSumDataGenerator
|
|||
}
|
||||
}
|
||||
|
||||
public void getCount(final DataRequestMonitor<Integer> rm) {
|
||||
@Override
|
||||
public void getCount(final DataRequestMonitor<Integer> rm) {
|
||||
// Artificially delay the retrieval of the sum data to simulate
|
||||
// real processing time.
|
||||
fExecutor.schedule( new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
// Create the transaction here to put all the ugly
|
||||
// code in one place.
|
||||
new Transaction<Integer>() {
|
||||
|
@ -129,11 +131,13 @@ public class ACPMSumDataGenerator
|
|||
return maxCount;
|
||||
}
|
||||
|
||||
public void getValue(final int index, final DataRequestMonitor<Integer> rm)
|
||||
@Override
|
||||
public void getValue(final int index, final DataRequestMonitor<Integer> rm)
|
||||
{
|
||||
// Add a processing delay.
|
||||
fExecutor.schedule( new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
new Transaction<Integer>() {
|
||||
@Override
|
||||
protected Integer process()
|
||||
|
@ -175,7 +179,8 @@ public class ACPMSumDataGenerator
|
|||
return sum;
|
||||
}
|
||||
|
||||
public void shutdown(final RequestMonitor rm) {
|
||||
@Override
|
||||
public void shutdown(final RequestMonitor rm) {
|
||||
for (DataGeneratorCacheManager dataGeneratorCM : fDataGeneratorCMs) {
|
||||
dataGeneratorCM.getDataGenerator().removeListener(this);
|
||||
dataGeneratorCM.dispose();
|
||||
|
@ -184,33 +189,39 @@ public class ACPMSumDataGenerator
|
|||
rm.done();
|
||||
}
|
||||
|
||||
public void addListener(final Listener listener) {
|
||||
@Override
|
||||
public void addListener(final Listener listener) {
|
||||
// Must access fListeners on executor thread.
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
fListeners.add(listener);
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {}
|
||||
}
|
||||
|
||||
public void removeListener(final Listener listener) {
|
||||
@Override
|
||||
public void removeListener(final Listener listener) {
|
||||
// Must access fListeners on executor thread.
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
fListeners.remove(listener);
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {}
|
||||
}
|
||||
|
||||
public void countChanged() {
|
||||
@Override
|
||||
public void countChanged() {
|
||||
// Must access fListeners on executor thread.
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (Listener listener : fListeners) {
|
||||
listener.countChanged();
|
||||
}
|
||||
|
@ -219,11 +230,13 @@ public class ACPMSumDataGenerator
|
|||
} catch (RejectedExecutionException e) {}
|
||||
}
|
||||
|
||||
public void valuesChanged(final Set<Integer> changed) {
|
||||
@Override
|
||||
public void valuesChanged(final Set<Integer> changed) {
|
||||
// Must access fListeners on executor thread.
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (Object listener : fListeners) {
|
||||
((Listener)listener).valuesChanged(changed);
|
||||
}
|
||||
|
|
|
@ -107,14 +107,16 @@ public class ACPMSumDataViewer implements ILazyContentProvider
|
|||
// Schedule a task to refresh the viewer periodically.
|
||||
fRefreshFuture = fDisplayExecutor.scheduleAtFixedRate(
|
||||
new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
queryItemCount();
|
||||
}
|
||||
},
|
||||
UPDATE_INTERVAL, UPDATE_INTERVAL, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
// Cancel the periodic task of refreshing the view.
|
||||
fRefreshFuture.cancel(false);
|
||||
|
||||
|
@ -147,12 +149,14 @@ public class ACPMSumDataViewer implements ILazyContentProvider
|
|||
fItemDataRequestMonitors.clear();
|
||||
}
|
||||
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
@Override
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
// Set the initial count to the viewer after the input is set.
|
||||
queryItemCount();
|
||||
}
|
||||
|
||||
public void updateElement(final int index) {
|
||||
@Override
|
||||
public void updateElement(final int index) {
|
||||
// Calculate the visible index range.
|
||||
final int topIdx = fViewer.getTable().getTopIndex();
|
||||
final int botIdx = topIdx + getVisibleItemCount(topIdx);
|
||||
|
@ -164,7 +168,8 @@ public class ACPMSumDataViewer implements ILazyContentProvider
|
|||
// calls to be combined together improving performance of the viewer.
|
||||
fCancelCallsPending++;
|
||||
fDisplayExecutor.execute(
|
||||
new Runnable() { public void run() {
|
||||
new Runnable() { @Override
|
||||
public void run() {
|
||||
cancelStaleRequests(topIdx, botIdx);
|
||||
}});
|
||||
}
|
||||
|
@ -205,7 +210,8 @@ public class ACPMSumDataViewer implements ILazyContentProvider
|
|||
// if the cache is reset during processing by an event. The request
|
||||
// for data will be re-issued.
|
||||
fDataExecutor.execute(new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
new Transaction<Integer>() {
|
||||
@Override
|
||||
protected Integer process()
|
||||
|
@ -274,7 +280,8 @@ public class ACPMSumDataViewer implements ILazyContentProvider
|
|||
// if the cache is reset during processing by an event. The request
|
||||
// for data will be re-issued.
|
||||
fDataExecutor.execute(new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
new Transaction<String>() {
|
||||
@Override
|
||||
protected String process()
|
||||
|
|
|
@ -79,16 +79,19 @@ public class AsyncDataViewer
|
|||
fDataGenerator.addListener(this);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
fDataGenerator.removeListener(this);
|
||||
}
|
||||
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
@Override
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
// Set the initial count to the viewer after the input is set.
|
||||
queryItemCount();
|
||||
}
|
||||
|
||||
public void updateElement(final int index) {
|
||||
@Override
|
||||
public void updateElement(final int index) {
|
||||
// Calculate the visible index range.
|
||||
final int topIdx = fViewer.getTable().getTopIndex();
|
||||
final int botIdx = topIdx + getVisibleItemCount(topIdx);
|
||||
|
@ -100,7 +103,8 @@ public class AsyncDataViewer
|
|||
// calls to be combined together improving performance of the viewer.
|
||||
fCancelCallsPending++;
|
||||
fDisplayExecutor.schedule(
|
||||
new Runnable() { public void run() {
|
||||
new Runnable() { @Override
|
||||
public void run() {
|
||||
cancelStaleRequests(topIdx, botIdx);
|
||||
}},
|
||||
1, TimeUnit.MILLISECONDS);
|
||||
|
@ -120,19 +124,22 @@ public class AsyncDataViewer
|
|||
itemCount - top);
|
||||
}
|
||||
|
||||
@ThreadSafe
|
||||
@Override
|
||||
@ThreadSafe
|
||||
public void countChanged() {
|
||||
queryItemCount();
|
||||
}
|
||||
|
||||
@ThreadSafe
|
||||
@Override
|
||||
@ThreadSafe
|
||||
public void valuesChanged(final Set<Integer> indexes) {
|
||||
// Mark the changed items in table viewer as dirty, this will
|
||||
// trigger update requests for these indexes if they are
|
||||
// visible in the viewer.
|
||||
final TableViewer tableViewer = fViewer;
|
||||
fDisplayExecutor.execute( new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!fViewer.getTable().isDisposed()) {
|
||||
for (Integer index : indexes) {
|
||||
tableViewer.clear(index);
|
||||
|
|
|
@ -52,11 +52,13 @@ public class AsyncSumDataGenerator implements IDataGenerator {
|
|||
fDataGenerators = generators;
|
||||
}
|
||||
|
||||
public void getCount(final DataRequestMonitor<Integer> rm) {
|
||||
@Override
|
||||
public void getCount(final DataRequestMonitor<Integer> rm) {
|
||||
// Artificially delay the retrieval of the sum data to simulate
|
||||
// real processing time.
|
||||
fExecutor.schedule( new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
doGetCount(rm);
|
||||
}
|
||||
},
|
||||
|
@ -102,12 +104,14 @@ public class AsyncSumDataGenerator implements IDataGenerator {
|
|||
crm.setDoneCount(fDataGenerators.length);
|
||||
}
|
||||
|
||||
public void getValue(final int index, final DataRequestMonitor<Integer> rm)
|
||||
@Override
|
||||
public void getValue(final int index, final DataRequestMonitor<Integer> rm)
|
||||
{
|
||||
// Artificially delay the retrieval of the sum data to simulate
|
||||
// real processing time.
|
||||
fExecutor.schedule( new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
doGetValue(index, rm);
|
||||
}
|
||||
},
|
||||
|
@ -156,15 +160,18 @@ public class AsyncSumDataGenerator implements IDataGenerator {
|
|||
crm.setDoneCount(fDataGenerators.length);
|
||||
}
|
||||
|
||||
public void shutdown(RequestMonitor rm) {
|
||||
@Override
|
||||
public void shutdown(RequestMonitor rm) {
|
||||
rm.done();
|
||||
}
|
||||
|
||||
public void addListener(final Listener listener) {
|
||||
@Override
|
||||
public void addListener(final Listener listener) {
|
||||
// no events generated
|
||||
}
|
||||
|
||||
public void removeListener(Listener listener) {
|
||||
@Override
|
||||
public void removeListener(Listener listener) {
|
||||
// no events generated
|
||||
}
|
||||
|
||||
|
|
|
@ -95,14 +95,16 @@ public class AsyncSumDataViewer implements ILazyContentProvider
|
|||
// Schedule a task to refresh the viewer periodically.
|
||||
fRefreshFuture = fDisplayExecutor.scheduleAtFixedRate(
|
||||
new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
queryItemCount();
|
||||
}
|
||||
},
|
||||
UPDATE_INTERVAL, UPDATE_INTERVAL, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
// Cancel the periodic task of refreshing the view.
|
||||
fRefreshFuture.cancel(false);
|
||||
|
||||
|
@ -113,12 +115,14 @@ public class AsyncSumDataViewer implements ILazyContentProvider
|
|||
fItemDataRequestMonitors.clear();
|
||||
}
|
||||
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
@Override
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
// Set the initial count to the viewer after the input is set.
|
||||
queryItemCount();
|
||||
}
|
||||
|
||||
public void updateElement(final int index) {
|
||||
@Override
|
||||
public void updateElement(final int index) {
|
||||
// Calculate the visible index range.
|
||||
final int topIdx = fViewer.getTable().getTopIndex();
|
||||
final int botIdx = topIdx + getVisibleItemCount(topIdx);
|
||||
|
@ -130,7 +134,8 @@ public class AsyncSumDataViewer implements ILazyContentProvider
|
|||
// calls to be combined together improving performance of the viewer.
|
||||
fCancelCallsPending++;
|
||||
fDisplayExecutor.execute(
|
||||
new Runnable() { public void run() {
|
||||
new Runnable() { @Override
|
||||
public void run() {
|
||||
cancelStaleRequests(topIdx, botIdx);
|
||||
}});
|
||||
}
|
||||
|
|
|
@ -143,7 +143,8 @@ public class DataGeneratorCacheManager implements IDataGenerator.Listener {
|
|||
return value;
|
||||
}
|
||||
|
||||
public void countChanged() {
|
||||
@Override
|
||||
public void countChanged() {
|
||||
// Reset the count cache and all the value caches.
|
||||
if (fCountCache != null) {
|
||||
fCountCache.countChanged();
|
||||
|
@ -153,7 +154,8 @@ public class DataGeneratorCacheManager implements IDataGenerator.Listener {
|
|||
}
|
||||
}
|
||||
|
||||
public void valuesChanged(Set<Integer> indexes) {
|
||||
@Override
|
||||
public void valuesChanged(Set<Integer> indexes) {
|
||||
// Reset selected value caches.
|
||||
for (Integer index : indexes) {
|
||||
ValueCache value = fValueCaches.get(index);
|
||||
|
|
|
@ -72,9 +72,11 @@ public class DataGeneratorWithExecutor implements IDataGenerator {
|
|||
fRequestMonitor = rm;
|
||||
|
||||
rm.addCancelListener(new RequestMonitor.ICanceledListener() {
|
||||
public void requestCanceled(RequestMonitor rm) {
|
||||
@Override
|
||||
public void requestCanceled(RequestMonitor rm) {
|
||||
fExecutor.execute(new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
fQueue.remove(Request.this);
|
||||
}
|
||||
});
|
||||
|
@ -184,7 +186,8 @@ public class DataGeneratorWithExecutor implements IDataGenerator {
|
|||
// Schedule a runnable to make the random changes.
|
||||
fExecutor.scheduleAtFixedRate(
|
||||
new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
randomChanges();
|
||||
}
|
||||
},
|
||||
|
@ -197,10 +200,12 @@ public class DataGeneratorWithExecutor implements IDataGenerator {
|
|||
// TODO Exercise 4 - Add an annotation (ThreadSafe/ConfinedToDsfExecutor)
|
||||
// indicating allowed thread access to this class/method/member
|
||||
//#endif
|
||||
public void shutdown(final RequestMonitor rm) {
|
||||
@Override
|
||||
public void shutdown(final RequestMonitor rm) {
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
// Empty the queue of requests and fail them.
|
||||
for (Request request : fQueue) {
|
||||
request.fRequestMonitor.setStatus(new Status(
|
||||
|
@ -226,10 +231,12 @@ public class DataGeneratorWithExecutor implements IDataGenerator {
|
|||
// TODO Exercise 4 - Add an annotation (ThreadSafe/ConfinedToDsfExecutor)
|
||||
// indicating allowed thread access to this class/method/member
|
||||
//#endif
|
||||
public void getCount(final DataRequestMonitor<Integer> rm) {
|
||||
@Override
|
||||
public void getCount(final DataRequestMonitor<Integer> rm) {
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
fQueue.add(new CountRequest(rm));
|
||||
serviceQueue();
|
||||
}
|
||||
|
@ -246,10 +253,12 @@ public class DataGeneratorWithExecutor implements IDataGenerator {
|
|||
// TODO Exercise 4 - Add an annotation (ThreadSafe/ConfinedToDsfExecutor)
|
||||
// indicating allowed thread access to this class/method/member
|
||||
//#endif
|
||||
public void getValue(final int index, final DataRequestMonitor<Integer> rm) {
|
||||
@Override
|
||||
public void getValue(final int index, final DataRequestMonitor<Integer> rm) {
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
fQueue.add(new ItemRequest(index, rm));
|
||||
serviceQueue();
|
||||
}
|
||||
|
@ -265,10 +274,12 @@ public class DataGeneratorWithExecutor implements IDataGenerator {
|
|||
// TODO Exercise 4 - Add an annotation (ThreadSafe/ConfinedToDsfExecutor)
|
||||
// indicating allowed thread access to this class/method/member
|
||||
//#endif
|
||||
public void addListener(final Listener listener) {
|
||||
@Override
|
||||
public void addListener(final Listener listener) {
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
fListeners.add(listener);
|
||||
}
|
||||
});
|
||||
|
@ -279,10 +290,12 @@ public class DataGeneratorWithExecutor implements IDataGenerator {
|
|||
// TODO Exercise 4 - Add an annotation (ThreadSafe/ConfinedToDsfExecutor)
|
||||
// indicating allowed thread access to this class/method/member
|
||||
//#endif
|
||||
public void removeListener(final Listener listener) {
|
||||
@Override
|
||||
public void removeListener(final Listener listener) {
|
||||
try {
|
||||
fExecutor.execute( new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
fListeners.remove(listener);
|
||||
}
|
||||
});
|
||||
|
@ -299,7 +312,8 @@ public class DataGeneratorWithExecutor implements IDataGenerator {
|
|||
private void serviceQueue() {
|
||||
fExecutor.schedule(
|
||||
new DsfRunnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
doServiceQueue();
|
||||
}
|
||||
},
|
||||
|
|
|
@ -82,7 +82,7 @@ public class DataGeneratorWithThread extends Thread
|
|||
new LinkedBlockingQueue<Request>();
|
||||
|
||||
// ListenerList class provides thread safety.
|
||||
private ListenerList fListeners = new ListenerList();
|
||||
private ListenerList<Listener> fListeners = new ListenerList<>();
|
||||
|
||||
// Current number of elements in this generator.
|
||||
private int fCount = MIN_COUNT;
|
||||
|
@ -105,7 +105,8 @@ public class DataGeneratorWithThread extends Thread
|
|||
start();
|
||||
}
|
||||
|
||||
public void shutdown(RequestMonitor rm) {
|
||||
@Override
|
||||
public void shutdown(RequestMonitor rm) {
|
||||
// Mark the generator as shut down. After the fShutdown flag is set,
|
||||
// all new requests should be shut down.
|
||||
if (!fShutdown.getAndSet(true)) {
|
||||
|
@ -118,7 +119,8 @@ public class DataGeneratorWithThread extends Thread
|
|||
}
|
||||
}
|
||||
|
||||
public void getCount(DataRequestMonitor<Integer> rm) {
|
||||
@Override
|
||||
public void getCount(DataRequestMonitor<Integer> rm) {
|
||||
if (!fShutdown.get()) {
|
||||
fQueue.add(new CountRequest(rm));
|
||||
} else {
|
||||
|
@ -128,7 +130,8 @@ public class DataGeneratorWithThread extends Thread
|
|||
}
|
||||
}
|
||||
|
||||
public void getValue(int index, DataRequestMonitor<Integer> rm) {
|
||||
@Override
|
||||
public void getValue(int index, DataRequestMonitor<Integer> rm) {
|
||||
if (!fShutdown.get()) {
|
||||
fQueue.add(new ItemRequest(index, rm));
|
||||
} else {
|
||||
|
@ -138,11 +141,13 @@ public class DataGeneratorWithThread extends Thread
|
|||
}
|
||||
}
|
||||
|
||||
public void addListener(Listener listener) {
|
||||
@Override
|
||||
public void addListener(Listener listener) {
|
||||
fListeners.add(listener);
|
||||
}
|
||||
|
||||
public void removeListener(Listener listener) {
|
||||
@Override
|
||||
public void removeListener(Listener listener) {
|
||||
fListeners.remove(listener);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,12 +56,14 @@ public class SyncDataViewer
|
|||
fDataGenerator.addListener(this);
|
||||
}
|
||||
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
@Override
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
// Not used
|
||||
}
|
||||
|
||||
|
||||
public Object[] getElements(Object inputElement) {
|
||||
@Override
|
||||
public Object[] getElements(Object inputElement) {
|
||||
|
||||
// Create the query object for reading data count.
|
||||
Query<Integer> countQuery = new Query<Integer>() {
|
||||
|
@ -126,16 +128,19 @@ public class SyncDataViewer
|
|||
return new Object[0];
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
fDataGenerator.removeListener(this);
|
||||
}
|
||||
|
||||
public void countChanged() {
|
||||
@Override
|
||||
public void countChanged() {
|
||||
// For any event from the generator, refresh the whole viewer.
|
||||
refreshViewer();
|
||||
}
|
||||
|
||||
public void valuesChanged(Set<Integer> indexes) {
|
||||
@Override
|
||||
public void valuesChanged(Set<Integer> indexes) {
|
||||
// For any event from the generator, refresh the whole viewer.
|
||||
refreshViewer();
|
||||
}
|
||||
|
@ -151,7 +156,8 @@ public class SyncDataViewer
|
|||
// thread before calling the viewer.
|
||||
Display display = fViewer.getControl().getDisplay();
|
||||
display.asyncExec( new Runnable() {
|
||||
public void run() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!fViewer.getControl().isDisposed()) {
|
||||
fViewer.refresh();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue