/*
* Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC
* All rights reserved.
*
* The source code of this document is proprietary work, and is not licensed for
* distribution. For information about licensing, contact Sam Harwell at:
* sam@tunnelvisionlabs.com
*/
package org.tvl.goworks.editor.go.completion;
import com.tvl.spi.editor.completion.CompletionItem;
import com.tvl.spi.editor.completion.CompletionProvider;
import com.tvl.spi.editor.completion.CompletionTask;
import java.awt.event.KeyEvent;
import java.util.Collection;
import java.util.List;
import javax.swing.text.JTextComponent;
import org.antlr.works.editor.antlr4.completion.BaseCompletionController;
import org.netbeans.api.editor.mimelookup.MimeLookup;
import org.netbeans.lib.editor.util.swing.DocumentUtilities;
import org.openide.util.Lookup;
/**
*
* @author Sam Harwell
*/
public class GoCompletionController extends BaseCompletionController {
private final GoCompletionProvider provider;
public GoCompletionController(JTextComponent component, List<? extends CompletionTask> tasks, List<Integer> queryTypes) {
super(component, tasks, queryTypes);
Lookup lookup = MimeLookup.getLookup(DocumentUtilities.getMimeType(component));
if (lookup != null) {
Collection<? extends CompletionProvider> providers = lookup.lookupAll(CompletionProvider.class);
GoCompletionProvider goCompletionProvider = null;
for (CompletionProvider completionProvider : providers) {
if (completionProvider instanceof GoCompletionProvider) {
goCompletionProvider = (GoCompletionProvider)completionProvider;
break;
}
}
this.provider = goCompletionProvider;
} else {
this.provider = null;
}
}
@Override
public void processKeyEvent(KeyEvent evt, CompletionItem bestMatch, boolean isSelected) {
if (provider != null) {
if (isSelected && evt.getID() == KeyEvent.KEY_PRESSED && provider.getCompletionSelectors().indexOf(evt.getKeyChar()) >= 0) {
evt.consume();
defaultAction(bestMatch, isSelected);
return;
}
}
super.processKeyEvent(evt, bestMatch, isSelected);
}
}