Skip to content

Commit

Permalink
Add quick assists for spelling mistakes
Browse files Browse the repository at this point in the history
After the creation of our own quick assists the Java spelling mistake
quick assists were no longer called. This adds some adapters, which
provide the necessary clutter to call Java quick assists.

Fixes #1002301
  • Loading branch information
kiritsuku committed Nov 7, 2014
1 parent eb9ae0c commit 10ca4cb
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
4 changes: 4 additions & 0 deletions org.scala-ide.sdt.core/plugin.xml
Expand Up @@ -1288,6 +1288,10 @@
class="org.scalaide.core.internal.quickassist.changecase.ChangeCase"
id="org.scalaide.core.quickassist.ChangeCase">
</quickAssist>
<quickAssist
class="org.scalaide.core.internal.quickassist.FixSpellingMistake"
id="org.scalaide.core.quickassist.FixSpellingMistake">
</quickAssist>
</extension>

<extension point="org.eclipse.ui.contexts">
Expand Down
@@ -0,0 +1,19 @@
package org.scalaide.core.internal.quickassist

import org.eclipse.jdt.internal.ui.text.spelling.WordQuickFixProcessor
import org.scalaide.core.quickassist.BasicCompletionProposal
import org.scalaide.core.quickassist.InvocationContext
import org.scalaide.core.quickassist.QuickAssist

/**
* Creates quick assists for spelling mistakes.
*/
class FixSpellingMistake extends QuickAssist {

override def compute(ctx: InvocationContext): Seq[BasicCompletionProposal] = {
val jctx = new JavaInvocationContextAdapter(ctx)
val p = new WordQuickFixProcessor()
p.getCorrections(jctx, jctx.javaProblemLocations).map(JavaProposalAdapter)
}

}
@@ -0,0 +1,45 @@
package org.scalaide.core.internal.quickassist

import org.eclipse.jdt.core.ICompilationUnit
import org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation
import org.eclipse.jdt.internal.ui.text.correction.ProblemLocation
import org.eclipse.jdt.ui.text.java.IInvocationContext
import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal
import org.eclipse.jdt.ui.text.java.IProblemLocation
import org.eclipse.jface.text.IDocument
import org.scalaide.core.quickassist.AssistLocation
import org.scalaide.core.quickassist.BasicCompletionProposal
import org.scalaide.core.quickassist.InvocationContext

/**
* Adapter for [[org.scalaide.core.quickassist.InvocationContext]] that
* implements [[org.eclipse.jdt.ui.text.java.IInvocationContext]].
*/
final class JavaInvocationContextAdapter(ctx: InvocationContext) extends IInvocationContext {
override def getCompilationUnit = ctx.icu.asInstanceOf[ICompilationUnit]
override def getSelectionOffset = ctx.selectionStart
override def getSelectionLength = ctx.selectionLength
override def getASTRoot = null
override def getCoveredNode = null
override def getCoveringNode = null

def javaProblemLocations: Array[IProblemLocation] =
ctx.problemLocations.collect {
case AssistLocation(offset, length, annotation: IJavaAnnotation) =>
new ProblemLocation(offset, length, annotation)
}.toArray
}

/**
* Adapter for [[org.eclipse.jdt.ui.text.java.IJavaCompletionProposal]] that
* implements [[org.scalaide.core.quickassist.BasicCompletionProposal]].
*/
final case class JavaProposalAdapter(jcp: IJavaCompletionProposal)
extends BasicCompletionProposal(
relevance = jcp.getRelevance,
displayString = jcp.getDisplayString,
image = jcp.getImage) {

override def apply(document: IDocument): Unit =
jcp.apply(document)
}

0 comments on commit 10ca4cb

Please sign in to comment.