From 0f49ec201507feaf2e1d21bbd4db1c9fa07ea62f Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Fri, 28 Nov 2014 15:30:48 -0500 Subject: [PATCH] Avoid ClassCastException in Codan Run job Occasionally Run Code Analysis actions get text selection instead of structured selection so it is failing and logging CCE. Avoid this by non accepting other selections. Change-Id: Ia3583755547e5251a057290e506184656ebf2d5a Signed-off-by: Alena Laskavaia Reviewed-on: https://git.eclipse.org/r/37306 Reviewed-by: Sergey Prigogin --- .../internal/ui/actions/RunCodeAnalysis.java | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/RunCodeAnalysis.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/RunCodeAnalysis.java index e3a124d4002..d132b45b349 100644 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/RunCodeAnalysis.java +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/RunCodeAnalysis.java @@ -38,35 +38,36 @@ public class RunCodeAnalysis implements IObjectActionDelegate { @Override public void run(IAction action) { - Job job = new Job(CodanUIMessages.Job_TitleRunningAnalysis) { - @SuppressWarnings("unchecked") - @Override - protected IStatus run(final IProgressMonitor monitor) { - IStructuredSelection ss = (IStructuredSelection) sel; - int count = ss.size(); - monitor.beginTask(getName(), count * 100); - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - for (Iterator iterator = ss.iterator(); iterator.hasNext();) { - Object o = iterator.next(); - if (o instanceof IAdaptable) { - o = ((IAdaptable) o).getAdapter(IResource.class); - } - if (o instanceof IResource) { - IResource res = (IResource) o; - SubProgressMonitor subMon = new SubProgressMonitor(monitor, 100); - CodanRuntime.getInstance().getBuilder().processResource(res, subMon, CheckerLaunchMode.RUN_ON_DEMAND); - if (subMon.isCanceled()) - return Status.CANCEL_STATUS; - } + if (sel instanceof IStructuredSelection) { + final IStructuredSelection ss = (IStructuredSelection) sel; + Job job = new Job(CodanUIMessages.Job_TitleRunningAnalysis) { + @Override + protected IStatus run(final IProgressMonitor monitor) { + int count = ss.size(); + monitor.beginTask(getName(), count * 100); if (monitor.isCanceled()) return Status.CANCEL_STATUS; + for (Iterator iterator = ss.iterator(); iterator.hasNext();) { + Object o = iterator.next(); + if (o instanceof IAdaptable) { + o = ((IAdaptable) o).getAdapter(IResource.class); + } + if (o instanceof IResource) { + IResource res = (IResource) o; + SubProgressMonitor subMon = new SubProgressMonitor(monitor, 100); + CodanRuntime.getInstance().getBuilder().processResource(res, subMon, CheckerLaunchMode.RUN_ON_DEMAND); + if (subMon.isCanceled()) + return Status.CANCEL_STATUS; + } + if (monitor.isCanceled()) + return Status.CANCEL_STATUS; + } + return Status.OK_STATUS; } - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); + }; + job.setUser(true); + job.schedule(); + } } @Override