From bcce66726ad029e4360da1ec1e43bb414893104d Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Sun, 26 Feb 2012 22:28:50 -0500 Subject: [PATCH] First commit of an example visualizer, which displays a count of problem markers. --- .../.classpath | 7 + .../.project | 28 +++ .../.settings/org.eclipse.jdt.core.prefs | 70 ++++++ .../META-INF/MANIFEST.MF | 13 ++ .../build.properties | 5 + .../plugin.properties | 18 ++ .../plugin.xml | 12 + .../cdt/visualizer/examples/Messages.java | 32 +++ .../visualizer/examples/Messages.properties | 14 ++ .../examples/ProblemVisualizer.java | 212 ++++++++++++++++++ .../examples/VisualizerExamplesPlugin.java | 50 +++++ 11 files changed, 461 insertions(+) create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/.classpath create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/.project create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/.settings/org.eclipse.jdt.core.prefs create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/META-INF/MANIFEST.MF create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/build.properties create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/plugin.properties create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/plugin.xml create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/Messages.java create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/Messages.properties create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/ProblemVisualizer.java create mode 100644 visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/VisualizerExamplesPlugin.java diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/.classpath b/visualizer/org.eclipse.cdt.visualizer.examples/.classpath new file mode 100644 index 00000000000..ad32c83a788 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/.project b/visualizer/org.eclipse.cdt.visualizer.examples/.project new file mode 100644 index 00000000000..fdd91591ec0 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/.project @@ -0,0 +1,28 @@ + + + org.eclipse.cdt.visualizer.examples + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/.settings/org.eclipse.jdt.core.prefs b/visualizer/org.eclipse.cdt.visualizer.examples/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..cee06929381 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,70 @@ +#Tue Jun 24 11:04:56 PDT 2008 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=warning +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning +org.eclipse.jdt.core.compiler.problem.nullReference=error +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=error +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/META-INF/MANIFEST.MF b/visualizer/org.eclipse.cdt.visualizer.examples/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..0a14b0d7f20 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/META-INF/MANIFEST.MF @@ -0,0 +1,13 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %plugin.name +Bundle-SymbolicName: org.eclipse.cdt.visualizer.examples;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: org.eclipse.cdt.visualizer.examples.VisualizerExamplesPlugin +Bundle-Vendor: %provider.name +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.cdt.visualizer.ui, + org.eclipse.core.resources +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-ActivationPolicy: lazy diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/build.properties b/visualizer/org.eclipse.cdt.visualizer.examples/build.properties new file mode 100644 index 00000000000..e9863e281ea --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/build.properties @@ -0,0 +1,5 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/plugin.properties b/visualizer/org.eclipse.cdt.visualizer.examples/plugin.properties new file mode 100644 index 00000000000..5c3966ea2da --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/plugin.properties @@ -0,0 +1,18 @@ +# ============================================================================= +# Copyright (c) 2012 Ericsson Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Marc Khouzam (Ericsson) - initial API and implementation +# ============================================================================= + +# ----------------------------------------------------------------------------- +# Plugin string resources +# ----------------------------------------------------------------------------- + +plugin.name=CDT Visualizer Examples +provider.name=Eclipse CDT + diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/plugin.xml b/visualizer/org.eclipse.cdt.visualizer.examples/plugin.xml new file mode 100644 index 00000000000..f4e51561dd2 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/plugin.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/Messages.java b/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/Messages.java new file mode 100644 index 00000000000..98888dacde7 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/Messages.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009, 2011 Ericsson and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Ericsson - initial API and implementation + * Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121) + *******************************************************************************/ +package org.eclipse.cdt.visualizer.examples; + +import org.eclipse.osgi.util.NLS; + +/** + * Preference strings. + */ +class Messages extends NLS { + public static String CounterVisualizer_Name; + public static String CounterVisualizer_DisplayName; + public static String CounterVisualizer_Description; + + + static { + // initialize resource bundle + NLS.initializeMessages(Messages.class.getName(), Messages.class); + } + + private Messages() { + } +} diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/Messages.properties b/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/Messages.properties new file mode 100644 index 00000000000..979fbbd49d5 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/Messages.properties @@ -0,0 +1,14 @@ +############################################################################### +# Copyright (c) 2012 Ericsson and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Marc Khouzam (Ericsson) - initial API and implementation +############################################################################### + +CounterVisualizer_Name=counter +CounterVisualizer_DisplayName=Counter Visualizer +CounterVisualizer_Description=Visualizer displaying the count of errors/warnings/info \ No newline at end of file diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/ProblemVisualizer.java b/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/ProblemVisualizer.java new file mode 100644 index 00000000000..f1e7ad8e448 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/ProblemVisualizer.java @@ -0,0 +1,212 @@ +/******************************************************************************* + * Copyright (c) 2012 Tilera Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Marc Khouzam (Ericsson) - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.visualizer.examples; + +import org.eclipse.cdt.visualizer.ui.canvas.GraphicCanvas; +import org.eclipse.cdt.visualizer.ui.canvas.GraphicCanvasVisualizer; +import org.eclipse.cdt.visualizer.ui.canvas.GraphicObject; +import org.eclipse.cdt.visualizer.ui.util.Colors; +import org.eclipse.cdt.visualizer.ui.util.SelectionManager; +import org.eclipse.cdt.visualizer.ui.util.SelectionUtils; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Composite; + +public class ProblemVisualizer extends GraphicCanvasVisualizer { + + private static final int MARGIN_WIDTH = 10; + private static final int MARGIN_HEIGHT = 10; + private static final int SPACING_HEIGHT = 40; + private static final int NUM_SEVERITY = 3; + + private class BarGraphicObject extends GraphicObject { + public BarGraphicObject(int severity, int x, int y, int w, int h) { + super(x, y, w, h); + + Color color = Colors.BLACK; + + switch (severity) { + case IMarker.SEVERITY_ERROR: + color = Colors.DARK_RED; + break; + case IMarker.SEVERITY_WARNING: + color = Colors.DARK_YELLOW; + break; + case IMarker.SEVERITY_INFO: + color = Colors.DARK_BLUE; + break; + } + setBackground(color); + setForeground(color); + } + + @Override + public void paintContent(GC gc) { + gc.fillRectangle(m_bounds); + } + } + + + private GraphicCanvas m_canvas; + + private int[] m_markerCount = new int[NUM_SEVERITY]; + + public ProblemVisualizer() { + super(); + } + + @Override + public String getName() { + return Messages.CounterVisualizer_Name; + } + + @Override + public String getDisplayName() { + return Messages.CounterVisualizer_DisplayName; + } + + @Override + public String getDescription() { + return Messages.CounterVisualizer_Description; + } + + @Override + public GraphicCanvas createCanvas(Composite parent) { + m_canvas = new GraphicCanvas(parent); + return m_canvas; + } + + @Override + protected void initializeCanvas(GraphicCanvas canvas) { + // TODO Auto-generated method stub + super.initializeCanvas(canvas); + } + + @Override + public int handlesSelection(ISelection selection) { + Object sel = SelectionUtils.getSelectedObject(selection); + + if (sel instanceof IResource) { + return 2; + } + + return 0; + } + + @Override + public void visualizerDeselected() { + // TODO Auto-generated method stub + super.visualizerDeselected(); + } + + @Override + public void visualizerSelected() { + // TODO Auto-generated method stub + super.visualizerSelected(); + } + + private BarGraphicObject[] getBars() { + BarGraphicObject[] bars = new BarGraphicObject[3]; + + Rectangle bounds = m_canvas.getBounds(); + + int x = bounds.x + MARGIN_WIDTH; + int y = bounds.y + MARGIN_HEIGHT; + + int spacing = SPACING_HEIGHT; + int height = (bounds.height - 2 * MARGIN_HEIGHT - 2 * SPACING_HEIGHT) / 3; + if (height <= 0) { + spacing = 0; + y = bounds.y; + height = bounds.height / 3; + } + + // Find the maximum marker count to dictate the width + int maxCount = Math.max(m_markerCount[0], m_markerCount[1]); + maxCount = Math.max(maxCount, m_markerCount[2]); + int maxWidth = bounds.width - 2 * MARGIN_WIDTH; + if (maxCount == 0) maxCount = maxWidth; + + int count = m_markerCount[IMarker.SEVERITY_ERROR]; + if (count == 0) count = 1; + int width = maxWidth * count / maxCount; + bars[0] = new BarGraphicObject(IMarker.SEVERITY_ERROR, x, y, width, height); + + y = y + height + spacing; + count = m_markerCount[IMarker.SEVERITY_WARNING]; + if (count == 0) count = 1; + width = maxWidth * count / maxCount; + bars[1] = new BarGraphicObject(IMarker.SEVERITY_WARNING, x, y, width, height); + + y = y + height + spacing; + count = m_markerCount[IMarker.SEVERITY_INFO]; + if (count == 0) count = 1; + width = maxWidth * count / maxCount; + bars[2] = new BarGraphicObject(IMarker.SEVERITY_INFO, x, y, width, height); + + return bars; + } + + private void setMarkerCount(IResource resource) { + m_markerCount[IMarker.SEVERITY_ERROR] = 0; + m_markerCount[IMarker.SEVERITY_WARNING] = 0; + m_markerCount[IMarker.SEVERITY_INFO] = 0; + + IMarker[] problems = null; + try { + problems = resource.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE); + } catch (CoreException e) { + return; + } + + for (IMarker problem : problems) { + try { + Object attrValue = problem.getAttribute(IMarker.SEVERITY); + if (attrValue != null && attrValue instanceof Integer) { + int severity = (Integer)attrValue; + m_markerCount[severity]++; + } + } catch (CoreException e) { + } + } + } + + @Override + public void workbenchSelectionChanged(ISelection selection) { + m_canvas.clear(); + + Object sel = SelectionUtils.getSelectedObject(selection); + + if (sel instanceof IResource) { + m_canvas.setBackground(Colors.WHITE); + + setMarkerCount((IResource)sel); + + BarGraphicObject[] bars = getBars(); + + for (BarGraphicObject bar : bars) { + m_canvas.add(bar); + } + } + + m_canvas.redraw(); + } + + public SelectionManager getSelectionManager() { + return m_selectionManager; + } + +} diff --git a/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/VisualizerExamplesPlugin.java b/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/VisualizerExamplesPlugin.java new file mode 100644 index 00000000000..b53090bae69 --- /dev/null +++ b/visualizer/org.eclipse.cdt.visualizer.examples/src/org/eclipse/cdt/visualizer/examples/VisualizerExamplesPlugin.java @@ -0,0 +1,50 @@ +package org.eclipse.cdt.visualizer.examples; + +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class VisualizerExamplesPlugin extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "org.eclipse.cdt.visualizer.examples"; //$NON-NLS-1$ + + // The shared instance + private static VisualizerExamplesPlugin plugin; + + /** + * The constructor + */ + public VisualizerExamplesPlugin() { + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static VisualizerExamplesPlugin getDefault() { + return plugin; + } + +}