diff --git a/cnd/src/org/netbeans/modules/cnd/loaders/CndMIMEResolver.java b/cnd/src/org/netbeans/modules/cnd/loaders/CndMIMEResolver.java --- a/cnd/src/org/netbeans/modules/cnd/loaders/CndMIMEResolver.java +++ b/cnd/src/org/netbeans/modules/cnd/loaders/CndMIMEResolver.java @@ -51,6 +51,16 @@ * declarative mime resolver. */ public class CndMIMEResolver extends MIMEResolver { + + private static final String[] RESOLVABLE_MIME_TYPES = { + MIMENames.C_MIME_TYPE, + MIMENames.CPLUSPLUS_MIME_TYPE, + MIMENames.MAKEFILE_MIME_TYPE, + MIMENames.SHELL_MIME_TYPE, + MIMENames.FORTRAN_MIME_TYPE, + MIMENames.ASM_MIME_TYPE + }; + public CndMIMEResolver() { //System.err.println("called CndMIMEResolver.CndMIMEResolver()"); } @@ -67,7 +77,15 @@ } return false; } - + + /** Returns an array of MIME types which can be resolved by this resolver. + * It has to return not empty String array. + * @return an array of MIME types which can be resolved by this resolver. + */ + public String[] getMIMETypes() { + return RESOLVABLE_MIME_TYPES; + } + /** * Resolves FileObject and returns recognized MIME type * @param fo is FileObject which should be resolved diff --git a/cnd/src/org/netbeans/modules/cnd/loaders/CndSniffyMIMEResolver.java b/cnd/src/org/netbeans/modules/cnd/loaders/CndSniffyMIMEResolver.java --- a/cnd/src/org/netbeans/modules/cnd/loaders/CndSniffyMIMEResolver.java +++ b/cnd/src/org/netbeans/modules/cnd/loaders/CndSniffyMIMEResolver.java @@ -29,6 +29,19 @@ * @author Vladimir Voskresensky */ public class CndSniffyMIMEResolver extends MIMEResolver { + + private static final String[] RESOLVABLE_MIME_TYPES = { + MIMENames.CPLUSPLUS_MIME_TYPE, + MIMENames.SHELL_MIME_TYPE + }; + + /** Returns an array of MIME types which can be resolved by this resolver. + * It has to return not empty String array. + * @return an array of MIME types which can be resolved by this resolver. + */ + public String[] getMIMETypes() { + return RESOLVABLE_MIME_TYPES; + } /** * Resolves FileObject and returns recognized MIME type diff --git a/languages.sh/src/org/netbeans/modules/languages/sh/ShellScriptResolver.java b/languages.sh/src/org/netbeans/modules/languages/sh/ShellScriptResolver.java --- a/languages.sh/src/org/netbeans/modules/languages/sh/ShellScriptResolver.java +++ b/languages.sh/src/org/netbeans/modules/languages/sh/ShellScriptResolver.java @@ -38,6 +38,8 @@ */ public class ShellScriptResolver extends MIMEResolver { + private static final String[] RESOLVABLE_MIME_TYPES = {"text/sh"}; //NOI18N + /** Default constructor for lookup. */ public ShellScriptResolver() {} @@ -62,7 +64,11 @@ } return null; } - + + public String[] getMIMETypes() { + return RESOLVABLE_MIME_TYPES; + } + /** Checks whether byte array starts with given string. * @return true if byte array starts with given prefix, false otherwise */ diff --git a/openide.filesystems/apichanges.xml b/openide.filesystems/apichanges.xml --- a/openide.filesystems/apichanges.xml +++ b/openide.filesystems/apichanges.xml @@ -46,6 +46,32 @@ Filesystems API + + + FileUtil.getMIMEType() can be restricted by listed MIME types + + + + + +

+ To speed up MIME type recognition it is added an extra parameter + to method FileUtil.getMIMEType(FileObject, String...). + Parameter contains one or more MIME types + which we are only interested in. It means only + MIMEResolver + instances which supply at lease one of these MIME types are queried. + That's why MIMEResolver + abstract class was extended by method + getMIMETypes(). + It has to return a String[] array of + MIME types which can be resolved by this resolver. +

+
+ + + +
XMLFileSystem attributes can be queried for instance class diff --git a/openide.filesystems/nbproject/project.properties b/openide.filesystems/nbproject/project.properties --- a/openide.filesystems/nbproject/project.properties +++ b/openide.filesystems/nbproject/project.properties @@ -43,4 +43,4 @@ javadoc.main.page=org/openide/filesystems/doc-files/api.html javadoc.arch=${basedir}/arch.xml javadoc.apichanges=${basedir}/apichanges.xml -spec.version.base=7.12.0 +spec.version.base=7.13.0 diff --git a/openide.filesystems/src/org/netbeans/modules/openide/filesystems/declmime/MIMEResolverImpl.java b/openide.filesystems/src/org/netbeans/modules/openide/filesystems/declmime/MIMEResolverImpl.java --- a/openide.filesystems/src/org/netbeans/modules/openide/filesystems/declmime/MIMEResolverImpl.java +++ b/openide.filesystems/src/org/netbeans/modules/openide/filesystems/declmime/MIMEResolverImpl.java @@ -120,6 +120,7 @@ public @Override void fileChanged(FileEvent fe) { synchronized (Impl.this) { state = DescParser.INIT; + resolvableMIMETypes = null; } } }; @@ -128,11 +129,22 @@ private FileElement[] smell = null; private short state = DescParser.INIT; - + + private String[] resolvableMIMETypes = null; + Impl(FileObject obj) { if (ERR.isLoggable(Level.FINE)) ERR.fine("MIMEResolverImpl.Impl.(" + obj + ")"); // NOI18N data = obj; data.addFileChangeListener(FileUtil.weakFileChangeListener(listener, data)); + } + + /** Returns an array of MIME types which can be resolved by this resolver. + * It has to return not empty String array. + * @return an array of MIME types which can be resolved by this resolver. + */ + public String[] getMIMETypes() { + init(); + return resolvableMIMETypes; } /** @@ -146,15 +158,9 @@ return null; } - synchronized (this) { // lazy init - - if (state == DescParser.INIT) { - state = parseDesc(); - } - - if (state == DescParser.ERROR) { - return null; - } + init(); + if (state == DescParser.ERROR) { + return null; } // smell is filled in reverse order @@ -168,6 +174,14 @@ } return null; + } + + private void init() { + synchronized (this) { // lazy init + if (state == DescParser.INIT) { + state = parseDesc(); + } + } } // description document is parsed in the same thread @@ -187,6 +201,15 @@ ERR.fine(buf.toString()); } } + // fill resolvableMIMETypes array with available MIME types + if(parser.state != DescParser.ERROR) { + for (int i = 0; i < smell.length; i++) { + String mimeType = smell[i].getMimeType(); + if(mimeType != null) { + resolvableMIMETypes = Util.addString(resolvableMIMETypes, mimeType); + } + } + } return parser.state; } @@ -195,7 +218,7 @@ return "MIMEResolverImpl.Impl[" + data + ", " + smell + "]"; // NOI18N } - + } diff --git a/openide.filesystems/src/org/openide/filesystems/FileUtil.java b/openide.filesystems/src/org/openide/filesystems/FileUtil.java --- a/openide.filesystems/src/org/openide/filesystems/FileUtil.java +++ b/openide.filesystems/src/org/openide/filesystems/FileUtil.java @@ -1096,7 +1096,7 @@ * to a case-insensitive match. * @param ext the extension: "jar", "zip", etc. * @return the MIME type for the extension, or null if the extension is unrecognized - * @deprecated use {@link #getMIMEType(FileObject) getMIMEType(FileObject)} as MIME cannot + * @deprecated use {@link #getMIMEType(FileObject, String[]) getMIMEType(FileObject)} as MIME cannot * be generally detected by file object extension. */ @Deprecated @@ -1111,13 +1111,14 @@ } /** Resolves MIME type. Registered resolvers are invoked and used to achieve this goal. - * Resolvers must subclass MIMEResolver. If resolvers don`t recognize MIME type then + * Resolvers must subclass MIMEResolver. If resolvers don't recognize MIME type then * MIME type is obtained for a well-known extension. * @param fo whose MIME type should be recognized + * @param withinMIMETypes an array of MIME types which only should be considered * @return the MIME type for the FileObject, or null if the FileObject is unrecognized */ - public static String getMIMEType(FileObject fo) { - String retVal = MIMESupport.findMIMEType(fo, null); + public static String getMIMEType(FileObject fo, String... withinMIMETypes) { + String retVal = MIMESupport.findMIMEType(fo, null, withinMIMETypes); if (retVal == null) { retVal = getMIMEType(fo.getExt()); @@ -1125,7 +1126,7 @@ return retVal; } - + /** Finds mime type by calling getMIMEType, but * instead of returning null it fallbacks to default type * either text/plain or content/unknown (even for folders) diff --git a/openide.filesystems/src/org/openide/filesystems/MIMEResolver.java b/openide.filesystems/src/org/openide/filesystems/MIMEResolver.java --- a/openide.filesystems/src/org/openide/filesystems/MIMEResolver.java +++ b/openide.filesystems/src/org/openide/filesystems/MIMEResolver.java @@ -64,4 +64,10 @@ * @return recognized MIME type or null if not recognized */ public abstract String findMIMEType(FileObject fo); + + /** Returns an array of MIME types which can be resolved by this resolver. + * It has to return not empty String array. + * @return an array of MIME types which can be resolved by this resolver. + */ + public abstract String[] getMIMETypes(); } diff --git a/openide.filesystems/src/org/openide/filesystems/MIMESupport.java b/openide.filesystems/src/org/openide/filesystems/MIMESupport.java --- a/openide.filesystems/src/org/openide/filesystems/MIMESupport.java +++ b/openide.filesystems/src/org/openide/filesystems/MIMESupport.java @@ -97,8 +97,9 @@ /** Asks all registered subclasses of MIMEResolver to resolve FileObject passed as parameter. * @param fo is FileObject, whose MIME should be resolved * @param def the default value to return or null + * @param withinMIMETypes an array of MIME types which only should be considered * @return MIME type or null if not resolved*/ - static String findMIMEType(FileObject fo, String def) { + static String findMIMEType(FileObject fo, String def, String... withinMIMETypes) { if (!fo.isValid() || fo.isFolder()) { return null; } @@ -121,7 +122,7 @@ lastCfo = EMPTY; } - return cfo.getMIMEType(def); + return cfo.getMIMEType(def, withinMIMETypes); } finally { synchronized (lock) { lastFo = new WeakReference(fo); @@ -129,7 +130,7 @@ } } } - + /** Testing purposes. */ static MIMEResolver[] getResolvers() { @@ -275,22 +276,47 @@ return getMIMEType(null); } - public String getMIMEType(String def) { + public String getMIMEType(String def, String... withinMIMETypes) { if (mimeType == null) { - mimeType = resolveMIME(def); + mimeType = resolveMIME(def, withinMIMETypes); } return mimeType; } - private String resolveMIME(String def) { + /** Decides whether given MIMEResolver is capable to resolve at least + * one of given MIME types. + * @param resolver MIMEResolver to be examined + * @param desiredMIMETypes an array of MIME types + * @return true if at least one of given MIME types can be resolved by + * given resolver or if array is null or empty, false otherwise. + */ + private boolean canResolveMIMETypes(MIMEResolver resolver, String... desiredMIMETypes) { + if(desiredMIMETypes == null || desiredMIMETypes.length == 0) { + return true; + } + String[] resolvableMIMETypes = resolver.getMIMETypes(); + assert resolvableMIMETypes != null && resolvableMIMETypes.length > 0 : "Resolver " + this + " should resolve at least one MIME type."; //NOI18N + for (int i = 0; i < desiredMIMETypes.length; i++) { + for (int j = 0; j < resolvableMIMETypes.length; j++) { + if(resolvableMIMETypes[j].equalsIgnoreCase(desiredMIMETypes[i])) { + return true; + } + } + } + return false; + } + + private String resolveMIME(String def, String... withinMIMETypes) { String retVal = null; MIMEResolver[] local = getResolvers(); try { for (int i = 0; i < local.length; i++) { - retVal = local[i].findMIMEType(this); - + MIMEResolver resolver = local[i]; + if(canResolveMIMETypes(resolver, withinMIMETypes)) { + retVal = resolver.findMIMEType(this); + } if (retVal != null) { return retVal; } diff --git a/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java b/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java --- a/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java +++ b/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java @@ -82,6 +82,7 @@ super(testName); } + @Override protected void setUp() throws java.lang.Exception { MockServices.setServices(); @@ -92,6 +93,7 @@ root = fs.findResource(getResourcePrefix()); } + @Override protected void tearDown() throws Exception { super.tearDown(); fs = this.testedFS = null; @@ -118,17 +120,20 @@ class L extends FileChangeAdapter { public int cnt; + @Override public void fileDataCreated(FileEvent fe) { cnt++; } } final FileChangeListener noFileDataCreatedListener = new FileChangeAdapter(){ + @Override public void fileDataCreated(FileEvent fe) { fail(); } }; final FileChangeListener listener1 = new FileChangeAdapter(){ + @Override public void fileDataCreated(FileEvent fe) { try { fold.getFileSystem().removeFileChangeListener(noFileDataCreatedListener); @@ -172,11 +177,13 @@ return; } final FileChangeListener noFileDataCreatedListener = new FileChangeAdapter(){ + @Override public void fileDataCreated(FileEvent fe) { fail(); } }; final FileChangeListener listener1 = new FileChangeAdapter(){ + @Override public void fileDataCreated(FileEvent fe) { fold.removeFileChangeListener(noFileDataCreatedListener); fold.addFileChangeListener(noFileDataCreatedListener); @@ -1070,6 +1077,9 @@ throw new IllegalStateException(ex); } } + public String[] getMIMETypes() { + return null; + } private String f(FileObject fo) throws IOException { InputStream is = fo.getInputStream(); byte[] arr = new byte[4096]; @@ -1542,6 +1552,7 @@ public static void implOfTestGetFileObjectForSubversion(final FileObject folder, final String childName) throws InterruptedException { final List l = new ArrayList(); folder.addFileChangeListener(new FileChangeAdapter(){ + @Override public void fileFolderCreated(FileEvent fe) { l.add(fe.getFile()); synchronized(l) { diff --git a/openide.filesystems/test/unit/src/org/openide/filesystems/FileUtilTest.java b/openide.filesystems/test/unit/src/org/openide/filesystems/FileUtilTest.java --- a/openide.filesystems/test/unit/src/org/openide/filesystems/FileUtilTest.java +++ b/openide.filesystems/test/unit/src/org/openide/filesystems/FileUtilTest.java @@ -42,9 +42,13 @@ package org.openide.filesystems; import java.io.File; +import java.io.IOException; import java.net.URL; +import org.netbeans.junit.MockServices; import org.netbeans.junit.NbTestCase; +import org.netbeans.junit.NbTestSuite; import org.openide.filesystems.test.TestFileUtils; +import org.openide.util.Lookup; import org.openide.util.Utilities; import org.openide.util.test.MockLookup; @@ -160,4 +164,50 @@ assertEquals("FileUtil.getArchiveFile failed.", new URL(urls[i][1]), FileUtil.getArchiveFile(new URL(urls[i][0]))); } } + + /** Tests that only resolvers are queried which supply at least one of + * MIME types given in array in FileUtil.getMIMEType(fo, String[]). + * See issue 137734. + */ + public void testGetMIMETypeConstrained() throws IOException { + MyResolver resolver = new MyResolver(); + MockLookup.setInstances(resolver); + assertNotNull(Lookup.getDefault().lookup(MyResolver.class)); + FileObject testFolder = FileUtil.createMemoryFileSystem().getRoot(); + + FileObject fo = FileUtil.createData(testFolder, "fo1.mime1"); + String[] withinMIMETypes = null; + assertTrue("Resolver should be queried if array of desired MIME types is null.", MyResolver.QUERIED.equals(FileUtil.getMIMEType(fo, withinMIMETypes))); + + fo = FileUtil.createData(testFolder, "fo2.mime1"); + withinMIMETypes = new String[0]; + assertTrue("Resolver should be queried if array of desired MIME types is empty.", MyResolver.QUERIED.equals(FileUtil.getMIMEType(fo, withinMIMETypes))); + + fo = FileUtil.createData(testFolder, "fo3.mime1"); + withinMIMETypes = new String[]{"mime3", "mime4"}; + assertFalse("Resolver should not be queried if array of desired MIME types doesn't match MIMEResolver.getMIMETypes.", MyResolver.QUERIED.equals(FileUtil.getMIMEType(fo, withinMIMETypes))); + + fo = FileUtil.createData(testFolder, "fo4.mime1"); + withinMIMETypes = new String[]{"mime1", "mime4"}; + assertTrue("Resolver should be queried if one item in array of desired MIME types matches MIMEResolver.getMIMETypes.", MyResolver.QUERIED.equals(FileUtil.getMIMEType(fo, withinMIMETypes))); + + fo = FileUtil.createData(testFolder, "fo5.mime1"); + withinMIMETypes = new String[]{"mime1", "mime2"}; + assertTrue("Resolver should be queried if both items in array of desired MIME types matches MIMEResolver.getMIMETypes.", MyResolver.QUERIED.equals(FileUtil.getMIMEType(fo, withinMIMETypes))); + } + + /** MIMEResolver used in testGetMIMETypeConstrained. */ + public static final class MyResolver extends MIMEResolver { + + public static final String QUERIED = "QUERIED"; + + /** Always returns the same just to signal it's been queried. */ + public String findMIMEType(FileObject fo) { + return QUERIED; + } + + public String[] getMIMETypes() { + return new String[]{"mime1", "mime2"}; + } + } } diff --git a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport48486Test.java b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport48486Test.java --- a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport48486Test.java +++ b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport48486Test.java @@ -68,6 +68,7 @@ /** * Setups variables. */ + @Override protected void setUp() throws Exception { TestUtilHid.destroyLocalFileSystem(getName()); lfs = TestUtilHid.createLocalFileSystem(getName(), new String[]{"A.opqr", }); @@ -97,6 +98,10 @@ } return null; } + + public String[] getMIMETypes() { + return null; + } } } diff --git a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport49418Test.java b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport49418Test.java --- a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport49418Test.java +++ b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport49418Test.java @@ -59,6 +59,7 @@ super(name); } + @Override protected void setUp() throws Exception { System.setProperty("org.openide.util.Lookup", "org.openide.filesystems.MIMESupport49418Test$Lkp"); super.setUp(); @@ -123,9 +124,10 @@ private Lkp(org.openide.util.lookup.InstanceContent ic) { super(ic); - this.ic = ic; + Lkp.ic = ic; } + @Override protected void initialize() { // a small trick to make the InheritanceTree storage to be used // because if the amount of elements in small, the ArrayStorage is @@ -140,6 +142,10 @@ public String findMIMEType(FileObject fo) { return MIME_TYPE; } + + public String[] getMIMETypes() { + return new String[]{MIME_TYPE}; + } }); diff --git a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport68318Test.java b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport68318Test.java --- a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport68318Test.java +++ b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport68318Test.java @@ -58,10 +58,12 @@ super(testName); } + @Override protected void setUp() throws Exception { ErrorManager.getDefault().log("Just initialize the ErrorManager"); } + @Override protected void tearDown() throws Exception { } @@ -97,6 +99,11 @@ return null; } + public String[] getMIMETypes() { + return null; + } + + @Override public String toString() { return "C1"; } @@ -105,7 +112,12 @@ public String findMIMEType(FileObject fo) { return null; } - + + public String[] getMIMETypes() { + return null; + } + + @Override public String toString() { return "C2"; } @@ -125,6 +137,7 @@ ic.add(c1); } + @Override protected void beforeLookup(org.openide.util.Lookup.Template template) { if (template.getType() == MIMEResolver.class) { assertNull("First invocation to assign result", result); diff --git a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport69049Test.java b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport69049Test.java --- a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport69049Test.java +++ b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupport69049Test.java @@ -43,7 +43,6 @@ import java.util.logging.Handler; import java.util.logging.LogRecord; import java.util.logging.Logger; -import junit.framework.*; import java.util.*; import java.util.logging.Level; import org.netbeans.junit.NbTestCase; @@ -69,14 +68,17 @@ super (testName); } + @Override protected Level logLevel() { return Level.FINE; } + @Override protected void setUp () throws Exception { LOG = Logger.getLogger("TEST-" + getName()); } + @Override protected void tearDown () throws Exception { } @@ -186,6 +188,11 @@ return null; } + public String[] getMIMETypes() { + return null; + } + + @Override public String toString() { return "C1"; } @@ -194,6 +201,10 @@ public String findMIMEType(FileObject fo) { return null; } + public String[] getMIMETypes() { + return null; + } + @Override public String toString() { return "C2"; } diff --git a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupportResolversTest.java b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupportResolversTest.java --- a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupportResolversTest.java +++ b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupportResolversTest.java @@ -40,22 +40,14 @@ */ package org.openide.filesystems; -import java.net.URL; -import java.net.URLClassLoader; +import java.util.ArrayList; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; -import junit.framework.*; -import org.openide.ErrorManager; -import java.awt.Component; -import java.awt.Image; -import java.awt.MediaTracker; -import java.awt.Toolkit; -import java.awt.image.BufferedImage; -import java.awt.image.ImageObserver; -import java.lang.ref.*; -import java.util.*; +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; /** * @@ -73,9 +65,11 @@ super (testName); } + @Override protected void setUp () throws Exception { } + @Override protected void tearDown () throws Exception { } @@ -105,7 +99,11 @@ public String findMIMEType(FileObject fo) { return null; } + public String[] getMIMETypes() { + return null; + } + @Override public String toString() { return "C1"; } @@ -114,6 +112,10 @@ public String findMIMEType(FileObject fo) { return null; } + public String[] getMIMETypes() { + return null; + } + @Override public String toString() { return "C2"; } diff --git a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupportTest.java b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupportTest.java --- a/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupportTest.java +++ b/openide.filesystems/test/unit/src/org/openide/filesystems/MIMESupportTest.java @@ -192,6 +192,10 @@ } } + public String[] getMIMETypes() { + return new String[]{mime}; + } + private String getMime() { return mime; } diff --git a/php.project/src/org/netbeans/modules/php/project/PhpMimeResolver.java b/php.project/src/org/netbeans/modules/php/project/PhpMimeResolver.java --- a/php.project/src/org/netbeans/modules/php/project/PhpMimeResolver.java +++ b/php.project/src/org/netbeans/modules/php/project/PhpMimeResolver.java @@ -56,6 +56,7 @@ private static final int BYTES_FOR_CHECK_IF_HTML_SIGNED = 4000; private static final Sign[] EMPTY_SIGNS = new Sign[]{}; private static final String MIME_TYPE = "text/x-php5";//NOI18N + private static final String[] RESOLVABLE_MIME_TYPES = {MIME_TYPE}; private static final String UNKNOWN_MIME_TYPE = null; private static final String[] PHP_WELL_KNOWN_EXTENSION_PREFIXES = {"php", "phtml"};//NOI18N private static final String[] OTHER_WELL_KNOWN_EXTENSION_PREFIXES = {"java", "rb", "rhtml"};//NOI18N @@ -71,6 +72,10 @@ //html signs private static final Set resolvedExt = new HashSet(); + + public String[] getMIMETypes() { + return RESOLVABLE_MIME_TYPES; + } @Override public String findMIMEType(FileObject fo) { diff --git a/ruby/src/org/netbeans/modules/ruby/RubyMimeResolver.java b/ruby/src/org/netbeans/modules/ruby/RubyMimeResolver.java --- a/ruby/src/org/netbeans/modules/ruby/RubyMimeResolver.java +++ b/ruby/src/org/netbeans/modules/ruby/RubyMimeResolver.java @@ -58,13 +58,18 @@ * that cannot reference this value directly. */ public static final String RUBY_MIME_TYPE = "text/x-ruby"; // application/x-ruby is also used a fair bit. - + private static final String[] RESOLVABLE_MIME_TYPES = {RUBY_MIME_TYPE}; + /** Number of bytes to sniff from the file headers */ static final int HEADER_LENGTH = 80; public RubyMimeResolver() { } + public String[] getMIMETypes() { + return RESOLVABLE_MIME_TYPES; + } + public String findMIMEType(FileObject fo) { String ext = fo.getExt();