diff --git a/plugins/devkit/devkit-core/src/dom/impl/I18nReferenceContributor.java b/plugins/devkit/devkit-core/src/dom/impl/I18nReferenceContributor.java index 1e184a1512f1..97e5720d4b10 100644 --- a/plugins/devkit/devkit-core/src/dom/impl/I18nReferenceContributor.java +++ b/plugins/devkit/devkit-core/src/dom/impl/I18nReferenceContributor.java @@ -34,6 +34,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.devkit.DevKitBundle; import org.jetbrains.idea.devkit.dom.*; +import org.jetbrains.idea.devkit.references.MessageBundleReferenceContributor; import org.jetbrains.idea.devkit.util.PsiUtil; import javax.swing.*; @@ -41,8 +42,7 @@ import java.util.ArrayList; import java.util.List; import static com.intellij.patterns.StandardPatterns.or; -import static com.intellij.patterns.XmlPatterns.xmlAttributeValue; -import static com.intellij.patterns.XmlPatterns.xmlTag; +import static com.intellij.patterns.XmlPatterns.*; public class I18nReferenceContributor extends PsiReferenceContributor { @@ -117,8 +117,17 @@ public class I18nReferenceContributor extends PsiReferenceContributor { Holder.SPRING_TOOL_WINDOW_CONTENT), new PropertyKeyReferenceProvider(false, "displayName", "bundle")); - registrar.registerReferenceProvider(extensionAttributePattern(new String[]{"groupKey"}, Holder.ADVANCED_SETTINGS_EP), - new PropertyKeyReferenceProvider(false, "groupKey", null) { + + XmlAttributeValuePattern idAttributeWithoutTitleKeyPattern = + extensionAttributePattern(new String[]{"id"}, Holder.ADVANCED_SETTINGS_EP) + .andNot(xmlAttributeValue().withSuperParent(2, xmlTag().withChild(xmlAttribute("titleKey")))); + registrar.registerReferenceProvider(idAttributeWithoutTitleKeyPattern, + new PropertyKeyReferenceProvider(false, "id", null) { + @Override + protected @NotNull String getFinalKeyValue(String keyValue) { + return MessageBundleReferenceContributor.ADVANCED_SETTING + keyValue; + } + @Override protected String getFallbackBundleName() { return ApplicationBundle.BUNDLE; @@ -131,6 +140,13 @@ public class I18nReferenceContributor extends PsiReferenceContributor { return ApplicationBundle.BUNDLE; } }); + registrar.registerReferenceProvider(extensionAttributePattern(new String[]{"groupKey"}, Holder.ADVANCED_SETTINGS_EP), + new PropertyKeyReferenceProvider(false, "groupKey", null) { + @Override + protected String getFallbackBundleName() { + return ApplicationBundle.BUNDLE; + } + }); registrar.registerReferenceProvider(extensionAttributePattern(new String[]{"descriptionKey"}, Holder.ADVANCED_SETTINGS_EP), new PropertyKeyReferenceProvider(false, "descriptionKey", null) { @Override diff --git a/plugins/devkit/devkit-core/src/dom/impl/PropertyKeyReferenceProvider.java b/plugins/devkit/devkit-core/src/dom/impl/PropertyKeyReferenceProvider.java index bf16e004459d..fcdabc4b3ff5 100644 --- a/plugins/devkit/devkit-core/src/dom/impl/PropertyKeyReferenceProvider.java +++ b/plugins/devkit/devkit-core/src/dom/impl/PropertyKeyReferenceProvider.java @@ -93,7 +93,7 @@ class PropertyKeyReferenceProvider extends PsiReferenceProvider { } if (value != null) { - return new PsiReference[]{new MyPropertyReference(value, element, bundle, getFallbackBundleName())}; + return new PsiReference[]{new MyPropertyReference(getFinalKeyValue(value), element, bundle, getFallbackBundleName())}; } } return PsiReference.EMPTY_ARRAY; @@ -104,6 +104,11 @@ class PropertyKeyReferenceProvider extends PsiReferenceProvider { return null; } + @NotNull + protected String getFinalKeyValue(String keyValue) { + return keyValue; + } + private PsiReference[] getTagReferences(XmlTag element) { final XmlTag parent = PsiTreeUtil.getParentOfType(element, XmlTag.class); if (parent == null) return PsiReference.EMPTY_ARRAY; diff --git a/plugins/devkit/devkit-core/src/references/MessageBundleReferenceContributor.java b/plugins/devkit/devkit-core/src/references/MessageBundleReferenceContributor.java index a6bd807f71e2..c0bbeab181dd 100644 --- a/plugins/devkit/devkit-core/src/references/MessageBundleReferenceContributor.java +++ b/plugins/devkit/devkit-core/src/references/MessageBundleReferenceContributor.java @@ -53,7 +53,7 @@ public final class MessageBundleReferenceContributor extends PsiReferenceContrib @NonNls private static final String TEXT = ".text"; @NonNls private static final String DESCRIPTION = ".description"; @NonNls private static final String TRAILING_LABEL = ".trailingLabel"; - @NonNls private static final String ADVANCED_SETTING = "advanced.setting."; + @NonNls public static final String ADVANCED_SETTING = "advanced.setting."; @NonNls public static final String BUNDLE_PROPERTIES = "Bundle.properties"; @NonNls private static final String TOOLWINDOW_STRIPE_PREFIX = "toolwindow.stripe."; diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/MyBundle.properties b/plugins/devkit/devkit-java-tests/testData/codeInsight/MyBundle.properties index ab58f508133c..0721566edff3 100644 --- a/plugins/devkit/devkit-java-tests/testData/codeInsight/MyBundle.properties +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/MyBundle.properties @@ -1 +1,2 @@ -my.key=My Text \ No newline at end of file +my.key=My Text +advanced.setting.mySettingKey=Advanced Setting Key \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/extensionI18n.xml b/plugins/devkit/devkit-java-tests/testData/codeInsight/extensionI18n.xml index 46b538ecaa33..6424a9c3b6c0 100644 --- a/plugins/devkit/devkit-java-tests/testData/codeInsight/extensionI18n.xml +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/extensionI18n.xml @@ -87,6 +87,11 @@ key="INVALID_KEY" bundle="INVALID_BUNDLE"/> + + INVALID_KEY" + default="dummy"/> + +