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;
}
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);
}
}
}
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");
}
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());
}
}
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));
}
}
Aggregations