diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 2423f13e90e..826947e6808 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -50,11 +50,16 @@ + + + + + @@ -66,8 +71,8 @@ - + () { + @Override + protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, + @NotNull CompletionResultSet result) { + if (result.getPrefixMatcher().getPrefix().isEmpty()) { + return; + } + + final PsiElement position = parameters.getPosition(); + if (!(position.getContainingFile() instanceof JetFile)) { + return; + } + +// final PsiElement parent = position.getParent(); +// if (parent.getReference() instanceof JetSimpleName) + + return; + } + }); + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java new file mode 100644 index 00000000000..9be048cc95a --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java @@ -0,0 +1,75 @@ +package org.jetbrains.jet.plugin.completion; + +import com.intellij.codeInsight.completion.*; +import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.patterns.PlatformPatterns; +import com.intellij.psi.PsiElement; +import com.intellij.util.Consumer; +import com.intellij.util.ProcessingContext; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.psi.JetFile; + +/** + * @author Nikolay Krasko + */ +public class JetCompletionContributor extends CompletionContributor { + public JetCompletionContributor() { + extend(CompletionType.BASIC, PlatformPatterns.psiElement(), + new CompletionProvider() { + @Override + protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, + final @NotNull CompletionResultSet _result) { + + if (_result.getPrefixMatcher().getPrefix().isEmpty()) { + return; + } + + final PsiElement position = parameters.getPosition(); + if (!(position.getContainingFile() instanceof JetFile)) { + return; + } + + CompletionResultSet result = _result.withPrefixMatcher(CompletionUtil.findReferenceOrAlphanumericPrefix(parameters)); + JavaClassNameCompletionContributor.addAllClasses(parameters, JavaCompletionSorting.addJavaSorting( + parameters, result), parameters.getInvocationCount() <= 1, new Consumer() { + @Override + public void consume(LookupElement element) { + _result.addElement(element); + } + }); + } + }); + } + +// @Override +// public void beforeCompletion(@NotNull CompletionInitializationContext context) { +// final PsiFile file = context.getFile(); +// +// if (file instanceof JetFile) { +// autoImport(file, context.getStartOffset() - 1, context.getEditor()); +// } +// } +// +// private static void autoImport(final PsiFile file, int offset, final Editor editor) { +// final CharSequence text = editor.getDocument().getCharsSequence(); +// while (offset > 0 && Character.isJavaIdentifierPart(text.charAt(offset))) offset--; +// if (offset <= 0) return; +// +// while (offset > 0 && Character.isWhitespace(text.charAt(offset))) offset--; +// if (offset <= 0 || text.charAt(offset) != '.') return; +// +// offset--; +// +// while (offset > 0 && Character.isWhitespace(text.charAt(offset))) offset--; +// if (offset <= 0) return; +// +// final JetSimpleNameExpression nameExpression = +// PsiTreeUtil.findElementOfClassAtOffset(file, offset, JetSimpleNameExpression.class, false); +// if (nameExpression == null) return; +// +// final ImportClassFix importClassFix = new ImportClassFix(nameExpression); +// if (importClassFix.isAvailable(file.getProject(), editor, file)) { +// new ImportClassFix(nameExpression).invoke(file.getProject(), editor, file); +// } +// } +}