Skip to content

Commit

Permalink
Fixes #73, bad cast and type safety issues
Browse files Browse the repository at this point in the history
  • Loading branch information
breandan committed Jul 17, 2016
1 parent 359fb63 commit 791aec0
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 40 deletions.
52 changes: 25 additions & 27 deletions src/main/kotlin/com/johnlindquist/acejump/AceFinder.kt
Expand Up @@ -8,8 +8,6 @@ import com.intellij.openapi.editor.impl.EditorImpl
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.EventDispatcher
import com.johnlindquist.acejump.EditorHelper

import java.util.*
import javax.swing.event.ChangeEvent
import javax.swing.event.ChangeListener
Expand All @@ -32,7 +30,7 @@ class AceFinder(val project: Project, val document: DocumentImpl, val editor: Ed
var startResult: Int = 0
var endResult: Int = 0
var allowedCount: Int = getAllowedCharacters()!!.length
var results: List<Int?>? = null
var results: List<Int>? = null
var getEndOffset: Boolean = false
var firstChar: String = ""
var customOffset: Int = 0
Expand Down Expand Up @@ -60,22 +58,22 @@ class AceFinder(val project: Project, val document: DocumentImpl, val editor: Ed
application?.runReadAction({ results = findAllVisible() })

application?.invokeLater({
var caretOffset = editor.caretModel.offset
var lineNumber = document.getLineNumber(caretOffset)
var lineStartOffset = document.getLineStartOffset(lineNumber)
var lineEndOffset = document.getLineEndOffset(lineNumber)
val caretOffset = editor.caretModel.offset
val lineNumber = document.getLineNumber(caretOffset)
val lineStartOffset = document.getLineStartOffset(lineNumber)
val lineEndOffset = document.getLineEndOffset(lineNumber)


results = results!!.sortedWith(object : Comparator<Int?> {
results = results?.sortedWith(object : Comparator<Int?> {
override fun equals(other: Any?): Boolean {
throw UnsupportedOperationException()
}

override fun compare(p0: Int?, p1: Int?): Int {
var i1: Int = Math.abs(caretOffset - p0!!)
var i2: Int = Math.abs(caretOffset - p1!!)
var o1OnSameLine: Boolean = p0 >= lineStartOffset && p0 <= lineEndOffset
var o2OnSameLine: Boolean = p1 >= lineStartOffset && p1 <= lineEndOffset
val i1: Int = Math.abs(caretOffset - p0!!)
val i2: Int = Math.abs(caretOffset - p1!!)
val o1OnSameLine: Boolean = p0 >= lineStartOffset && p0 <= lineEndOffset
val o2OnSameLine: Boolean = p1 >= lineStartOffset && p1 <= lineEndOffset
if (i1 > i2) {
if (!o2OnSameLine && o1OnSameLine) {
return -1
Expand All @@ -93,47 +91,47 @@ class AceFinder(val project: Project, val document: DocumentImpl, val editor: Ed
}
})

startResult = 0;
endResult = allowedCount;
startResult = 0
endResult = allowedCount

eventDispatcher?.multicaster?.stateChanged(ChangeEvent("AceFinder"));
});
eventDispatcher?.multicaster?.stateChanged(ChangeEvent("AceFinder"))
})
}

fun findAllVisible(): List<Int> {
//System.out.println("----- findAllVisible");
val visualLineAtTopOfScreen = EditorHelper.getVisualLineAtTopOfScreen(editor)
val firstLine = EditorHelper.visualLineToLogicalLine(editor, visualLineAtTopOfScreen)
var offset = EditorHelper.getLineStartOffset(editor, firstLine)
val offset = EditorHelper.getLineStartOffset(editor, firstLine)

val height = EditorHelper.getScreenHeight(editor)
val top = EditorHelper.getVisualLineAtTopOfScreen(editor)

var lastLine = top + height
lastLine = EditorHelper.visualLineToLogicalLine(editor, lastLine)

var endOffset = EditorHelper.normalizeOffset(editor, lastLine, EditorHelper.getLineEndOffset(editor, lastLine, true), true)
var text: String = document.charsSequence.toString().substring(offset, endOffset)
var offsets = ArrayList<Int>()
val endOffset = EditorHelper.normalizeOffset(editor, lastLine, EditorHelper.getLineEndOffset(editor, lastLine, true), true)
val text: String = document.charsSequence.toString().substring(offset, endOffset)
val offsets = ArrayList<Int>()

var foundOffset = 0
while (0 < text.length) {
var result = findManager.findString(text, foundOffset, findModel, virtualFile);
val result = findManager.findString(text, foundOffset, findModel, virtualFile)
if (!result.isStringFound) {
//System.out.println(findModel.getStringToFind() + ": not found");
break;
break
}
var resultOffset: Int
if (getEndOffset) {
resultOffset = result.endOffset - 1;
resultOffset = result.endOffset - 1
} else {
resultOffset = result.startOffset;
resultOffset = result.startOffset
}
offsets.add(resultOffset + offset + customOffset);
foundOffset = result.endOffset;
offsets.add(resultOffset + offset + customOffset)
foundOffset = result.endOffset
}

return offsets;
return offsets
}

fun expandResults() {
Expand Down
12 changes: 6 additions & 6 deletions src/main/kotlin/com/johnlindquist/acejump/AceJumpAction.kt
Expand Up @@ -68,16 +68,16 @@ open class AceJumpAction() : DumbAwareAction() {
If there are >26, then start A-Y then ZA-ZZ
A huge list would be like A-C then DA-ZZ
*/
fun setupJumpLocations(results: MutableList<Int>) {
fun setupJumpLocations(results: List<Int>?) {

if (results.size == 0) return //todo: hack, in case random keystrokes make it through
if (results == null || results.size == 0) return //todo: hack, in case random keystrokes make it through
textAndOffsetHash.clear()
val textPointPairs: MutableList<Pair<String, Point>> = ArrayList()
val total = results.size - 1

val letters = aceFinder.getAllowedCharacters()!!
var len = letters.length
var groups = Math.floor(total.toDouble() / len)
val len = letters.length
val groups = Math.floor(total.toDouble() / len)
// print("groups: " + groups.toString())
val lenMinusGroups = len - groups.toInt()
// print("last letter: " + letters.charAt(lenMinusGroups).toString() + "\n")
Expand Down Expand Up @@ -124,7 +124,7 @@ open class AceJumpAction() : DumbAwareAction() {

fun configureSearchBox() {
fun setupSearchBoxKeys() {
val showJumpObserver: ChangeListener = ChangeListener { setupJumpLocations(aceFinder.results as MutableList<Int>) }
val showJumpObserver: ChangeListener = ChangeListener { setupJumpLocations(aceFinder.results) }
val releasedHome: AceKeyCommand = ShowBeginningOfLines(searchBox, aceFinder)
val releasedEnd: AceKeyCommand = ShowEndOfLines(searchBox, aceFinder)
releasedHome.addListener(showJumpObserver)
Expand Down Expand Up @@ -164,7 +164,7 @@ open class AceJumpAction() : DumbAwareAction() {
popup?.setRequestFocus(true);

val width = searchBox.getFontMetrics(font).stringWidth("w")
var dimension: Dimension = Dimension(width * 2, (editor.lineHeight))
val dimension: Dimension = Dimension(width * 2, (editor.lineHeight))
if (SystemInfo.isMac) {
dimension.setSize(dimension.width * 2, dimension.height * 2)
}
Expand Down
8 changes: 4 additions & 4 deletions src/main/kotlin/com/johnlindquist/acejump/AceJumper.kt
Expand Up @@ -21,20 +21,20 @@ open class AceJumper(var editor: EditorImpl, var document: DocumentImpl) {
if (ranges.isEmpty())
return

var startWordOffset = Math.max(0, ranges[0].startOffset)
var endWordOffset = Math.min(ranges[0].endOffset, document.textLength)
val startWordOffset = Math.max(0, ranges[0].startOffset)
val endWordOffset = Math.min(ranges[0].endOffset, document.textLength)

/* if(ranges.size() == 2 && editor.getSelectionModel().getSelectionStart() == startWordOffset && editor.getSelectionModel().getSelectionEnd() == endWordOffset)
startWordOffset = Math.max(0, ranges.get(1).getStartOffset())
endWordOffset = Math.min(ranges.get(1).getEndOffset(), document.getTextLength())*/

editor.selectionModel.setSelection(startWordOffset, endWordOffset);
editor.selectionModel.setSelection(startWordOffset, endWordOffset)
}

fun setSelectionFromCaretToOffset(offset: Int) {
editor.selectionModel.removeSelection()
val caretOffset = editor.caretModel.offset
editor.selectionModel.setSelection(caretOffset, offset);
editor.selectionModel.setSelection(caretOffset, offset)
}

}
4 changes: 2 additions & 2 deletions src/main/kotlin/com/johnlindquist/acejump/AceUtil.kt
Expand Up @@ -6,12 +6,12 @@ import com.intellij.ui.awt.RelativePoint
import java.awt.Point

fun guessBestLocation(editor: Editor): RelativePoint {
var logicalPosition: VisualPosition = editor.caretModel.visualPosition
val logicalPosition: VisualPosition = editor.caretModel.visualPosition
return getPointFromVisualPosition(editor, logicalPosition)
}

fun getPointFromVisualPosition(editor: Editor, logicalPosition: VisualPosition): RelativePoint {
var p: Point = editor.visualPositionToXY(VisualPosition(logicalPosition.line, logicalPosition.column))
val p: Point = editor.visualPositionToXY(VisualPosition(logicalPosition.line, logicalPosition.column))
return RelativePoint(editor.contentComponent, p)
}

Expand Down
Expand Up @@ -37,7 +37,7 @@ class DefaultKeyCommand(val searchBox: SearchBox, val aceFinder: AceFinder, val
val offset = textAndOffsetHash[char]

if (offset != null) {
searchBox.popupContainer?.cancel();
searchBox.popupContainer?.cancel()
if (keyEvent.isShiftDown && !keyEvent.isMetaDown) {
aceJumper.setSelectionFromCaretToOffset(offset)
aceJumper.moveCaret(offset)
Expand Down

0 comments on commit 791aec0

Please sign in to comment.