added method to create XSourcePosition by file, line and column

This commit is contained in:
Alexander Doroshko
2016-01-21 19:35:07 +03:00
parent 4db704329a
commit 1543f39e80
3 changed files with 33 additions and 1 deletions
@@ -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
@@ -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) {
@@ -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);
}