mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Additional file names for TypoScript file type
This commit is contained in:
@@ -10,5 +10,5 @@ color.settings.bad.character=Bad character
|
||||
color.settings.ignored.text=Ignored text
|
||||
color.settings.condition=Condition
|
||||
color.settings.include=Include
|
||||
file.type.registration.warning=<html>*.{0} files are not associated with TypoScript file type. <a href=\"fix\">Fix</a>?</html>
|
||||
file.type.registration.warning=<html>{0} files are not associated with TypoScript file type. <a href=\"fix\">Fix</a>?</html>
|
||||
plugin.title=TypoScript Support
|
||||
@@ -13,6 +13,7 @@ import java.util.ResourceBundle;
|
||||
* Date: 12.04.12
|
||||
*/
|
||||
public class TypoScriptBundle {
|
||||
@NonNls public static String NOTIFICATION_ID = "TypoScript";
|
||||
private static Reference<ResourceBundle> ourBundle;
|
||||
|
||||
@NonNls public static final String TYPOSCRIPT_BUNDLE = "messages.TypoScriptBundle";
|
||||
|
||||
@@ -7,18 +7,24 @@ import com.intellij.notification.Notifications;
|
||||
import com.intellij.openapi.application.AccessToken;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ApplicationComponent;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileTypes.*;
|
||||
import com.intellij.util.containers.hash.HashMap;
|
||||
import com.jetbrains.typoscript.lang.TypoScriptFileType;
|
||||
import com.jetbrains.typoscript.lang.TypoScriptFileTypeFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.event.HyperlinkEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author lene
|
||||
* Date: 24.04.12
|
||||
*/
|
||||
public class TypoScriptExtensionMappingChecker implements ApplicationComponent {
|
||||
private static final Logger LOG = Logger.getInstance(TypoScriptExtensionMappingChecker.class);
|
||||
private final FileTypeManager myFileTypeManager;
|
||||
|
||||
public TypoScriptExtensionMappingChecker(final FileTypeManager fileTypeManager) {
|
||||
@@ -34,33 +40,67 @@ public class TypoScriptExtensionMappingChecker implements ApplicationComponent {
|
||||
checkFileTypeAssociation();
|
||||
}
|
||||
|
||||
public void disposeComponent() { }
|
||||
public void disposeComponent() {
|
||||
}
|
||||
|
||||
private void checkFileTypeAssociation() {
|
||||
final FileType registered = myFileTypeManager.getFileTypeByExtension(TypoScriptFileType.DEFAULT_EXTENSION);
|
||||
if (registered != TypoScriptFileType.INSTANCE) {
|
||||
final Map<FileNameMatcher, FileType> fileNames = getNonTSMatchers(TypoScriptFileTypeFactory.FILE_NAME_MATCHERS);
|
||||
if (!fileNames.isEmpty()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
boolean addComma = false;
|
||||
for (Map.Entry<FileNameMatcher, FileType> entry : fileNames.entrySet()) {
|
||||
if (addComma) {
|
||||
sb.append(", ");
|
||||
}
|
||||
sb.append(entry.getKey().getPresentableString());
|
||||
addComma |= true;
|
||||
}
|
||||
final String fileMatchers = sb.toString();
|
||||
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
Notifications.Bus.notify(
|
||||
new Notification("TypoScript", TypoScriptBundle.message("plugin.title"),
|
||||
TypoScriptBundle.message("file.type.registration.warning", TypoScriptFileType.DEFAULT_EXTENSION),
|
||||
new Notification(TypoScriptBundle.NOTIFICATION_ID, TypoScriptBundle.message("plugin.title"),
|
||||
TypoScriptBundle.message("file.type.registration.warning", fileMatchers),
|
||||
NotificationType.WARNING, new NotificationListener() {
|
||||
public void hyperlinkUpdate(@NotNull final Notification notification, @NotNull final HyperlinkEvent event) {
|
||||
fixAssociation();
|
||||
notification.expire();
|
||||
}
|
||||
}));
|
||||
public void hyperlinkUpdate(@NotNull final Notification notification, @NotNull final HyperlinkEvent event) {
|
||||
fixAssociation(fileNames.keySet());
|
||||
notification.expire();
|
||||
}
|
||||
}), null);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void fixAssociation() {
|
||||
final FileType registered = myFileTypeManager.getFileTypeByExtension(TypoScriptFileType.DEFAULT_EXTENSION);
|
||||
if (registered != TypoScriptFileType.INSTANCE) {
|
||||
@NotNull
|
||||
private Map<FileNameMatcher, FileType> getNonTSMatchers(@NotNull Collection<? extends FileNameMatcher> matchers) {
|
||||
final Map<FileNameMatcher, FileType> fileNames = new HashMap<FileNameMatcher, FileType>();
|
||||
for (FileNameMatcher matcher : matchers) {
|
||||
FileType registered;
|
||||
if (matcher instanceof ExtensionFileNameMatcher) {
|
||||
registered = myFileTypeManager.getFileTypeByExtension(((ExtensionFileNameMatcher)matcher).getExtension());
|
||||
}
|
||||
else if (matcher instanceof ExactFileNameMatcher) {
|
||||
registered = myFileTypeManager.getFileTypeByFileName(((ExactFileNameMatcher)matcher).getFileName());
|
||||
}
|
||||
else {
|
||||
LOG.error("Unexpected FileNameMatcher class " + matcher.getClass() + " for " + matcher.getPresentableString());
|
||||
break;
|
||||
}
|
||||
if (registered != TypoScriptFileType.INSTANCE) {
|
||||
fileNames.put(matcher, registered);
|
||||
}
|
||||
}
|
||||
return fileNames;
|
||||
}
|
||||
|
||||
private void fixAssociation(@NotNull Collection<FileNameMatcher> fileNameMatchers) {
|
||||
final Map<FileNameMatcher, FileType> refreshedFileNames = getNonTSMatchers(fileNameMatchers);
|
||||
if (!refreshedFileNames.isEmpty()) {
|
||||
final AccessToken token = ApplicationManager.getApplication().acquireWriteActionLock(getClass());
|
||||
try {
|
||||
doFixAssociation(registered);
|
||||
doFixAssociation(refreshedFileNames);
|
||||
}
|
||||
finally {
|
||||
token.finish();
|
||||
@@ -69,8 +109,10 @@ public class TypoScriptExtensionMappingChecker implements ApplicationComponent {
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void doFixAssociation(FileType registered) {
|
||||
myFileTypeManager.removeAssociatedExtension(registered, TypoScriptFileType.DEFAULT_EXTENSION);
|
||||
myFileTypeManager.registerFileType(TypoScriptFileType.INSTANCE, TypoScriptFileType.DEFAULT_EXTENSION);
|
||||
private void doFixAssociation(@NotNull Map<FileNameMatcher, FileType> fileNames) {
|
||||
for (Map.Entry<FileNameMatcher, FileType> entry : fileNames.entrySet()) {
|
||||
myFileTypeManager.removeAssociation(entry.getValue(), entry.getKey());
|
||||
}
|
||||
myFileTypeManager.registerFileType(TypoScriptFileType.INSTANCE, new ArrayList<FileNameMatcher>(fileNames.keySet()));
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,28 @@
|
||||
package com.jetbrains.typoscript.lang;
|
||||
|
||||
import com.intellij.openapi.fileTypes.FileTypeConsumer;
|
||||
import com.intellij.openapi.fileTypes.FileTypeFactory;
|
||||
import com.intellij.openapi.fileTypes.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author lene
|
||||
* Date: 11.04.12
|
||||
*/
|
||||
public class TypoScriptFileTypeFactory extends FileTypeFactory {
|
||||
|
||||
public static final List<? extends FileNameMatcher> FILE_NAME_MATCHERS =
|
||||
Collections.unmodifiableList(Arrays.asList(new ExtensionFileNameMatcher(TypoScriptFileType.DEFAULT_EXTENSION),
|
||||
new ExactFileNameMatcher("setup.txt"),
|
||||
new ExactFileNameMatcher("constants.txt"),
|
||||
new ExactFileNameMatcher("ext_conf_template.txt"),
|
||||
new ExactFileNameMatcher("ext_typoscript_setup.txt"),
|
||||
new ExactFileNameMatcher("ext_typoscript_constants.txt")));
|
||||
|
||||
@Override
|
||||
public void createFileTypes(@NotNull FileTypeConsumer consumer) {
|
||||
consumer.consume(TypoScriptFileType.INSTANCE, TypoScriptFileType.INSTANCE.getDefaultExtension());
|
||||
consumer.consume(TypoScriptFileType.INSTANCE, FILE_NAME_MATCHERS.toArray(new FileNameMatcher[FILE_NAME_MATCHERS.size()]));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user