package com.intellij.javascript.flex;
import com.intellij.flex.FlexCommonUtils;
import com.intellij.icons.AllIcons;
import com.intellij.javaee.ResourceRegistrar;
import com.intellij.javaee.StandardResourceProvider;
import com.intellij.javascript.flex.mxml.MxmlJSClass;
import com.intellij.javascript.flex.mxml.schema.FlexMxmlNSDescriptor;
import com.intellij.lang.Language;
import com.intellij.lang.javascript.JavaScriptSupportLoader;
import com.intellij.lang.javascript.flex.MxmlFileType;
import com.intellij.lang.javascript.psi.ecmal4.impl.JSAttributeImpl;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeConsumer;
import com.intellij.openapi.fileTypes.FileTypeFactory;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.filters.position.NamespaceFilter;
import com.intellij.psi.filters.position.RootTagFilter;
import com.intellij.psi.meta.MetaDataContributor;
import com.intellij.psi.meta.MetaDataRegistrar;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
// In fact it is not an application component any more.
public class FlexApplicationComponent extends FileTypeFactory implements MetaDataContributor, StandardResourceProvider {
private static final Icon ICON = AllIcons.FileTypes.JavaClass;
public static final FileType SWF_FILE_TYPE = new FileType() {
@NotNull
public String getName() {
return "SWF";
}
@NotNull
public String getDescription() {
return "SWF file type";
}
@NotNull
public String getDefaultExtension() {
return "swf";
}
public Icon getIcon() {
return ICON;
}
public boolean isBinary() {
return true;
}
public boolean isReadOnly() {
return true;
}
public String getCharset(@NotNull final VirtualFile file, @NotNull final byte[] content) {
return null;
}
};
public static final Language DECOMPILED_SWF = new Language(JavaScriptSupportLoader.ECMA_SCRIPT_L4, "Decompiled SWF") {
};
public static final LanguageFileType MXML = new MxmlFileType();
@NonNls public static final String HTTP_WWW_ADOBE_COM_2006_FLEX_CONFIG = "http://www.adobe.com/2006/flex-config";
public static final String[] AIR_VERSIONS =
{"1.0", "1.1", "1.5", "1.5.1", "1.5.2", "1.5.3", "2.0", "2.5", "2.6", "2.7", "3.0", "3.1", "3.2", "3.3", "3.4", "3.5", "3.6", "3.7",
"3.8", "3.9", "4.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "19.0", "20.0", "21.0", "22.0", "23.0", "24.0", "25.0", "26.0",
"27.0", "28.0", "29.0", "30.0"};
@Override
public void contributeMetaData(@NotNull final MetaDataRegistrar registrar) {
registrar.registerMetaData(
new RootTagFilter(new NamespaceFilter(MxmlJSClass.MXML_URIS)),
FlexMxmlNSDescriptor.class
);
}
public void createFileTypes(final @NotNull FileTypeConsumer consumer) {
consumer.consume(SWF_FILE_TYPE, "swf");
consumer.consume(MXML, "mxml;fxg");
}
public void registerResources(ResourceRegistrar registrar) {
registrar.addStdResource(HTTP_WWW_ADOBE_COM_2006_FLEX_CONFIG, "/schemas/FlexCompilerSchema.xsd", FlexApplicationComponent.class);
registrar.addStdResource(JSAttributeImpl.URN_FLEX_META, "/schemas/KnownMetaData.dtd", FlexApplicationComponent.class);
for (String version : AIR_VERSIONS) {
registerAirDescriptorSchema(registrar, version);
}
}
private static void registerAirDescriptorSchema(final ResourceRegistrar registrar, final String version) {
registrar.addStdResource(FlexCommonUtils.AIR_NAMESPACE_BASE + version,
"/schemas/AIR_Descriptor." + version + ".xsd",
FlexApplicationComponent.class);
}
}