Skip to content

Commit

Permalink
Merge 6d7568c into ed5a7f3
Browse files Browse the repository at this point in the history
  • Loading branch information
KengoTODA committed Feb 8, 2017
2 parents ed5a7f3 + 6d7568c commit e604a78
Show file tree
Hide file tree
Showing 97 changed files with 11,016 additions and 49 deletions.
44 changes: 44 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,63 @@ eclipsePlugin-test/bin_eclipse/
eclipsePlugin/local.properties
findbugs/annotationJavaDoc/
findbugs/apiJavaDoc/
findbugs/bin/
findbugs/build/
findbugs/classesEclipse/
findbugs/doc/
findbugs/jnlp/appengine.jnlp
findbugs/lib/annotations.jar
findbugs/lib/spotbugs-annotations.jar
findbugs/lib/spotbugs-ant.jar
findbugs/lib/spotbugs.jar
findbugs/lib/apache-ant-1.8.3-src.zip
findbugs/lib/asm-debug-all*.jar
findbugs/lib/bcel*.jar
findbugs/local.properties
findbugs/optionalPlugin/
findbugs/design/architecture/architecture.aux
findbugs/design/architecture/architecture.out
findbugs/design/architecture/architecture.pdf
findbugs/design/architecture/architecture.toc
findbugs/design/architecture/depend.mak
findbugs/plugin/findbugsCommunalCloud.jar
findbugs/plugin/webCloudClient.jar
findbugs/plugin/googlecode.jar
findbugs/plugin/jira.jar
findbugs/src/doc/allBugDescriptions.html
findbugs/src/doc/bugDescriptions.html
findbugs/src/doc/bugDescriptions_fr.html
findbugs/src/doc/bugDescriptions_ja.html
findbugs/web/
findbugsTestCases/build/
findbugsTestCases/history/
plugins/bugCollectionCloud/build/
plugins/bugCollectionCloud/build/
plugins/findbugsCommunalCloud/bin/
plugins/findbugsCommunalCloud/build/
plugins/googlecode/build/
plugins/jdbcCloudClient/build/
plugins/jira/build/
plugins/noUpdateChecks/build/
plugins/noUpdateChecks/build_eclipse/
plugins/poweruser/build/
plugins/poweruser/build/
plugins/webCloudClient/build/
plugins/webCloudClient/build/
plugins/webCloudClient/lib/
sandbox/detectorTutorial/build/
sandbox/localCloud/build/
sandbox/localCloud/classes/
server/appengine/war/WEB-INF/classes/
server/appengineUpdate/war/WEB-INF/lib/
server/appengineUpdate/war/WEB-INF/classes/
server/common/build/
server/common/classes/
server/common/classesEclipse/
server/webCommon/classesEclipse/
server/webCommon/build/
server/webUpdateCheck/classesEclipse/
server/webUpdateCheck/build/
target
webCloudProtocol/build/
*.log
1 change: 0 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ This is the changelog for SpotBugs. This follows [Keep a Changelog v0.3](http://
### Removed

* Java7 Support ([Issue #19](https://github.com/spotbugs/spotbugs/issues/19))
* WebCloud and other plugins
* BlueJ Support
* Artifact which packages not only SpotBugs annotations but also JSR305 annotations

Expand Down
1 change: 1 addition & 0 deletions eclipsePlugin/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Bundle-ClassPath: findbugs-plugin.jar,
lib/jaxen-1.1.6.jar,
lib/jFormatString.jar,
lib/commons-lang-2.6.jar,
lib/spotbugs-annotations.jar,
lib/asm-debug-all-6.0_ALPHA.jar
Bundle-Activator: de.tobject.findbugs.FindbugsPlugin
Bundle-Vendor: FindBugs Project
Expand Down
117 changes: 117 additions & 0 deletions eclipsePlugin/src/de/tobject/findbugs/EclipseGuiCallback.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,150 @@
import java.net.URL;
import java.util.List;
import java.util.concurrent.AbstractExecutorService;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;

import edu.umd.cs.findbugs.BugCollection;
import edu.umd.cs.findbugs.BugInstance;
import edu.umd.cs.findbugs.IGuiCallback;
import edu.umd.cs.findbugs.Project;
import edu.umd.cs.findbugs.cloud.Cloud;
import edu.umd.cs.findbugs.cloud.Cloud.CloudListener;
import edu.umd.cs.findbugs.cloud.Cloud.CloudTask;
import edu.umd.cs.findbugs.cloud.Cloud.CloudTaskListener;

public class EclipseGuiCallback implements IGuiCallback {
private final AbstractExecutorService guiExecutor = new EclipseDisplayThreadExecutor();

private CloudListener cloudListener;

private final IProject iproject;

public EclipseGuiCallback(IProject iproject) {
super();
this.iproject = iproject;
}

@Override
public void registerCloud(Project project, BugCollection collection, final Cloud cloud) {
cloudListener = new CloudListener() {
@Override
public void statusUpdated() {
final String statusMsg = cloud.getStatusMsg();

final IWorkbenchWindow win = FindbugsPlugin.getActiveWorkbenchWindow();
win.getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
IWorkbenchPage page = win.getActivePage();
IWorkbenchPart part = page.getActivePart();

if (part instanceof IEditorPart) {
IEditorPart epart = (IEditorPart) part;
Image image = FindbugsPlugin.getDefault().getImageRegistry().get("buggy-tiny-gray.png");
IStatusLineManager statusLineManager = epart.getEditorSite().getActionBars().getStatusLineManager();
if (statusMsg.isEmpty()) {
statusLineManager.setMessage("");
} else {
statusLineManager.setMessage(image, statusMsg);
}
}
}
});
}

@Override
public void issueUpdated(BugInstance bug) { // ok
}

@Override
public void taskStarted(final CloudTask task) {
task.setUseDefaultListener(false);
Job job = new Job(task.getName()) {

@Override
public boolean belongsTo(Object family) {
return FindbugsPlugin.class == family;
}

@Override
protected IStatus run(final IProgressMonitor monitor) {
monitor.beginTask(task.getName(), 1000);
monitor.subTask(task.getStatusLine());
monitor.worked((int) (task.getPercentCompleted() * 10));

final CountDownLatch latch = new CountDownLatch(1);
final AtomicBoolean success = new AtomicBoolean(false);
task.addListener(new CloudTaskListener() {

@Override
public void taskStatusUpdated(String statusLine, double percentCompleted) {
monitor.subTask(statusLine);
monitor.worked((int) (percentCompleted * 10)); // out
// of
// 1000
// work
// units
}

@Override
public void taskFinished() {
latch.countDown();
success.set(true);
}

@Override
public void taskFailed(String message) {
latch.countDown();
success.set(false);
}
});
try {
latch.await();
} catch (InterruptedException e) {
// ok
}
monitor.subTask("");
monitor.done();
return Status.OK_STATUS;
}
};
job.setPriority(Job.SHORT);
job.schedule();
}
};
cloud.addListener(cloudListener);
}

@Override
public void unregisterCloud(Project project, BugCollection collection, Cloud cloud) {
cloud.removeListener(cloudListener);
}

public String getProjectName() {
try {
return iproject.getDescription().getName();
Expand Down
21 changes: 18 additions & 3 deletions eclipsePlugin/src/de/tobject/findbugs/FindbugsPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,10 @@ public static SortedBugCollection getBugCollectionIfSet(IProject project) {
}
}

public static SortedBugCollection getBugCollection(IProject project, IProgressMonitor monitor) throws CoreException {
return getBugCollection(project, monitor, true);
}

/**
* Get the stored BugCollection for project. If there is no stored bug
* collection for the project, or if an error occurs reading the stored bug
Expand All @@ -652,12 +656,12 @@ public static SortedBugCollection getBugCollectionIfSet(IProject project) {
* @return the stored BugCollection, never null
* @throws CoreException
*/
public static SortedBugCollection getBugCollection(IProject project, IProgressMonitor monitor)
public static SortedBugCollection getBugCollection(IProject project, IProgressMonitor monitor, boolean useCloud)
throws CoreException {
SortedBugCollection bugCollection = (SortedBugCollection) project.getSessionProperty(SESSION_PROPERTY_BUG_COLLECTION);
if (bugCollection == null) {
try {
readBugCollectionAndProject(project, monitor);
readBugCollectionAndProject(project, monitor, useCloud);
bugCollection = (SortedBugCollection) project.getSessionProperty(SESSION_PROPERTY_BUG_COLLECTION);
} catch (IOException e) {
FindbugsPlugin.getDefault().logException(e, "Could not read bug collection for project");
Expand All @@ -682,6 +686,10 @@ private static SortedBugCollection createDefaultEmptyBugCollection(IProject proj

UserPreferences userPrefs = getUserPreferences(project);

String cloudId = userPrefs.getCloudId();
if (cloudId != null) {
fbProject.setCloudId(cloudId);
}
cacheBugCollectionAndProject(project, bugCollection, fbProject);
return bugCollection;
}
Expand All @@ -702,7 +710,7 @@ private static SortedBugCollection createDefaultEmptyBugCollection(IProject proj
* @throws DocumentException
* @throws CoreException
*/
private static void readBugCollectionAndProject(IProject project, IProgressMonitor monitor)
private static void readBugCollectionAndProject(IProject project, IProgressMonitor monitor, boolean useCloud)
throws IOException, DocumentException, CoreException {
SortedBugCollection bugCollection;

Expand All @@ -724,8 +732,15 @@ private static void readBugCollectionAndProject(IProject project, IProgressMonit
UserPreferences prefs = getUserPreferences(project);
bugCollection = new SortedBugCollection();
bugCollection.getProject().setGuiCallback(new EclipseGuiCallback(project));
bugCollection.setDoNotUseCloud(!useCloud);

bugCollection.readXML(bugCollectionFile);
if (useCloud) {
String cloudId = prefs.getCloudId();
if (cloudId != null) {
bugCollection.getProject().setCloudId(cloudId);
}
}

cacheBugCollectionAndProject(project, bugCollection, bugCollection.getProject());
}
Expand Down
36 changes: 34 additions & 2 deletions eclipsePlugin/src/de/tobject/findbugs/builder/FindBugsWorker.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@
import de.tobject.findbugs.reporter.Reporter;
import de.tobject.findbugs.util.Util.StopTimer;
import de.tobject.findbugs.view.FindBugsConsole;
import edu.umd.cs.findbugs.BugDesignation;
import edu.umd.cs.findbugs.BugInstance;
import edu.umd.cs.findbugs.DetectorFactoryCollection;
import edu.umd.cs.findbugs.FindBugs;
import edu.umd.cs.findbugs.FindBugs2;
Expand Down Expand Up @@ -183,6 +185,11 @@ public void work(List<WorkItem> resources) throws CoreException {
for (String entry : classPathEntries) {
findBugsProject.addAuxClasspathEntry(entry);
}
String cloudId = userPrefs.getCloudId();
if (cloudId != null) {
findBugsProject.setCloudId(cloudId);
}


st.newPoint("configureProps");
IPreferenceStore store = FindbugsPlugin.getPluginPreferences(project);
Expand Down Expand Up @@ -322,7 +329,26 @@ private void runFindBugs(final FindBugs2 findBugs) {
} finally {
findBugs.dispose();
}

}

void logDirty(SortedBugCollection bugCollection) {
if (true) {
return;
}
int count = 0;
for(BugInstance b : bugCollection) {
BugDesignation bd = b.getUserDesignation();
if (bd == null) {
continue;
}
if (bd.isDirty()) {
count++;
}

}
if (count > 0) {
new RuntimeException("Found " + count + " dirty designations").printStackTrace(System.out);
}
}
/**
* Update the BugCollection for the project.
Expand All @@ -334,14 +360,20 @@ private void runFindBugs(final FindBugs2 findBugs) {
*/
private void updateBugCollection(Project findBugsProject, Reporter bugReporter, boolean incremental) {
SortedBugCollection newBugCollection = bugReporter.getBugCollection();
logDirty(newBugCollection);
try {
st.newPoint("getBugCollection");
SortedBugCollection oldBugCollection = FindbugsPlugin.getBugCollection(project, monitor);
SortedBugCollection oldBugCollection = FindbugsPlugin.getBugCollection(project, monitor, false);
logDirty(oldBugCollection);

st.newPoint("mergeBugCollections");
SortedBugCollection resultCollection = mergeBugCollections(oldBugCollection, newBugCollection, incremental);
logDirty(resultCollection);
resultCollection.getProject().setGuiCallback(new EclipseGuiCallback(project));
resultCollection.setTimestamp(System.currentTimeMillis());
resultCollection.setDoNotUseCloud(false);
resultCollection.reinitializeCloud();
logDirty(resultCollection);

// will store bugs in the default FB file + Eclipse project session
// props
Expand Down

0 comments on commit e604a78

Please sign in to comment.