From a49f372f2eeed12519ff937722e4e2a4fa6d3ddf Mon Sep 17 00:00:00 2001 From: Nicolas PERANSIN Date: Tue, 19 Oct 2021 17:49:50 +0200 Subject: [PATCH] [#29] Improve quality over ill defined constructor. --- .../breakpoint/PooslLineBreakpoint.java | 46 +++++++++-------- .../breakpoint/PooslLineBreakpointTarget.java | 49 +++++++++++++------ 2 files changed, 59 insertions(+), 36 deletions(-) diff --git a/plugins/org.eclipse.poosl.rotalumisclient/src/org/eclipse/poosl/rotalumisclient/breakpoint/PooslLineBreakpoint.java b/plugins/org.eclipse.poosl.rotalumisclient/src/org/eclipse/poosl/rotalumisclient/breakpoint/PooslLineBreakpoint.java index 5fc43633..22591c9e 100644 --- a/plugins/org.eclipse.poosl.rotalumisclient/src/org/eclipse/poosl/rotalumisclient/breakpoint/PooslLineBreakpoint.java +++ b/plugins/org.eclipse.poosl.rotalumisclient/src/org/eclipse/poosl/rotalumisclient/breakpoint/PooslLineBreakpoint.java @@ -13,11 +13,10 @@ *******************************************************************************/ package org.eclipse.poosl.rotalumisclient.breakpoint; +import java.text.MessageFormat; + import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.core.model.LineBreakpoint; @@ -31,24 +30,31 @@ */ public class PooslLineBreakpoint extends LineBreakpoint { - public PooslLineBreakpoint() { - // Add empty constructor for reflection purposes - } + private static final String MARKER_ID = "org.eclipse.poosl.rotalumisclient.pooslLineBreakpointMarker"; //$NON-NLS-1$ + + private static final String MESSAGE_PATTERN = "Poosl Line Breakpoint: {0} [line: {1}]"; - public PooslLineBreakpoint(final IResource resource, final int lineNumber) throws DebugException { - super(); - IWorkspaceRunnable runnable = new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - IMarker marker = resource.createMarker("org.eclipse.poosl.rotalumisclient.pooslLineBreakpointMarker"); //$NON-NLS-1$ - setMarker(marker); - marker.setAttribute(IBreakpoint.ENABLED, true); - marker.setAttribute(IBreakpoint.PERSISTED, true); - marker.setAttribute(IMarker.LINE_NUMBER, lineNumber); - marker.setAttribute(IBreakpoint.ID, getModelIdentifier()); - marker.setAttribute(IMarker.MESSAGE, "Poosl Line Breakpoint: " + resource.getName() + " [line: " + lineNumber + "]"); - } - }; - run(getMarkerRule(resource), runnable); + /** + * Sets the resource and the line of this breakpoint into marker. + * + * @param resource + * to breakpoint + * @param lineNumber + * of breakpoint + * @throws DebugException + * if fails to mark + */ + public void markLine(final IResource resource, final int lineNumber) throws DebugException { + run(getMarkerRule(resource), monitor -> { + IMarker marker = resource.createMarker(MARKER_ID); + setMarker(marker); + marker.setAttribute(IBreakpoint.ENABLED, true); + marker.setAttribute(IBreakpoint.PERSISTED, true); + marker.setAttribute(IMarker.LINE_NUMBER, lineNumber); + marker.setAttribute(IBreakpoint.ID, getModelIdentifier()); + marker.setAttribute(IMarker.MESSAGE, + MessageFormat.format(MESSAGE_PATTERN, resource.getName(), lineNumber)); + }); } @Override diff --git a/plugins/org.eclipse.poosl.rotalumisclient/src/org/eclipse/poosl/rotalumisclient/breakpoint/PooslLineBreakpointTarget.java b/plugins/org.eclipse.poosl.rotalumisclient/src/org/eclipse/poosl/rotalumisclient/breakpoint/PooslLineBreakpointTarget.java index cb8eb443..be314abd 100644 --- a/plugins/org.eclipse.poosl.rotalumisclient/src/org/eclipse/poosl/rotalumisclient/breakpoint/PooslLineBreakpointTarget.java +++ b/plugins/org.eclipse.poosl.rotalumisclient/src/org/eclipse/poosl/rotalumisclient/breakpoint/PooslLineBreakpointTarget.java @@ -54,8 +54,11 @@ * @author Arjan Mooij * */ -public class PooslLineBreakpointTarget implements IToggleBreakpointsTarget, IToggleBreakpointsTargetExtension { - private static final Logger LOGGER = Logger.getLogger(PooslLineBreakpointTarget.class.getName()); +public class PooslLineBreakpointTarget implements + IToggleBreakpointsTarget, + IToggleBreakpointsTargetExtension { + private static final Logger LOGGER = Logger + .getLogger(PooslLineBreakpointTarget.class.getName()); @Override public boolean canToggleLineBreakpoints(IWorkbenchPart part, ISelection selection) { @@ -63,7 +66,8 @@ public boolean canToggleLineBreakpoints(IWorkbenchPart part, ISelection selectio } @Override - public void toggleLineBreakpoints(IWorkbenchPart part, ISelection selection) throws CoreException { + public void toggleLineBreakpoints(IWorkbenchPart part, ISelection selection) + throws CoreException { XtextEditor xtextEditor = getEditor(part); IXtextDocument document = getDocument(xtextEditor); if (xtextEditor != null && document != null) { @@ -79,33 +83,42 @@ public void toggleLineBreakpoints(IWorkbenchPart part, ISelection selection) thr return; } - Statement actualSemanticObject = getSemanticStatement(resource, document, selectedLineNumber); + Statement actualSemanticObject = getSemanticStatement(resource, document, + selectedLineNumber); if (actualSemanticObject == null) { - PooslDebugHelper.showInfoMessage(Messages.DIALOG_BREAKPOINT_TITLE, Messages.DIALOG_BREAKPOINT_NO_STATEMENT); + PooslDebugHelper.showInfoMessage(Messages.DIALOG_BREAKPOINT_TITLE, + Messages.DIALOG_BREAKPOINT_NO_STATEMENT); return; } - if (actualSemanticObject instanceof ProcessMethodCall && actualSemanticObject.eContainer() instanceof ProcessClass) { + if (actualSemanticObject instanceof ProcessMethodCall + && actualSemanticObject.eContainer() instanceof ProcessClass) { // Initial method call - PooslDebugHelper.showInfoMessage(Messages.DIALOG_BREAKPOINT_TITLE, Messages.DIALOG_BREAKPOINT_INIT_METHOD); + PooslDebugHelper.showInfoMessage(Messages.DIALOG_BREAKPOINT_TITLE, + Messages.DIALOG_BREAKPOINT_INIT_METHOD); return; } - int statementLineNumber = NodeModelUtils.getNode(actualSemanticObject).getStartLine() - 1; + int statementLineNumber = NodeModelUtils.getNode(actualSemanticObject).getStartLine() + - 1; // Check if there is an existing breakpoint on this line number if (!deleteBreakpointAtLine(resource, statementLineNumber)) { // create line breakpoint (doc line numbers start at 0) - PooslLineBreakpoint lineBreakpoint = new PooslLineBreakpoint(resource, statementLineNumber + 1); + PooslLineBreakpoint lineBreakpoint = new PooslLineBreakpoint(); + lineBreakpoint.markLine(resource, statementLineNumber + 1); DebugPlugin.getDefault().getBreakpointManager().addBreakpoint(lineBreakpoint); } } } - private boolean deleteBreakpointAtLine(IResource resource, int lineNumber) throws CoreException { - IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(PooslConstants.DEBUG_MODEL_ID); + private boolean deleteBreakpointAtLine(IResource resource, int lineNumber) + throws CoreException { + IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager() + .getBreakpoints(PooslConstants.DEBUG_MODEL_ID); for (int i = 0; i < breakpoints.length; i++) { IBreakpoint breakpoint = breakpoints[i]; - if (resource.equals(breakpoint.getMarker().getResource()) && ((ILineBreakpoint) breakpoint).getLineNumber() == (lineNumber + 1)) { + if (resource.equals(breakpoint.getMarker().getResource()) + && ((ILineBreakpoint) breakpoint).getLineNumber() == (lineNumber + 1)) { // existing breakpoint; delete breakpoint.delete(); return true; @@ -114,7 +127,8 @@ private boolean deleteBreakpointAtLine(IResource resource, int lineNumber) throw return false; } - private Statement getSemanticStatement(IResource resource, IXtextDocument document, int lineNumber) { + private Statement getSemanticStatement( + IResource resource, IXtextDocument document, int lineNumber) { int lineOffset = -1; try { lineOffset = document.getLineInformation(lineNumber).getOffset(); @@ -144,10 +158,12 @@ private Statement getSemanticStatement(IResource resource, IXtextDocument docume private EObject getSemanticObject(IResource resource, int lineOffset) { XtextResourceSet resourceSet = new XtextResourceSet(); - resourceSet.getPackageRegistry().put(org.eclipse.poosl.PooslPackage.eINSTANCE.getNsURI(), org.eclipse.poosl.PooslPackage.eINSTANCE); + resourceSet.getPackageRegistry().put(org.eclipse.poosl.PooslPackage.eINSTANCE.getNsURI(), + org.eclipse.poosl.PooslPackage.eINSTANCE); URI uri = URI.createFileURI(resource.getLocation().toOSString()); XtextResource xtextResource = (XtextResource) resourceSet.getResource(uri, true); - ILeafNode leafNode = NodeModelUtils.findLeafNodeAtOffset(xtextResource.getParseResult().getRootNode(), lineOffset); + ILeafNode leafNode = NodeModelUtils + .findLeafNodeAtOffset(xtextResource.getParseResult().getRootNode(), lineOffset); return NodeModelUtils.findActualSemanticObjectFor(leafNode); } @@ -184,7 +200,8 @@ private IXtextDocument getDocument(XtextEditor xtextEditor) { } @Override - public void toggleMethodBreakpoints(IWorkbenchPart part, ISelection selection) throws CoreException { + public void toggleMethodBreakpoints(IWorkbenchPart part, ISelection selection) + throws CoreException { throw new UnsupportedOperationException("toggleMethodBreakpoints() not supported"); }