Search in sources :

Example 31 with Editor

use of com.intellij.openapi.editor.Editor in project intellij-community by JetBrains.

the class JavaFxPropertyRenameHandler method getReferences.

@NotNull
private static PsiReference[] getReferences(DataContext dataContext) {
    final Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
    PsiFile file = CommonDataKeys.PSI_FILE.getData(dataContext);
    if (file == null && editor != null && ApplicationManager.getApplication().isUnitTestMode()) {
        final Project project = editor.getProject();
        if (project != null) {
            file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
        }
    }
    if (editor != null && file instanceof XmlFile && JavaFxFileTypeFactory.isFxml(file)) {
        final int offset = editor.getCaretModel().getOffset();
        final PsiReference reference = file.findReferenceAt(offset);
        if (reference instanceof PsiMultiReference) {
            return ((PsiMultiReference) reference).getReferences();
        }
        if (isKnown(reference))
            return new PsiReference[] { reference };
    }
    return PsiReference.EMPTY_ARRAY;
}
Also used : Project(com.intellij.openapi.project.Project) XmlFile(com.intellij.psi.xml.XmlFile) PsiMultiReference(com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference) Editor(com.intellij.openapi.editor.Editor) NotNull(org.jetbrains.annotations.NotNull)

Example 32 with Editor

use of com.intellij.openapi.editor.Editor in project intellij-community by JetBrains.

the class XPathInsertHandler method handleInsert.

public void handleInsert(InsertionContext context, LookupElement lookupItem) {
    final Object object = lookupItem.getObject();
    LOG.debug("object = " + object);
    handleInsertImpl(context, lookupItem, context.getCompletionChar());
    final Editor editor = context.getEditor();
    final CharSequence charsSequence = editor.getDocument().getCharsSequence();
    final CaretModel caretModel = editor.getCaretModel();
    int offset = caretModel.getOffset();
    if (object instanceof Lookup) {
        final Lookup item = (Lookup) object;
        if (item.isFunction()) {
            if (charAt(charsSequence, offset) != '(') {
                EditorModificationUtil.insertStringAtCaret(editor, "()");
                if (item.hasParameters()) {
                    caretModel.moveCaretRelatively(-1, 0, false, false, true);
                }
            } else {
                caretModel.moveCaretRelatively(1, 0, false, false, true);
            }
        } else if (item instanceof NamespaceLookup) {
            if (charAt(charsSequence, offset) != ':') {
                EditorModificationUtil.insertStringAtCaret(editor, ":");
                return;
            }
        }
    }
    if (context.getCompletionChar() == '\t') {
        if (charAt(charsSequence, offset) == ',') {
            offset++;
            caretModel.moveCaretRelatively(1, 0, false, false, true);
            while (charAt(charsSequence, offset++) == ' ') {
                caretModel.moveCaretRelatively(1, 0, false, false, true);
            }
        } else if (isIdentifier(charAt(charsSequence, offset)) && isIdentifier(charAt(charsSequence, offset - 1))) {
            EditorModificationUtil.insertStringAtCaret(editor, " ");
        } else if (charAt(charsSequence, offset) == ':') {
            caretModel.moveCaretRelatively(1, 0, false, false, true);
        }
    }
}
Also used : CaretModel(com.intellij.openapi.editor.CaretModel) Editor(com.intellij.openapi.editor.Editor)

Example 33 with Editor

use of com.intellij.openapi.editor.Editor in project intellij-community by JetBrains.

the class PyLiveTemplatesExpandingTest method doMultiFileTest.

private void doMultiFileTest() {
    myFixture.copyDirectoryToProject(getTestName(false), "");
    myFixture.configureByFile("a.py");
    final Editor editor = myFixture.getEditor();
    final Project project = myFixture.getProject();
    new ListTemplatesAction().actionPerformedImpl(project, editor);
    final LookupImpl lookup = (LookupImpl) LookupManager.getActiveLookup(editor);
    assertNotNull(lookup);
    lookup.finishLookup(Lookup.NORMAL_SELECT_CHAR);
    myFixture.checkResultByFile(getTestName(false) + "/a_after.py");
}
Also used : Project(com.intellij.openapi.project.Project) LookupImpl(com.intellij.codeInsight.lookup.impl.LookupImpl) Editor(com.intellij.openapi.editor.Editor) ListTemplatesAction(com.intellij.codeInsight.template.impl.actions.ListTemplatesAction)

Example 34 with Editor

use of com.intellij.openapi.editor.Editor in project intellij-community by JetBrains.

the class ConvertConcatenationToGstringIntention method processIntention.

@Override
protected void processIntention(@NotNull PsiElement element, @NotNull Project project, Editor editor) throws IncorrectOperationException {
    final PsiFile file = element.getContainingFile();
    final int offset = editor.getCaretModel().getOffset();
    final AccessToken accessToken = ReadAction.start();
    final List<GrExpression> expressions;
    try {
        expressions = collectExpressions(file, offset);
    } finally {
        accessToken.finish();
    }
    final Document document = editor.getDocument();
    if (expressions.size() == 1) {
        invokeImpl(expressions.get(0), document);
    } else if (!expressions.isEmpty()) {
        if (ApplicationManager.getApplication().isUnitTestMode()) {
            invokeImpl(expressions.get(expressions.size() - 1), document);
            return;
        }
        IntroduceTargetChooser.showChooser(editor, expressions, new Pass<GrExpression>() {

            @Override
            public void pass(final GrExpression selectedValue) {
                invokeImpl(selectedValue, document);
            }
        }, grExpression -> grExpression.getText());
    }
}
Also used : TypeConversionUtil(com.intellij.psi.util.TypeConversionUtil) GrExpression(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression) WriteAction(com.intellij.openapi.application.WriteAction) GrLiteralImpl(org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrLiteralImpl) org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals) Document(com.intellij.openapi.editor.Document) ReadAction(com.intellij.openapi.application.ReadAction) ArrayList(java.util.ArrayList) AccessToken(com.intellij.openapi.application.AccessToken) PsiTreeUtil(com.intellij.psi.util.PsiTreeUtil) GroovyCommonClassNames(org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames) Intention(org.jetbrains.plugins.groovy.intentions.base.Intention) Project(com.intellij.openapi.project.Project) GroovyPsiElement(org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement) IntroduceTargetChooser(com.intellij.refactoring.IntroduceTargetChooser) GroovyPsiElementFactory(org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory) PsiElementPredicate(org.jetbrains.plugins.groovy.intentions.base.PsiElementPredicate) GroovyTokenTypes(org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes) GrMethodCallExpression(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression) GrStringUtil(org.jetbrains.plugins.groovy.lang.psi.util.GrStringUtil) MethodSignatureUtil(com.intellij.psi.util.MethodSignatureUtil) IncorrectOperationException(com.intellij.util.IncorrectOperationException) GroovyRecursiveElementVisitor(org.jetbrains.plugins.groovy.lang.psi.GroovyRecursiveElementVisitor) TypesUtil(org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil) Editor(com.intellij.openapi.editor.Editor) GrReferenceExpression(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression) GroovyResolveResult(org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult) CommandProcessor(com.intellij.openapi.command.CommandProcessor) Nullable(org.jetbrains.annotations.Nullable) GrBinaryExpression(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrBinaryExpression) List(java.util.List) Pass(com.intellij.openapi.util.Pass) ErrorUtil(org.jetbrains.plugins.groovy.lang.psi.util.ErrorUtil) ApplicationManager(com.intellij.openapi.application.ApplicationManager) com.intellij.psi(com.intellij.psi) NotNull(org.jetbrains.annotations.NotNull) Ref(com.intellij.openapi.util.Ref) PsiUtil(org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil) Pass(com.intellij.openapi.util.Pass) AccessToken(com.intellij.openapi.application.AccessToken) GrExpression(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression) Document(com.intellij.openapi.editor.Document)

Example 35 with Editor

use of com.intellij.openapi.editor.Editor in project intellij-community by JetBrains.

the class NewPropertyAction method actionPerformed.

@Override
public void actionPerformed(final AnActionEvent e) {
    final Project project = getEventProject(e);
    if (project == null) {
        return;
    }
    ResourceBundleEditor resourceBundleEditor;
    final DataContext context = e.getDataContext();
    FileEditor fileEditor = PlatformDataKeys.FILE_EDITOR.getData(context);
    if (fileEditor instanceof ResourceBundleEditor) {
        resourceBundleEditor = (ResourceBundleEditor) fileEditor;
    } else {
        final Editor editor = CommonDataKeys.EDITOR.getData(context);
        resourceBundleEditor = editor != null ? editor.getUserData(ResourceBundleEditor.RESOURCE_BUNDLE_EDITOR_KEY) : null;
    }
    if (resourceBundleEditor == null) {
        for (FileEditor editor : FileEditorManager.getInstance(project).getSelectedEditors()) {
            if (editor instanceof ResourceBundleEditor) {
                resourceBundleEditor = (ResourceBundleEditor) editor;
            }
        }
        if (resourceBundleEditor == null) {
            return;
        }
    }
    final ResourceBundle bundle = resourceBundleEditor.getResourceBundle();
    final VirtualFile file = bundle.getDefaultPropertiesFile().getVirtualFile();
    final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(file);
    if (status.hasReadonlyFiles()) {
        Messages.showErrorDialog(bundle.getProject(), String.format("Resource bundle '%s' has read-only default properties file", bundle.getBaseName()), "Can't Create New Property");
        return;
    }
    final String prefix;
    final String separator;
    final String place = e.getPlace();
    if (ActionPlaces.STRUCTURE_VIEW_TOOLBAR.equals(place)) {
        prefix = null;
        separator = null;
    } else {
        final ResourceBundleEditorViewElement selectedElement = resourceBundleEditor.getSelectedElementIfOnlyOne();
        if (selectedElement == null) {
            return;
        }
        if (selectedElement instanceof PropertiesPrefixGroup) {
            final PropertiesPrefixGroup group = (PropertiesPrefixGroup) selectedElement;
            prefix = group.getPrefix();
            separator = group.getSeparator();
        } else if (selectedElement instanceof ResourceBundlePropertyStructureViewElement || selectedElement instanceof ResourceBundleFileStructureViewElement) {
            prefix = null;
            separator = null;
        } else {
            throw new IllegalStateException("unsupported type: " + selectedElement.getClass());
        }
    }
    final ResourceBundlePropertiesUpdateManager propertiesUpdateManager = resourceBundleEditor.getPropertiesInsertDeleteManager();
    final NewPropertyNameValidator nameValidator = new NewPropertyNameValidator(resourceBundleEditor, prefix, separator);
    final String keyToInsert;
    final IProperty anchor;
    IProperty selectedProperty = resourceBundleEditor.getSelectedProperty();
    if (propertiesUpdateManager.isAlphaSorted() || !propertiesUpdateManager.isSorted() || selectedProperty == null) {
        keyToInsert = Messages.showInputDialog(project, PropertiesBundle.message("new.property.dialog.name.prompt.text"), PropertiesBundle.message("new.property.dialog.title"), Messages.getQuestionIcon(), null, nameValidator);
        anchor = null;
    } else {
        final Pair<String, Boolean> keyNameAndInsertPlaceModification = Messages.showInputDialogWithCheckBox(PropertiesBundle.message("new.property.dialog.name.prompt.text"), PropertiesBundle.message("new.property.dialog.title"), PropertiesBundle.message("new.property.dialog.checkbox.text"), PropertiesComponent.getInstance().getBoolean(ADD_NEW_PROPERTY_AFTER_SELECTED_PROP, false), true, Messages.getQuestionIcon(), null, nameValidator);
        keyToInsert = keyNameAndInsertPlaceModification.getFirst();
        final Boolean insertAfterSelectedProperty = keyNameAndInsertPlaceModification.getSecond();
        PropertiesComponent.getInstance().setValue(ADD_NEW_PROPERTY_AFTER_SELECTED_PROP, insertAfterSelectedProperty, false);
        anchor = insertAfterSelectedProperty ? selectedProperty : null;
    }
    if (keyToInsert != null) {
        final ResourceBundlePropertiesUpdateManager updateManager = resourceBundleEditor.getPropertiesInsertDeleteManager();
        final Runnable insertionAction = () -> {
            if (anchor == null) {
                updateManager.insertNewProperty(keyToInsert, "");
            } else {
                final String anchorKey = anchor.getKey();
                LOG.assertTrue(anchorKey != null);
                updateManager.insertAfter(keyToInsert, "", anchorKey);
            }
        };
        ResourceBundleEditor finalResourceBundleEditor = resourceBundleEditor;
        ApplicationManager.getApplication().runWriteAction(() -> {
            WriteCommandAction.runWriteCommandAction(bundle.getProject(), insertionAction);
            finalResourceBundleEditor.flush();
        });
        resourceBundleEditor.updateTreeRoot();
        resourceBundleEditor.getStructureViewComponent().getTreeBuilder().queueUpdate().doWhenDone(() -> finalResourceBundleEditor.selectProperty(keyToInsert));
    }
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) FileEditor(com.intellij.openapi.fileEditor.FileEditor) ReadonlyStatusHandler(com.intellij.openapi.vfs.ReadonlyStatusHandler) Project(com.intellij.openapi.project.Project) IProperty(com.intellij.lang.properties.IProperty) PropertiesPrefixGroup(com.intellij.lang.properties.structureView.PropertiesPrefixGroup) ResourceBundle(com.intellij.lang.properties.ResourceBundle) Editor(com.intellij.openapi.editor.Editor) FileEditor(com.intellij.openapi.fileEditor.FileEditor)

Aggregations

Editor (com.intellij.openapi.editor.Editor)748 Project (com.intellij.openapi.project.Project)281 PsiFile (com.intellij.psi.PsiFile)171 VirtualFile (com.intellij.openapi.vfs.VirtualFile)122 NotNull (org.jetbrains.annotations.NotNull)110 Document (com.intellij.openapi.editor.Document)108 PsiElement (com.intellij.psi.PsiElement)107 Nullable (org.jetbrains.annotations.Nullable)103 TextRange (com.intellij.openapi.util.TextRange)77 FileEditor (com.intellij.openapi.fileEditor.FileEditor)67 TextEditor (com.intellij.openapi.fileEditor.TextEditor)48 ArrayList (java.util.ArrayList)39 IncorrectOperationException (com.intellij.util.IncorrectOperationException)36 List (java.util.List)36 EditorEx (com.intellij.openapi.editor.ex.EditorEx)35 OpenFileDescriptor (com.intellij.openapi.fileEditor.OpenFileDescriptor)29 DataContext (com.intellij.openapi.actionSystem.DataContext)27 ApplicationManager (com.intellij.openapi.application.ApplicationManager)25 FileEditorManager (com.intellij.openapi.fileEditor.FileEditorManager)25 TextAttributes (com.intellij.openapi.editor.markup.TextAttributes)22