Search in sources :

Example 11 with IProperty

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);
}
Also used : IProperty(com.intellij.lang.properties.IProperty) PropertiesFile(com.intellij.lang.properties.psi.PropertiesFile) NotNull(org.jetbrains.annotations.NotNull)

Example 12 with IProperty

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());
}
Also used : IProperty(com.intellij.lang.properties.IProperty)

Example 13 with IProperty

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;
}
Also used : Locale(java.util.Locale) IProperty(com.intellij.lang.properties.IProperty) PropertiesFile(com.intellij.lang.properties.psi.PropertiesFile)

Example 14 with IProperty

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);
}
Also used : IProperty(com.intellij.lang.properties.IProperty) PropertiesFile(com.intellij.lang.properties.psi.PropertiesFile) Property(com.intellij.lang.properties.psi.Property) IProperty(com.intellij.lang.properties.IProperty) Nullable(org.jetbrains.annotations.Nullable)

Example 15 with IProperty

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));
    }
}
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

IProperty (com.intellij.lang.properties.IProperty)75 PropertiesFile (com.intellij.lang.properties.psi.PropertiesFile)45 PsiElement (com.intellij.psi.PsiElement)17 VirtualFile (com.intellij.openapi.vfs.VirtualFile)13 PsiFile (com.intellij.psi.PsiFile)13 NotNull (org.jetbrains.annotations.NotNull)13 Property (com.intellij.lang.properties.psi.Property)11 Project (com.intellij.openapi.project.Project)7 ArrayList (java.util.ArrayList)7 Nullable (org.jetbrains.annotations.Nullable)7 ResourceBundle (com.intellij.lang.properties.ResourceBundle)6 THashSet (gnu.trove.THashSet)6 XmlPropertiesFile (com.intellij.lang.properties.xml.XmlPropertiesFile)4 Module (com.intellij.openapi.module.Module)4 Collections (java.util.Collections)4 StructureViewTreeElement (com.intellij.ide.structureView.StructureViewTreeElement)3 PropertiesImplUtil (com.intellij.lang.properties.PropertiesImplUtil)3 TreeElement (com.intellij.ide.util.treeView.smartTree.TreeElement)2 XmlProperty (com.intellij.lang.properties.xml.XmlProperty)2 Logger (com.intellij.openapi.diagnostic.Logger)2