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"/>
+
+