Author: sebb
Date: Sat May 18 15:47:27 2013
New Revision: 1484131

URL: http://svn.apache.org/r1484131
Log:
RAT-138 RAT runs very slowly on some input
Use String matching rather than building patterns
This improves performance somewhat, but is still inefficient

Modified:
    
creadur/rat/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java

Modified: 
creadur/rat/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
URL: 
http://svn.apache.org/viewvc/creadur/rat/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java?rev=1484131&r1=1484130&r2=1484131&view=diff
==============================================================================
--- 
creadur/rat/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
 (original)
+++ 
creadur/rat/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
 Sat May 18 15:47:27 2013
@@ -18,7 +18,7 @@
  */ 
 package org.apache.rat.analysis.license;
 
-import java.util.regex.Pattern;
+import java.util.Locale;
 
 import org.apache.rat.analysis.IHeaderMatcher;
 import org.apache.rat.analysis.RatHeaderAnalysisException;
@@ -38,7 +38,8 @@ import org.apache.rat.api.MetaData.Datum
 public class FullTextMatchingLicense extends BaseLicense
     implements IHeaderMatcher {
 
-    private Pattern fullTextPattern;
+    private String fullText;
+
     private final StringBuilder buffer = new StringBuilder();
 
     public FullTextMatchingLicense() {
@@ -53,17 +54,18 @@ public class FullTextMatchingLicense ext
     }
 
     public final void setFullText(String text) {
-        fullTextPattern = Pattern.compile(".*" + prune(text) + ".*",
-                                          Pattern.CASE_INSENSITIVE);
+        fullText = prune(text).toLowerCase(Locale.ENGLISH);
     }
 
     public final boolean hasFullText() {
-        return fullTextPattern != null;
+        return fullText != null;
     }
 
+    // TODO this is still quite inefficient if the match does not occur near 
the start of the buffer
+    // see RAT-138
     public boolean match(Document subject, String line) throws 
RatHeaderAnalysisException {
-        buffer.append(prune(line));
-        if (fullTextPattern.matcher(buffer).matches()) {
+        buffer.append(prune(line).toLowerCase(Locale.ENGLISH));
+        if (buffer.toString().contains(fullText)) {
             reportOnLicense(subject);
             return true;
         }


Reply via email to