Bug 380038 - [hotbug] Backport - FaceletHTMLValidator is slow on some files
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/JSFResource.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/JSFResource.java
index ccd37fe..f061aef 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/JSFResource.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/JSFResource.java
@@ -39,8 +39,12 @@
 
     public boolean isContentType(final String contentTypeName)
     {
-        return _contentTypeResolver.matchesType(contentTypeName, getId()
-                .getResourceName());
+    	if (_contentTypeResolver != null && getId()!= null)
+    	{
+	        return _contentTypeResolver.matchesType(contentTypeName, getId()
+	                .getResourceName());
+    	}
+    	return false;
     }
 
     @Override
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/JarBasedJSFResourceLocator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/JarBasedJSFResourceLocator.java
index aa48cea..8705dd8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/JarBasedJSFResourceLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/JarBasedJSFResourceLocator.java
@@ -13,7 +13,6 @@
 import java.util.regex.Pattern;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jst.jsf.common.internal.finder.VisitorMatcher;
 import org.eclipse.jst.jsf.common.internal.finder.acceptor.JarEntryMatchingAcceptor;
 import org.eclipse.jst.jsf.common.internal.finder.matcher.TaglibJarEntryFinder;
@@ -146,7 +145,8 @@
                         }
                     } catch (final InvalidIdentifierException e) 
                     {
-                    	JSFCorePlugin.log(IStatus.INFO, "Ignoring invalid id: "+e.getId()); //$NON-NLS-1$
+                    	// Bug 377405: ignore due to perf problems.
+                    	//JSFCorePlugin.log(IStatus.INFO, "Ignoring invalid id: "+e.getId()); //$NON-NLS-1$
                 	}
                     catch (final Exception e)
                     {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/WorkspaceResourceManager.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/WorkspaceResourceManager.java
index ac91276..00d0175 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/WorkspaceResourceManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resources/WorkspaceResourceManager.java
@@ -112,8 +112,10 @@
                     newFragments.add(track(res));
                 } catch (final InvalidIdentifierException e)
                 {
-                    JSFCorePlugin.log(IStatus.INFO,
-                        "Ignoring invalid JSF resource: "+res); //$NON-NLS-1$
+                	// Bug 377405: this call can get expensive for a project with many things on the Facelet classpath
+                	// and all it does is remote informational logging.
+//                    JSFCorePlugin.log(IStatus.INFO,
+//                        "Ignoring invalid JSF resource: "+res); //$NON-NLS-1$
                 }
                 catch (final ManagedObjectException e)
                 {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JSFResourceBasedTagRecord.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JSFResourceBasedTagRecord.java
index a15276e..5ff74a7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JSFResourceBasedTagRecord.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JSFResourceBasedTagRecord.java
@@ -170,9 +170,13 @@
                 case CHANGED:
                     // only add to the list on a add/change if the resource
                     // exists and is the right type
-                    if (jsfResource.isAccessible()
-                            && jsfResource
-                                    .isContentType(FACELET_FILE_CONTENT_TYPE))
+                	// Bug 377405: order the isContentType call first because
+                	// it has a high probability of returning false and
+                	// short-circuiting the isAccessible call that can
+                	// be very expensive (10-100 times)
+                    if (jsfResource
+                                    .isContentType(FACELET_FILE_CONTENT_TYPE)
+                                    && jsfResource.isAccessible())
                     {
                         tags.addTag(tag);
                     }