Licensed to the Apache Software Foundation (ASF) under one or more contributor 
license agreements; and to You under the Apache License, Version 2.0.

1) 
 rewrite HintsProvider.Factory.getManager(JsTokenId.JAVASCRIPT_MIME_TYPE);
 to HintsManager.getManagerForMimeType (JsTokenId.JAVASCRIPT_MIME_TYPE);