use of com.intellij.lang.properties.IProperty in project intellij-community by JetBrains.
the class PropertyReferenceBase method multiResolve.
@NotNull
public ResolveResult[] multiResolve(final boolean incompleteCode) {
final String key = getKeyText();
List<IProperty> properties;
final List<PropertiesFile> propertiesFiles = getPropertiesFiles();
if (propertiesFiles == null) {
properties = PropertiesImplUtil.findPropertiesByKey(getElement().getProject(), key);
} else {
properties = new ArrayList<>();
for (PropertiesFile propertiesFile : propertiesFiles) {
properties.addAll(propertiesFile.findPropertiesByKey(key));
}
}
// put default properties file first
ContainerUtil.quickSort(properties, (o1, o2) -> {
String name1 = o1.getPropertiesFile().getName();
String name2 = o2.getPropertiesFile().getName();
return Comparing.compare(name1, name2);
});
return getResolveResults(properties);
}
use of com.intellij.lang.properties.IProperty in project intellij-community by JetBrains.
the class KeyChooserDialog method fillPropertyList.
private void fillPropertyList() {
myPairs = new ArrayList<>();
final List<IProperty> properties = myBundle.getProperties();
for (IProperty property : properties) {
final String key = property.getUnescapedKey();
final String value = property.getValue();
if (key != null) {
myPairs.add(Couple.of(key, value != null ? value : NULL));
}
}
Collections.sort(myPairs, new MyPairComparator());
}
use of com.intellij.lang.properties.IProperty in project intellij-community by JetBrains.
the class StringDescriptorManager method resolveToProperty.
public IProperty resolveToProperty(@NotNull StringDescriptor descriptor, @Nullable Locale locale) {
String propFileName = descriptor.getDottedBundleName();
Pair<Locale, String> cacheKey = Pair.create(locale, propFileName);
PropertiesFile propertiesFile;
synchronized (myPropertiesFileCache) {
propertiesFile = myPropertiesFileCache.get(cacheKey);
}
if (propertiesFile == null || !propertiesFile.getContainingFile().isValid()) {
propertiesFile = PropertiesUtilBase.getPropertiesFile(propFileName, myModule, locale);
synchronized (myPropertiesFileCache) {
myPropertiesFileCache.put(cacheKey, propertiesFile);
}
}
if (propertiesFile != null) {
final IProperty propertyByKey = propertiesFile.findPropertyByKey(descriptor.getKey());
if (propertyByKey != null) {
return propertyByKey;
}
}
return null;
}
use of com.intellij.lang.properties.IProperty in project intellij-community by JetBrains.
the class GotoPropertyParentDeclarationHandler method getGotoDeclarationTarget.
@Nullable
@Override
public PsiElement getGotoDeclarationTarget(@Nullable PsiElement sourceElement, Editor editor) {
Property property = findProperty(sourceElement);
if (property == null)
return null;
final String key = property.getKey();
if (key == null)
return null;
PropertiesFile currentFile = PropertiesImplUtil.getPropertiesFile(property.getContainingFile());
if (currentFile == null)
return null;
do {
currentFile = PropertiesUtil.getParent(currentFile, currentFile.getResourceBundle().getPropertiesFiles());
if (currentFile != null) {
final IProperty parent = currentFile.findPropertyByKey(key);
if (parent != null)
return parent.getPsiElement();
} else {
return null;
}
} while (true);
}
use of com.intellij.lang.properties.IProperty 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