package com.intellij.javascript.flex.compiled; import com.intellij.javascript.flex.FlexApplicationComponent; import com.intellij.lang.javascript.JavaScriptSupportLoader; import com.intellij.lang.javascript.flex.importer.FlexImporter; import com.intellij.lang.javascript.psi.stubs.impl.JSFileCachedData; import com.intellij.lang.javascript.psi.stubs.impl.JSFileStubImpl; import com.intellij.lang.javascript.types.JSFileElementType; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.stubs.BinaryFileStubBuilder; import com.intellij.psi.stubs.PsiFileStub; import com.intellij.psi.stubs.PsiFileStubImpl; import com.intellij.psi.stubs.StubElement; import com.intellij.util.indexing.FileContent; import org.jetbrains.annotations.NotNull; import java.io.ByteArrayInputStream; /** * @author Maxim.Mossienko * Date: Sep 18, 2008 * Time: 3:49:24 PM */ public class SwfFileStubBuilder implements BinaryFileStubBuilder { private static final int VERSION = 2; public boolean acceptsFile(@NotNull final VirtualFile file) { return file.getFileType() == FlexApplicationComponent.SWF_FILE_TYPE && file.getPath().endsWith(JarFileSystem.JAR_SEPARATOR + file.getName()); } public StubElement buildStubTree(FileContent fileContent) { return buildFileStub(fileContent.getFile(), fileContent.getContent()); } static PsiFileStub buildFileStub(VirtualFile file, byte[] content) { PsiFileStubImpl stub = new JSFileStubImpl(JavaScriptSupportLoader.ECMA_SCRIPT_L4, new JSFileCachedData()); try { FlexImporter.buildStubsInterfaceFromStream( new ByteArrayInputStream(content), stub ); } catch (Exception ex) { Logger.getInstance(SwfFileStubBuilder.class.getName()).warn(file.getPath(), ex); } return stub; } public int getStubVersion() { return JSFileElementType.getVersion() + VERSION; } }