You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ro...@apache.org on 2018/10/01 16:21:43 UTC

svn commit: r1842516 - /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java

Author: rotty3000
Date: Mon Oct  1 16:21:42 2018
New Revision: 1842516

URL: http://svn.apache.org/viewvc?rev=1842516&view=rev
Log:
FELIX-5948 Collection of performance and memory optimizations

Signed-off-by: Raymond Auge <ro...@apache.org>

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java?rev=1842516&r1=1842515&r2=1842516&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegionConfigurationSupport.java Mon Oct  1 16:21:42 2018
@@ -674,9 +674,48 @@ public abstract class RegionConfiguratio
         String bsn = bundle.getSymbolicName();
         String version = bundle.getVersion().toString();
         String location = escape( bundle.getLocation() );
-        String f = String.format( "(|(%1$s=%2$s)(%1$s=%2$s|%3$s)(%1$s=%2$s|%3$s|%4$s)(%1$s=%2$s|%3$s|%4$s|%5$s))", key,
-            pid, bsn, version, location );
-        return f;
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("(|(");
+
+        sb.append(key);
+        sb.append('=');
+        sb.append(pid);
+
+        sb.append(")(");
+
+        sb.append(key);
+        sb.append('=');
+        sb.append(pid);
+        sb.append('|');
+        sb.append(bsn);
+
+        sb.append(")(");
+
+        sb.append(key);
+        sb.append('=');
+        sb.append(pid);
+        sb.append('|');
+        sb.append(bsn);
+        sb.append('|');
+        sb.append(version);
+
+        sb.append(")(");
+
+        sb.append(key);
+        sb.append('=');
+        sb.append(pid);
+        sb.append('|');
+        sb.append(bsn);
+        sb.append('|');
+        sb.append(version);
+        sb.append('|');
+        sb.append(location);
+
+        sb.append("))");
+
+        return sb.toString();
     }
 
     /**
@@ -686,7 +725,41 @@ public abstract class RegionConfiguratio
      */
     static final String escape(String value)
     {
-        return value.replaceAll( "([\\\\\\*\\(\\)])", "\\\\$1" );
+        StringBuilder sb = null;
+
+        int index = 0;
+
+        for (int i = 0; i < value.length(); i++) {
+            char c = value.charAt(i);
+
+            switch (c) {
+                case '\\':
+                case '*':
+                case '(':
+                case ')':
+                    if (sb == null) {
+                        sb = new StringBuilder();
+                    }
+
+                    sb.append(value, index, i);
+                    sb.append('\\');
+                    sb.append(c);
+
+                    index = i + 1;
+
+                    break;
+            }
+        }
+
+        if (sb == null) {
+            return value;
+        }
+
+        if (index < value.length()) {
+            sb.append(value, index, value.length());
+        }
+
+        return sb.toString();
     }
 
     private ConfigurationAdmin getConfigAdmin(BundleContext bundleContext)