From 1543f39e802583de4c0cd9c76158b796bc8cb912 Mon Sep 17 00:00:00 2001 From: Alexander Doroshko Date: Thu, 21 Jan 2016 19:34:24 +0300 Subject: [PATCH] added method to create XSourcePosition by file, line and column --- .../com/intellij/xdebugger/XDebuggerUtil.java | 11 +++++++++++ .../xdebugger/impl/XDebuggerUtilImpl.java | 6 ++++++ .../xdebugger/impl/XSourcePositionImpl.java | 17 ++++++++++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerUtil.java b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerUtil.java index 6d5848830ad5..5bf5b68344f4 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerUtil.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerUtil.java @@ -81,6 +81,17 @@ public abstract class XDebuggerUtil { @Nullable public abstract XSourcePosition createPosition(@Nullable VirtualFile file, int line); + /** + * Create {@link XSourcePosition} instance by line and column number + * + * @param file file + * @param line 0-based line number + * @param column 0-based column number + * @return source position + */ + @Nullable + public abstract XSourcePosition createPosition(@Nullable VirtualFile file, int line, int column); + /** * Create {@link XSourcePosition} instance by line number * @param file file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java index 6df5ffa8efa6..dda2d745a3dd 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java @@ -310,6 +310,12 @@ public class XDebuggerUtilImpl extends XDebuggerUtil { return XSourcePositionImpl.create(file, line); } + @Override + @Nullable + public XSourcePosition createPosition(final VirtualFile file, final int line, final int column) { + return XSourcePositionImpl.create(file, line, column); + } + @Override @Nullable public XSourcePosition createPositionByOffset(final VirtualFile file, final int offset) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XSourcePositionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XSourcePositionImpl.java index 60541a1414f0..413fcceaee97 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XSourcePositionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XSourcePositionImpl.java @@ -99,6 +99,14 @@ public class XSourcePositionImpl implements XSourcePosition { */ @Nullable public static XSourcePositionImpl create(@Nullable VirtualFile file, int line) { + return create(file, line, 0); + } + + /** + * do not call this method from plugins, use {@link XDebuggerUtil#createPosition(VirtualFile, int, int)} instead + */ + @Nullable + public static XSourcePositionImpl create(@Nullable VirtualFile file, int line, int column) { if (file == null) { return null; } @@ -118,8 +126,15 @@ public class XSourcePositionImpl implements XSourcePosition { if (line < 0) { line = 0; } + if (column < 0) { + column = 0; + } - offset = line < document.getLineCount() ? document.getLineStartOffset(line) : -1; + offset = line < document.getLineCount() ? document.getLineStartOffset(line) + column : -1; + + if (offset >= document.getTextLength()) { + offset = document.getTextLength() - 1; + } } return new XSourcePositionImpl(file, line, offset); }