mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
simplify the CodeCompletionAction hierarchy
This commit is contained in:
+1
-1
@@ -68,7 +68,7 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
|
||||
if (c == '#') {
|
||||
context.setLaterRunnable(new Runnable() {
|
||||
public void run() {
|
||||
new CodeCompletionHandlerBase(CompletionType.BASIC).invoke(project, editor, file);
|
||||
new CodeCompletionHandlerBase(CompletionType.BASIC).invokeCompletion(project, editor);
|
||||
}
|
||||
});
|
||||
} else if (c == '.' && PsiTreeUtil.getParentOfType(position, PsiParameterList.class) == null) {
|
||||
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.codeInsight.editorActions.smartEnter;
|
||||
|
||||
import com.intellij.codeInsight.completion.actions.CodeCompletionAction;
|
||||
import com.intellij.openapi.actionSystem.ActionManager;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiJavaCodeReferenceElement;
|
||||
import com.intellij.psi.JavaResolveResult;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: max
|
||||
* Date: Sep 8, 2003
|
||||
* Time: 3:25:56 PM
|
||||
* To change this template use Options | File Templates.
|
||||
*/
|
||||
public class CompletionFixer implements Fixer {
|
||||
public void apply(Editor editor, JavaSmartEnterProcessor processor, PsiElement psiElement) throws IncorrectOperationException {
|
||||
if (psiElement instanceof PsiJavaCodeReferenceElement) {
|
||||
PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement) psiElement;
|
||||
final JavaResolveResult resolved = ref.advancedResolve(true);
|
||||
if (resolved == null || resolved.getElement() == null) {
|
||||
editor.getCaretModel().moveToOffset(ref.getTextRange().getEndOffset());
|
||||
final CodeCompletionAction completionAction = (CodeCompletionAction) ActionManager.getInstance().getAction("CodeCompletion");
|
||||
completionAction.getHandler().invoke(psiElement.getProject(), editor, psiElement.getContainingFile());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-3
@@ -9,8 +9,6 @@ import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.module.JavaModuleType;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
|
||||
import com.intellij.testFramework.PsiTestUtil;
|
||||
import com.intellij.testFramework.TestDataPath;
|
||||
|
||||
@@ -223,7 +221,7 @@ public class ClassNameCompletionTest extends CompletionTestCase {
|
||||
|
||||
private void performAction() {
|
||||
CodeCompletionHandlerBase handler = new CodeCompletionHandlerBase(CompletionType.CLASS_NAME);
|
||||
handler.invoke(myProject, myEditor, myFile);
|
||||
handler.invokeCompletion(myProject, myEditor);
|
||||
final LookupManager instance = LookupManager.getInstance(myProject);
|
||||
if(instance instanceof LookupManagerImpl){
|
||||
final LookupManagerImpl testLookupManager = ((LookupManagerImpl)instance);
|
||||
|
||||
+2
-2
@@ -334,11 +334,11 @@ public class CompletionStyleTest extends LightCodeInsightTestCase{
|
||||
}
|
||||
|
||||
private void performSmartCompletion(){
|
||||
new CodeCompletionHandlerBase(CompletionType.SMART).invoke(getProject(), getEditor(), getFile());
|
||||
new CodeCompletionHandlerBase(CompletionType.SMART).invokeCompletion(getProject(), getEditor());
|
||||
}
|
||||
|
||||
private void performNormalCompletion(){
|
||||
new CodeCompletionHandlerBase(CompletionType.BASIC).invoke(getProject(), getEditor(), getFile());
|
||||
new CodeCompletionHandlerBase(CompletionType.BASIC).invokeCompletion(getProject(), getEditor());
|
||||
}
|
||||
|
||||
private void select(char completionChar, int index){
|
||||
|
||||
+4
-2
@@ -83,8 +83,10 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
|
||||
this.autopopup = autopopup;
|
||||
}
|
||||
|
||||
public final void invoke(final Project project, final Editor editor) {
|
||||
invoke(project, editor, PsiUtilBase.getPsiFileInEditor(editor, project));
|
||||
public final void invokeCompletion(final Project project, final Editor editor) {
|
||||
PsiFile file = PsiUtilBase.getPsiFileInEditor(editor, project);
|
||||
assert file != null;
|
||||
invoke(project, editor, file);
|
||||
}
|
||||
|
||||
public final void invoke(@NotNull final Project project, @NotNull final Editor editor, @NotNull PsiFile psiFile) {
|
||||
|
||||
+36
-11
@@ -15,36 +15,61 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.completion.actions;
|
||||
|
||||
import com.intellij.codeInsight.actions.BaseCodeInsightAction;
|
||||
import com.intellij.codeInsight.completion.CodeCompletionFeatures;
|
||||
import com.intellij.codeInsight.completion.CodeCompletionHandlerBase;
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.codeInsight.hint.HintManagerImpl;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public abstract class BaseCodeCompletionAction extends BaseCodeInsightAction implements HintManagerImpl.ActionToIgnore, DumbAware{
|
||||
protected BaseCodeCompletionAction() {
|
||||
public abstract class BaseCodeCompletionAction extends AnAction implements HintManagerImpl.ActionToIgnore, DumbAware {
|
||||
private CompletionType myCompletionType;
|
||||
|
||||
protected BaseCodeCompletionAction(CompletionType completionType) {
|
||||
myCompletionType = completionType;
|
||||
setEnabledInModalContext(true);
|
||||
}
|
||||
|
||||
public void actionPerformedImpl(@NotNull final Project project, final Editor editor) {
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
DataContext dataContext = e.getDataContext();
|
||||
Project project = PlatformDataKeys.PROJECT.getData(dataContext);
|
||||
Editor editor = PlatformDataKeys.EDITOR.getData(dataContext);
|
||||
|
||||
switch (myCompletionType) {
|
||||
case BASIC: FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EDITING_COMPLETION_BASIC);
|
||||
case SMART: FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EDITING_COMPLETION_SMARTTYPE_GENERAL);
|
||||
case CLASS_NAME: FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EDITING_COMPLETION_CLASSNAME);
|
||||
}
|
||||
|
||||
new CodeCompletionHandlerBase(myCompletionType).invokeCompletion(project, editor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
DataContext dataContext = e.getDataContext();
|
||||
e.getPresentation().setEnabled(false);
|
||||
Project project = PlatformDataKeys.PROJECT.getData(dataContext);
|
||||
if (project == null) return;
|
||||
|
||||
Editor editor = PlatformDataKeys.EDITOR.getData(dataContext);
|
||||
if (editor == null) return;
|
||||
|
||||
final PsiFile psiFile = PsiUtilBase.getPsiFileInEditor(editor, project);
|
||||
if (psiFile == null) return;
|
||||
|
||||
if (!ApplicationManager.getApplication().isUnitTestMode() && !editor.getContentComponent().isShowing()) return;
|
||||
getHandler().invoke(project, editor, psiFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isValidForLookup() {
|
||||
return true;
|
||||
e.getPresentation().setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-14
@@ -16,26 +16,14 @@
|
||||
|
||||
package com.intellij.codeInsight.completion.actions;
|
||||
|
||||
import com.intellij.codeInsight.completion.CodeCompletionFeatures;
|
||||
import com.intellij.codeInsight.completion.CodeCompletionHandlerBase;
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class ClassNameCompletionAction extends BaseCodeCompletionAction{
|
||||
|
||||
public void actionPerformedImpl(@NotNull Project project, Editor editor) {
|
||||
FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EDITING_COMPLETION_CLASSNAME);
|
||||
super.actionPerformedImpl(project, editor);
|
||||
}
|
||||
|
||||
protected CodeCompletionHandlerBase getHandler() {
|
||||
return new CodeCompletionHandlerBase(CompletionType.CLASS_NAME);
|
||||
public ClassNameCompletionAction() {
|
||||
super(CompletionType.CLASS_NAME);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-14
@@ -16,26 +16,14 @@
|
||||
|
||||
package com.intellij.codeInsight.completion.actions;
|
||||
|
||||
import com.intellij.codeInsight.completion.CodeCompletionFeatures;
|
||||
import com.intellij.codeInsight.completion.CodeCompletionHandlerBase;
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class CodeCompletionAction extends BaseCodeCompletionAction {
|
||||
|
||||
public void actionPerformedImpl(@NotNull Project project, Editor editor) {
|
||||
FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EDITING_COMPLETION_BASIC);
|
||||
super.actionPerformedImpl(project, editor);
|
||||
}
|
||||
|
||||
public CodeCompletionHandlerBase getHandler() {
|
||||
return new CodeCompletionHandlerBase(CompletionType.BASIC);
|
||||
public CodeCompletionAction() {
|
||||
super(CompletionType.BASIC);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-23
@@ -16,36 +16,15 @@
|
||||
|
||||
package com.intellij.codeInsight.completion.actions;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightActionHandler;
|
||||
import com.intellij.codeInsight.completion.CodeCompletionFeatures;
|
||||
import com.intellij.codeInsight.completion.CodeCompletionHandlerBase;
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class SmartCodeCompletionAction extends BaseCodeCompletionAction{
|
||||
|
||||
protected CodeInsightActionHandler getHandler() {
|
||||
return createHandler();
|
||||
}
|
||||
|
||||
public static CodeInsightActionHandler createHandler() {
|
||||
return new CodeInsightActionHandler() {
|
||||
public void invoke(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
|
||||
FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EDITING_COMPLETION_SMARTTYPE_GENERAL);
|
||||
new CodeCompletionHandlerBase(CompletionType.SMART).invoke(project, editor, file);
|
||||
}
|
||||
|
||||
public boolean startInWriteAction() {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
public SmartCodeCompletionAction() {
|
||||
super(CompletionType.SMART);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -122,7 +122,7 @@ public class CompletionAutoPopupHandler extends TypedHandlerDelegate {
|
||||
}
|
||||
|
||||
public static void invokeAutoPopupCompletion(Project project, final Editor editor) {
|
||||
new CodeCompletionHandlerBase(CompletionType.BASIC, false, true).invoke(project, editor);
|
||||
new CodeCompletionHandlerBase(CompletionType.BASIC, false, true).invokeCompletion(project, editor);
|
||||
|
||||
final AutoPopupState state = new AutoPopupState(project, editor);
|
||||
editor.putUserData(STATE_KEY, state);
|
||||
|
||||
@@ -193,7 +193,7 @@ public class AntCompletionTest extends LightCodeInsightTestCase {
|
||||
}
|
||||
|
||||
private static void performNormalCompletion() {
|
||||
new CodeCompletionHandlerBase(CompletionType.BASIC).invoke(getProject(), getEditor(), myFile);
|
||||
new CodeCompletionHandlerBase(CompletionType.BASIC).invokeCompletion(getProject(), getEditor());
|
||||
}
|
||||
|
||||
private static void select(char completionChar, LookupElement item) {
|
||||
|
||||
+1
-1
@@ -67,7 +67,7 @@ public class GroovyClassNameCompletionTest extends LightCodeInsightFixtureTestCa
|
||||
|
||||
private void forceCompletion() {
|
||||
CodeCompletionHandlerBase handler = new CodeCompletionHandlerBase(CompletionType.CLASS_NAME);
|
||||
handler.invoke(myFixture.getProject(), myFixture.getEditor(), myFixture.getFile());
|
||||
handler.invokeCompletion(myFixture.getProject(), myFixture.getEditor());
|
||||
final LookupManager instance = LookupManager.getInstance(myFixture.getProject());
|
||||
if(instance.getActiveLookup() != null)
|
||||
instance.forceSelection(Lookup.NORMAL_SELECT_CHAR, 1);
|
||||
|
||||
Reference in New Issue
Block a user