/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.editor.quickfix;
import elemental.dom.Element;
import elemental.html.ClientRect;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
import org.eclipse.che.ide.api.editor.codeassist.CodeAssistCallback;
import org.eclipse.che.ide.api.editor.codeassist.CompletionProposal;
import org.eclipse.che.ide.api.editor.quickfix.QuickAssistAssistant;
import org.eclipse.che.ide.api.editor.quickfix.QuickAssistInvocationContext;
import org.eclipse.che.ide.api.editor.quickfix.QuickAssistProcessor;
import org.eclipse.che.ide.api.editor.texteditor.TextEditor;
import java.util.List;
/** Implementation for {@link QuickAssistAssistant}. */
public class QuickAssistAssistantImpl implements QuickAssistAssistant {
private final TextEditor textEditor;
@Inject
private QuickAssistWidgetFactory widgetFactory;
/** The quick assist processor. */
private QuickAssistProcessor quickAssistProcessor;
@AssistedInject
public QuickAssistAssistantImpl(@Assisted final TextEditor textEditor) {
this.textEditor = textEditor;
}
@Override
public void showPossibleQuickAssists(final int line, final Element anchorElement) {
final ClientRect anchorRect = anchorElement.getBoundingClientRect();
showPossibleQuickAssists(line, anchorRect.getRight(), anchorRect.getBottom());
}
@Override
public void showPossibleQuickAssists(final int offset, final float coordX, final float coordY) {
computeQuickAssist(offset, new CodeAssistCallback() {
@Override
public void proposalComputed(final List<CompletionProposal> proposals) {
final QuickAssistWidget widget = widgetFactory.createWidget(textEditor);
for (final CompletionProposal proposal: proposals) {
widget.addItem(proposal);
}
widget.show(coordX, coordY);
}
});
}
@Override
public void computeQuickAssist(final int offset, final CodeAssistCallback callback) {
if (this.quickAssistProcessor != null) {
final QuickAssistInvocationContext context = new QuickAssistInvocationContext(offset, this.textEditor);
this.quickAssistProcessor.computeQuickAssistProposals(context, callback);
}
}
@Override
public void setQuickAssistProcessor(final QuickAssistProcessor processor) {
this.quickAssistProcessor = processor;
}
@Override
public QuickAssistProcessor getQuickAssistProcessor() {
return this.quickAssistProcessor;
}
}