From 10ca4cb33731c7aabce4b49a2c956d553cff49ae Mon Sep 17 00:00:00 2001 From: Simon Schaefer Date: Fri, 7 Nov 2014 23:51:02 +0100 Subject: [PATCH] Add quick assists for spelling mistakes 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 --- org.scala-ide.sdt.core/plugin.xml | 4 ++ .../quickassist/FixSpellingMistake.scala | 19 ++++++++ .../quickassist/JavaQuickAssistAdapters.scala | 45 +++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 org.scala-ide.sdt.core/src/org/scalaide/core/internal/quickassist/FixSpellingMistake.scala create mode 100644 org.scala-ide.sdt.core/src/org/scalaide/core/internal/quickassist/JavaQuickAssistAdapters.scala diff --git a/org.scala-ide.sdt.core/plugin.xml b/org.scala-ide.sdt.core/plugin.xml index 0de7fa05b2..8a1f0959a6 100644 --- a/org.scala-ide.sdt.core/plugin.xml +++ b/org.scala-ide.sdt.core/plugin.xml @@ -1288,6 +1288,10 @@ class="org.scalaide.core.internal.quickassist.changecase.ChangeCase" id="org.scalaide.core.quickassist.ChangeCase"> + + diff --git a/org.scala-ide.sdt.core/src/org/scalaide/core/internal/quickassist/FixSpellingMistake.scala b/org.scala-ide.sdt.core/src/org/scalaide/core/internal/quickassist/FixSpellingMistake.scala new file mode 100644 index 0000000000..c6bf4f9ab1 --- /dev/null +++ b/org.scala-ide.sdt.core/src/org/scalaide/core/internal/quickassist/FixSpellingMistake.scala @@ -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) + } + +} diff --git a/org.scala-ide.sdt.core/src/org/scalaide/core/internal/quickassist/JavaQuickAssistAdapters.scala b/org.scala-ide.sdt.core/src/org/scalaide/core/internal/quickassist/JavaQuickAssistAdapters.scala new file mode 100644 index 0000000000..18214cc75d --- /dev/null +++ b/org.scala-ide.sdt.core/src/org/scalaide/core/internal/quickassist/JavaQuickAssistAdapters.scala @@ -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) +}