blob: 998176a6306417922a319502162eb63b41e41139 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.codeInsight.template.postfix.settings;
import com.intellij.codeInsight.template.impl.TemplateSettings;
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplate;
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplateProvider;
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplatesUtils;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.components.*;
import com.intellij.openapi.util.Factory;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
import com.intellij.util.xmlb.XmlSerializer;
import com.intellij.util.xmlb.annotations.MapAnnotation;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.Map;
import java.util.Set;
@State(
name = "PostfixTemplatesSettings",
storages = {
@Storage(file = StoragePathMacros.APP_CONFIG + "/postfixTemplates.xml")
}
)
public class PostfixTemplatesSettings implements PersistentStateComponent<Element>, ExportableComponent {
public static final Factory<Set<String>> SET_FACTORY = new Factory<Set<String>>() {
@Override
public Set<String> create() {
return ContainerUtil.newHashSet();
}
};
private Map<String, Set<String>> myLangToDisabledTemplates = ContainerUtil.newHashMap();
private boolean postfixTemplatesEnabled = true;
private boolean templatesCompletionEnabled = true;
private int myShortcut = TemplateSettings.TAB_CHAR;
@Deprecated
@NotNull
private Map<String, Boolean> myTemplatesState = ContainerUtil.newHashMap();
@SuppressWarnings("UnusedDeclaration")
@Deprecated
@NotNull
public Map<String, Boolean> getTemplatesState() {
return myTemplatesState;
}
@SuppressWarnings("UnusedDeclaration")
@Deprecated
public void setTemplatesState(@NotNull Map<String, Boolean> templatesState) {
myTemplatesState = templatesState;
}
public boolean isTemplateEnabled(@NotNull PostfixTemplate template, @NotNull PostfixTemplateProvider provider) {
String langForProvider = PostfixTemplatesUtils.getLangForProvider(provider);
return isTemplateEnabled(template, langForProvider);
}
public boolean isTemplateEnabled(PostfixTemplate template, @NotNull String strictLangForProvider) {
Set<String> result = myLangToDisabledTemplates.get(strictLangForProvider);
return result == null || !result.contains(template.getKey());
}
public void disableTemplate(@NotNull PostfixTemplate template, @NotNull PostfixTemplateProvider provider) {
String langForProvider = PostfixTemplatesUtils.getLangForProvider(provider);
disableTemplate(template, langForProvider);
}
public void disableTemplate(PostfixTemplate template, String langForProvider) {
Set<String> state = ContainerUtil.getOrCreate(myLangToDisabledTemplates, langForProvider, SET_FACTORY);
state.add(template.getKey());
}
public boolean isPostfixTemplatesEnabled() {
return postfixTemplatesEnabled;
}
public void setPostfixTemplatesEnabled(boolean postfixTemplatesEnabled) {
this.postfixTemplatesEnabled = postfixTemplatesEnabled;
}
public boolean isTemplatesCompletionEnabled() {
return templatesCompletionEnabled;
}
public void setTemplatesCompletionEnabled(boolean templatesCompletionEnabled) {
this.templatesCompletionEnabled = templatesCompletionEnabled;
}
@NotNull
@MapAnnotation(entryTagName = "disabled-postfix-templates", keyAttributeName = "lang", surroundWithTag = false)
public Map<String, Set<String>> getLangDisabledTemplates() {
return myLangToDisabledTemplates;
}
public void setLangDisabledTemplates(@NotNull Map<String, Set<String>> templatesState) {
myLangToDisabledTemplates = templatesState;
}
public int getShortcut() {
return myShortcut;
}
public void setShortcut(int shortcut) {
myShortcut = shortcut;
}
@Nullable
public static PostfixTemplatesSettings getInstance() {
return ServiceManager.getService(PostfixTemplatesSettings.class);
}
@Nullable
@Override
public Element getState() {
return XmlSerializer.serialize(this, new SkipDefaultValuesSerializationFilters());
}
@Override
public void loadState(Element settings) {
XmlSerializer.deserializeInto(this, settings);
//Backward compatibility for java
//old settings were stored in "templatesState" field without language
//todo remove. for backward compatibility
if (!myTemplatesState.isEmpty()) {
myLangToDisabledTemplates.put("JAVA", ContainerUtil.newHashSet(myTemplatesState.keySet()));
myTemplatesState.clear();
}
}
@NotNull
@Override
public File[] getExportFiles() {
return new File[]{PathManager.getOptionsFile("postfixCompletion.xml")};
}
@NotNull
@Override
public String getPresentableName() {
return "Postfix Completion";
}
}