IDEA-147808 Make "Change template data language" more discoverable

This commit is contained in:
peter
2015-12-04 15:20:53 +01:00
parent 449e1b513a
commit f453eac5b6
4 changed files with 75 additions and 18 deletions
@@ -15,16 +15,17 @@
*/
package com.intellij.psi.templateLanguages;
import com.intellij.lang.LangBundle;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.psi.PsiManager;
import com.intellij.psi.FileViewProvider;
import com.intellij.lang.LangBundle;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author peter
@@ -60,7 +61,10 @@ public class ChangeTemplateDataLanguageAction extends AnAction {
Project project = e.getData(CommonDataKeys.PROJECT);
if (project == null) return;
final VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE);
editSettings(project, e.getData(CommonDataKeys.VIRTUAL_FILE));
}
public static void editSettings(@NotNull Project project, @Nullable final VirtualFile virtualFile) {
final TemplateDataLanguageConfigurable configurable = new TemplateDataLanguageConfigurable(project);
ShowSettingsUtil.getInstance().editConfigurable(project, configurable, new Runnable() {
@Override
@@ -71,6 +75,4 @@ public class ChangeTemplateDataLanguageAction extends AnAction {
}
});
}
}
@@ -81,6 +81,8 @@
<action id="ChangeTemplateDataLanguage" class="com.intellij.psi.templateLanguages.ChangeTemplateDataLanguageAction">
<add-to-group group-id="FileMenu" anchor="before" relative-to-action="ToggleReadOnlyAttribute"/>
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="ToggleReadOnlyAttribute"/>
<add-to-group group-id="EditorTabPopupMenu" anchor="after" relative-to-action="CopyReference"/>
</action>
<group id="PowerSaveGroup">
@@ -627,10 +629,6 @@
<add-to-group group-id="EditorTabPopupMenu" anchor="last"/>
</group>
<reference ref="ChangeTemplateDataLanguage">
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="ToggleReadOnlyAttribute"/>
</reference>
<group id="UsageView.Popup">
<action id="UsageView.Rerun" class="com.intellij.usages.actions.RerunSearchAction" icon="AllIcons.Actions.Rerun" use-shortcut-of="Rerun"/>
<separator/>
@@ -16,13 +16,25 @@
package com.intellij.codeInspection.htmlInspections;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.LocalQuickFixOnPsiElement;
import com.intellij.lang.LangBundle;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.templateLanguages.ChangeTemplateDataLanguageAction;
import com.intellij.psi.templateLanguages.ConfigurableTemplateLanguageFileViewProvider;
import com.intellij.psi.templateLanguages.TemplateLanguageFileViewProvider;
import com.intellij.psi.templateLanguages.TemplateLanguageUtil;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.FieldPanel;
import com.intellij.util.Function;
import com.intellij.util.PlatformIcons;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -119,4 +131,41 @@ public class HtmlUnknownTagInspection extends HtmlUnknownTagInspectionBase {
return result;
}
@Nullable
@Override
protected LocalQuickFix createChangeTemplateDataFix(PsiFile file) {
if (file != TemplateLanguageUtil.getTemplateFile(file)) return null;
FileViewProvider vp = file.getViewProvider();
if (vp instanceof ConfigurableTemplateLanguageFileViewProvider) {
final TemplateLanguageFileViewProvider viewProvider = (TemplateLanguageFileViewProvider)vp;
final String text =
LangBundle.message("quickfix.change.template.data.language.text", viewProvider.getTemplateDataLanguage().getDisplayName());
return new LocalQuickFixOnPsiElement(file) {
@NotNull
@Override
public String getText() {
return text;
}
@Override
public void invoke(@NotNull Project project,
@NotNull PsiFile file,
@NotNull PsiElement startElement,
@NotNull PsiElement endElement) {
ChangeTemplateDataLanguageAction.editSettings(project, file.getVirtualFile());
}
@Nls
@NotNull
@Override
public String getFamilyName() {
return "Change template data language";
}
};
}
return null;
}
}
@@ -24,6 +24,7 @@ import com.intellij.codeInspection.XmlQuickFixFactory;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Key;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.html.HtmlTag;
import com.intellij.psi.impl.source.html.dtd.HtmlElementDescriptorImpl;
import com.intellij.psi.xml.XmlFile;
@@ -38,6 +39,7 @@ import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
@@ -127,14 +129,15 @@ public class HtmlUnknownTagInspectionBase extends HtmlUnknownElementInspection {
List<LocalQuickFix> quickfixes = new ArrayList<LocalQuickFix>();
quickfixes.add(action);
if (isOnTheFly) {
LocalQuickFix fix;
if (startTagName.getContainingFile() instanceof XmlFile) {
fix = XmlQuickFixFactory.getInstance().createNSDeclarationIntentionFix(startTagName, "", null);
PsiFile file = startTagName.getContainingFile();
if (file instanceof XmlFile) {
quickfixes.add(XmlQuickFixFactory.getInstance().createNSDeclarationIntentionFix(startTagName, "", null));
}
else {
fix = null;
}
ContainerUtil.addIfNotNull(fix, quickfixes);
// People using non-HTML as their template data language (but having not changed this in the IDE)
// will most likely see 'unknown html tag' error, because HTML is usually the default.
// So if they check quick fixes for this error they'll discover Change Template Data Language feature.
ContainerUtil.addIfNotNull(quickfixes, createChangeTemplateDataFix(file));
}
if (HtmlUtil.isHtml5Tag(name) && !HtmlUtil.hasNonHtml5Doctype(tag)) {
quickfixes.add(new SwitchToHtml5WithHighPriorityAction());
@@ -152,4 +155,9 @@ public class HtmlUnknownTagInspectionBase extends HtmlUnknownElementInspection {
}
}
}
@Nullable
protected LocalQuickFix createChangeTemplateDataFix(PsiFile file) {
return null;
}
}