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);
}