JavaScriptModuleBuilder implements IModuleBuilder, IExtensionInitializer, ILayerListener, IShutdownListener, IConfigListener { @Override public boolean handles(String mid, IResource resource) { return resource.getPath().endsWith(".js") && (textPluginName == null || !textPluginName.equals(new ModuleIdentifier(mid).getPluginName())); }  static CompilationLevel getCompilationLevel(HttpServletRequest request); @Override void initialize(IAggregator aggregator,
			IAggregatorExtension extension, IExtensionRegistrar registrar); @Override String layerBeginEndNotifier(EventType type, HttpServletRequest request, List<IModule> modules, Set<String> dependentFeatures); @Override void shutdown(IAggregator aggregator); @Override void configLoaded(IConfig config, long sequence); @Override ModuleBuild build(
			String mid,
			IResource resource,
			HttpServletRequest request,
			List<ICacheKeyGenerator> keyGens
			); @Override List<ICacheKeyGenerator> getCacheKeyGenerators(IAggregator aggregator); @Override boolean handles(String mid, IResource resource); @Override boolean isScript(HttpServletRequest request); static final String MODULE_EXPANDED_DEPS; }
@Test public void testHandles() { TestJavaScriptModuleBuilder builder = new TestJavaScriptModuleBuilder(); Whitebox.setInternalState(builder, "textPluginName", "combo/text"); Assert.assertTrue(builder.handles("foo.js", new FileResource(URI.create("file: Assert.assertFalse(builder.handles("foo.css", new FileResource(URI.create("file: Assert.assertFalse(builder.handles("combo/text!foo.js", new FileResource(URI.create("file: Whitebox.setInternalState(builder, "textPluginName", "null"); Assert.assertTrue(builder.handles("combo/text!foo.js", new FileResource(URI.create("file: }