You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2020/09/18 08:26:08 UTC

[felix-dev] branch connect updated: Use content time of zip entries where possible and clean up some code

This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch connect
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/connect by this push:
     new 2bbc9b3  Use content time of zip entries where possible and clean up some code
2bbc9b3 is described below

commit 2bbc9b320a3223842a17d087e8fdbf771f8bc858
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Fri Sep 18 10:25:54 2020 +0200

    Use content time of zip entries where possible and clean up some code
---
 .../apache/felix/framework/BundleRevisionImpl.java |  9 +--
 .../apache/felix/framework/BundleWiringImpl.java   |  2 +-
 .../apache/felix/framework/ExtensionManager.java   |  6 ++
 .../felix/framework/FrameworkWiringImpl.java       |  3 -
 .../org/apache/felix/framework/WovenClassImpl.java | 53 ++++++---------
 .../framework/cache/ConnectContentContent.java     |  1 +
 .../org/apache/felix/framework/cache/Content.java  |  2 +
 .../framework/cache/ContentDirectoryContent.java   | 41 ++++++------
 .../felix/framework/cache/DirectoryContent.java    | 36 ++++++-----
 .../apache/felix/framework/cache/JarContent.java   | 17 ++++-
 .../felix/framework/util/MultiReleaseContent.java  |  6 ++
 .../apache/felix/framework/util/SecureAction.java  | 24 +++++++
 .../framework/wiring/BundleCapabilityImpl.java     | 75 ++--------------------
 .../framework/wiring/BundleRequirementImpl.java    |  4 +-
 14 files changed, 125 insertions(+), 154 deletions(-)

diff --git a/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java b/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java
index 8d5d4b9..5aa9daa 100644
--- a/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java
@@ -28,7 +28,6 @@ import java.util.Enumeration;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.felix.framework.cache.ConnectContentContent;
 import org.apache.felix.framework.cache.Content;
 import org.apache.felix.framework.util.FelixConstants;
 import org.apache.felix.framework.util.MultiReleaseContent;
@@ -641,12 +640,8 @@ public class BundleRevisionImpl implements BundleRevision, Resource
         else {
             content = getContentPath().get(index - 1);
         }
-        if (content instanceof ConnectContentContent) {
-            return ((ConnectContentContent) content).getContentTime(urlPath);
-        }
-        else {
-            return m_bundle.getLastModified();
-        }
+        long result = content.getContentTime(urlPath);
+        return result > 0 ? result : m_bundle.getLastModified();
     }
 
     public URL getLocalURL(int index, String urlPath)
diff --git a/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java b/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
index 15ae43d..ac30c0a 100644
--- a/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
@@ -2071,7 +2071,7 @@ public class BundleWiringImpl implements BundleWiring
                         catch (Error e)
                         {
                             // Mark the woven class as incomplete.
-                            wci.complete(null, null, null);
+                            wci.complete();
                             wci.setState(WovenClass.TRANSFORMING_FAILED);
                             callWovenClassListeners(felix, wovenClassListeners, wci);
                             throw e;
diff --git a/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java b/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
index 21613e2..26c4077 100644
--- a/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
+++ b/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
@@ -897,6 +897,12 @@ class ExtensionManager implements Content
         return null;
     }
 
+    @Override
+    public long getContentTime(String name)
+    {
+        return -1L;
+    }
+
     //
     // Utility methods.
     //
diff --git a/framework/src/main/java/org/apache/felix/framework/FrameworkWiringImpl.java b/framework/src/main/java/org/apache/felix/framework/FrameworkWiringImpl.java
index 7bc42ce..f051ac0 100644
--- a/framework/src/main/java/org/apache/felix/framework/FrameworkWiringImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/FrameworkWiringImpl.java
@@ -63,9 +63,6 @@ class FrameworkWiringImpl implements FrameworkWiring, Runnable
      * thread explicitly is required in the embedded case, where Felix may be
      * stopped without the Java VM being stopped. In this case the
      * FelixFrameworkWiring thread must be stopped explicitly.
-     * <p>
-     * This method is called by the
-     * {@link PackageAdminActivator#stop(BundleContext)} method.
      */
     void stop()
     {
diff --git a/framework/src/main/java/org/apache/felix/framework/WovenClassImpl.java b/framework/src/main/java/org/apache/felix/framework/WovenClassImpl.java
index 9459f2f..837b58a 100644
--- a/framework/src/main/java/org/apache/felix/framework/WovenClassImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/WovenClassImpl.java
@@ -52,12 +52,10 @@ class WovenClassImpl implements WovenClass, List<String>
         m_state = TRANSFORMING;
     }
 
-    synchronized void complete(Class definedClass, byte[] bytes,
-            List<String> imports)
+    synchronized void complete()
     {
-        completeDefine(definedClass);
-        m_bytes = (bytes == null) ? m_bytes : bytes;
-        completeImports(imports);
+        completeDefine(null);
+        completeImports(null);
     }
 
     synchronized void completeImports(List<String> imports)
@@ -66,7 +64,7 @@ class WovenClassImpl implements WovenClass, List<String>
                 : Util.newImmutableList(imports);
     }
 
-    synchronized void completeDefine(Class definedClass)
+    synchronized void completeDefine(Class<?> definedClass)
     {
         m_definedClass = definedClass;
     }
@@ -191,14 +189,12 @@ class WovenClassImpl implements WovenClass, List<String>
         {
             try
             {
-                List<BundleRequirement> reqs = ManifestParser
+                ManifestParser
                         .parseDynamicImportHeader(null, null, s);
             } catch (Exception ex)
             {
-                RuntimeException re = new IllegalArgumentException(
-                        "Unable to parse dynamic import.");
-                re.initCause(ex);
-                throw re;
+                throw new IllegalArgumentException(
+                        "Unable to parse dynamic import.", ex);
             }
             checkImport(s);
             return m_imports.add(s);
@@ -244,14 +240,12 @@ class WovenClassImpl implements WovenClass, List<String>
         {
             try
             {
-                List<BundleRequirement> reqs = ManifestParser
+                ManifestParser
                         .parseDynamicImportHeader(null, null, s);
             } catch (Exception ex)
             {
-                RuntimeException re = new IllegalArgumentException(
-                        "Unable to parse dynamic import.");
-                re.initCause(ex);
-                throw re;
+                throw new IllegalArgumentException(
+                        "Unable to parse dynamic import.", ex);
             }
             checkImport(s);
         }
@@ -271,14 +265,12 @@ class WovenClassImpl implements WovenClass, List<String>
         {
             try
             {
-                List<BundleRequirement> reqs = ManifestParser
+                ManifestParser
                         .parseDynamicImportHeader(null, null, s);
             } catch (Exception ex)
             {
-                RuntimeException re = new IllegalArgumentException(
-                        "Unable to parse dynamic import.");
-                re.initCause(ex);
-                throw re;
+                throw new IllegalArgumentException(
+                        "Unable to parse dynamic import.", ex);
             }
             checkImport(s);
         }
@@ -333,14 +325,12 @@ class WovenClassImpl implements WovenClass, List<String>
         }
         try
         {
-            List<BundleRequirement> reqs = ManifestParser
+            ManifestParser
                     .parseDynamicImportHeader(null, null, s);
         } catch (Exception ex)
         {
-            RuntimeException re = new IllegalArgumentException(
-                    "Unable to parse dynamic import.");
-            re.initCause(ex);
-            throw re;
+            throw new IllegalArgumentException(
+                    "Unable to parse dynamic import.", ex);
         }
         checkImport(s);
         return m_imports.set(i, s);
@@ -356,14 +346,13 @@ class WovenClassImpl implements WovenClass, List<String>
         }
         try
         {
-            List<BundleRequirement> reqs = ManifestParser
+            ManifestParser
                     .parseDynamicImportHeader(null, null, s);
-        } catch (Exception ex)
+        }
+        catch (Exception ex)
         {
-            RuntimeException re = new IllegalArgumentException(
-                    "Unable to parse dynamic import.");
-            re.initCause(ex);
-            throw re;
+            throw new IllegalArgumentException(
+                    "Unable to parse dynamic import.", ex);
         }
         checkImport(s);
         m_imports.add(i, s);
diff --git a/framework/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java b/framework/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java
index 7a985ac..bc0bd0e 100644
--- a/framework/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java
+++ b/framework/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java
@@ -208,6 +208,7 @@ public class ConnectContentContent implements Content
         return null;
     }
 
+    @Override
     public long getContentTime(String urlPath)
     {
         return m_content.getEntry(urlPath).flatMap(entry -> Optional.of(entry.getLastModified())).orElse(-1L);
diff --git a/framework/src/main/java/org/apache/felix/framework/cache/Content.java b/framework/src/main/java/org/apache/felix/framework/cache/Content.java
index 09ace44..79580c9 100644
--- a/framework/src/main/java/org/apache/felix/framework/cache/Content.java
+++ b/framework/src/main/java/org/apache/felix/framework/cache/Content.java
@@ -121,4 +121,6 @@ public interface Content
      *           or null if not possible.
      */
     URL getEntryAsURL(String name);
+
+    long getContentTime(String urlPath);
 }
\ No newline at end of file
diff --git a/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java b/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
index a1b3367..e1f04ac 100644
--- a/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
+++ b/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
@@ -47,10 +47,7 @@ public class ContentDirectoryContent implements Content
 
     public boolean hasEntry(String name) throws IllegalStateException
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
-            name = name.substring(1);
-        }
+        name = getName(name);
 
         return m_content.hasEntry(m_rootPath + name);
     }
@@ -63,10 +60,7 @@ public class ContentDirectoryContent implements Content
 
     public byte[] getEntryAsBytes(String name) throws IllegalStateException
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
-            name = name.substring(1);
-        }
+        name = getName(name);
 
         return m_content.getEntryAsBytes(m_rootPath + name);
     }
@@ -74,35 +68,42 @@ public class ContentDirectoryContent implements Content
     public InputStream getEntryAsStream(String name)
         throws IllegalStateException, IOException
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
-            name = name.substring(1);
-        }
+        name = getName(name);
 
         return m_content.getEntryAsStream(m_rootPath + name);
     }
 
+    private String getName(String name)
+    {
+        if ((name.length() > 0) && (name.charAt(0) == '/')) {
+            name = name.substring(1);
+        }
+        return name;
+    }
+
     public URL getEntryAsURL(String name)
     {
         return m_content.getEntryAsURL(m_rootPath + name);
     }
 
+    @Override
+    public long getContentTime(String name)
+    {
+        name = getName(name);
+
+        return m_content.getContentTime(m_rootPath + name);
+    }
+
     public Content getEntryAsContent(String name)
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
-            name = name.substring(1);
-        }
+        name = getName(name);
 
         return m_content.getEntryAsContent(m_rootPath + name);
     }
 
     public String getEntryAsNativeLibrary(String name)
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
-            name = name.substring(1);
-        }
+        name = getName(name);
 
         return m_content.getEntryAsNativeLibrary(m_rootPath + name);
     }
diff --git a/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java b/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
index 50da934..9046e17 100644
--- a/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
+++ b/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
@@ -72,10 +72,7 @@ public class DirectoryContent implements Content
 
     public boolean hasEntry(String name) throws IllegalStateException
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
-            name = name.substring(1);
-        }
+        name = getName(name);
 
         // Return true if the file associated with the entry exists,
         // unless the entry name ends with "/", in which case only
@@ -97,10 +94,7 @@ public class DirectoryContent implements Content
 
     public byte[] getEntryAsBytes(String name) throws IllegalStateException
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
-            name = name.substring(1);
-        }
+        name = getName(name);
 
         // Get the embedded resource.
 
@@ -122,10 +116,7 @@ public class DirectoryContent implements Content
     public InputStream getEntryAsStream(String name)
         throws IllegalStateException, IOException
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
-            name = name.substring(1);
-        }
+        name = getName(name);
 
         File file = new File(m_dir, name);
         try
@@ -141,12 +132,17 @@ public class DirectoryContent implements Content
         }
     }
 
-    public URL getEntryAsURL(String name)
+    private String getName(String name)
     {
-        if ((name.length() > 0) && (name.charAt(0) == '/'))
-        {
+        if ((name.length() > 0) && (name.charAt(0) == '/')) {
             name = name.substring(1);
         }
+        return name;
+    }
+
+    public URL getEntryAsURL(String name)
+    {
+        name = getName(name);
 
         if (hasEntry(name))
         {
@@ -165,6 +161,16 @@ public class DirectoryContent implements Content
         }
     }
 
+    @Override
+    public long getContentTime(String name)
+    {
+        name = getName(name);
+
+        File file = new File(m_dir, name);
+
+        return BundleCache.getSecureAction().getLastModified(file);
+    }
+
     public Content getEntryAsContent(String entryName)
     {
         // If the entry name refers to the content itself, then
diff --git a/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java b/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
index 885137a..79c2249 100644
--- a/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
+++ b/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
@@ -112,9 +112,6 @@ public class JarContent implements Content
         {
             return false;
         }
-        finally
-        {
-        }
     }
 
     public Enumeration<String> getEntries()
@@ -195,6 +192,20 @@ public class JarContent implements Content
         }
     }
 
+    @Override
+    public long getContentTime(String urlPath)
+    {
+        try
+        {
+            ZipEntry ze = m_zipFile.getEntry(urlPath);
+            return ze.getTime();
+        }
+        catch (Exception ex)
+        {
+            return -1L;
+        }
+    }
+
     public Content getEntryAsContent(String entryName)
     {
         // If the entry name refers to the content itself, then
diff --git a/framework/src/main/java/org/apache/felix/framework/util/MultiReleaseContent.java b/framework/src/main/java/org/apache/felix/framework/util/MultiReleaseContent.java
index 9653029..eed4553 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/MultiReleaseContent.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/MultiReleaseContent.java
@@ -164,6 +164,12 @@ public class MultiReleaseContent implements Content
         return m_content.getEntryAsURL(findPath(name));
     }
 
+    @Override
+    public long getContentTime(String name)
+    {
+        return m_content.getContentTime(findPath(name));
+    }
+
     private String findPath(String path)
     {
         String internalPath = path;
diff --git a/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java b/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java
index 559075e..a37f524 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java
@@ -1616,6 +1616,27 @@ public class SecureAction
         }
     }
 
+    public long getLastModified(File file)
+    {
+        if (System.getSecurityManager() != null)
+        {
+            Actions actions = (Actions) m_actions.get();
+            actions.set(Actions.LAST_MODIFIED, file);
+            try
+            {
+                return (Long) AccessController.doPrivileged(actions, m_acc);
+            }
+            catch (PrivilegedActionException e)
+            {
+                throw (RuntimeException) e.getException();
+            }
+        }
+        else
+        {
+            return file.lastModified();
+        }
+    }
+
     private static class Actions implements PrivilegedExceptionAction
     {
         public static final int INITIALIZE_CONTEXT_ACTION = 0;
@@ -1677,6 +1698,7 @@ public class SecureAction
         public static final int INVOKE_WOVEN_CLASS_LISTENER = 56;
         public static final int GET_CANONICAL_PATH = 57;
         public static final int CREATE_PROXY = 58;
+        public static final int LAST_MODIFIED = 59;
 
         private int m_action = -1;
         private Object m_arg1 = null;
@@ -1940,6 +1962,8 @@ public class SecureAction
                 case CREATE_PROXY:
                     return Proxy.newProxyInstance((ClassLoader)arg1, (Class<?>[])arg2,
                             (InvocationHandler) arg3);
+                case LAST_MODIFIED:
+                    return ((File) arg1).lastModified();
             }
 
             return null;
diff --git a/framework/src/main/java/org/apache/felix/framework/wiring/BundleCapabilityImpl.java b/framework/src/main/java/org/apache/felix/framework/wiring/BundleCapabilityImpl.java
index 9fa3806..f426ad1 100644
--- a/framework/src/main/java/org/apache/felix/framework/wiring/BundleCapabilityImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/wiring/BundleCapabilityImpl.java
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.StringTokenizer;
-import org.apache.felix.framework.capabilityset.SimpleFilter;
 import org.apache.felix.framework.util.Util;
 import org.apache.felix.framework.util.manifestparser.ManifestParser;
 import org.osgi.framework.Constants;
@@ -41,8 +40,6 @@ public class BundleCapabilityImpl implements BundleCapability
     private final Map<String, String> m_dirs;
     private final Map<String, Object> m_attrs;
     private final List<String> m_uses;
-    private final List<List<String>> m_includeFilter;
-    private final List<List<String>> m_excludeFilter;
     private final Set<String> m_mandatory;
 
     public BundleCapabilityImpl(BundleRevision revision, String namespace,
@@ -55,13 +52,13 @@ public class BundleCapabilityImpl implements BundleCapability
 
         // Find all export directives: uses, mandatory, include, and exclude.
 
-        List<String> uses = Collections.EMPTY_LIST;
+        List<String> uses = Collections.emptyList();
         String value = m_dirs.get(Constants.USES_DIRECTIVE);
         if (value != null)
         {
             // Parse these uses directive.
             StringTokenizer tok = new StringTokenizer(value, ",");
-            uses = new ArrayList(tok.countTokens());
+            uses = new ArrayList<>(tok.countTokens());
             while (tok.hasMoreTokens())
             {
                 uses.add(tok.nextToken().trim());
@@ -69,44 +66,12 @@ public class BundleCapabilityImpl implements BundleCapability
         }
         m_uses = uses;
 
-        value = m_dirs.get(Constants.INCLUDE_DIRECTIVE);
-        if (value != null)
-        {
-            List<String> filters = ManifestParser.parseDelimitedString(value, ",");
-            m_includeFilter = new ArrayList<List<String>>(filters.size());
-            for (int filterIdx = 0; filterIdx < filters.size(); filterIdx++)
-            {
-                List<String> substrings = SimpleFilter.parseSubstring(filters.get(filterIdx));
-                m_includeFilter.add(substrings);
-            }
-        }
-        else
-        {
-            m_includeFilter = null;
-        }
-
-        value = m_dirs.get(Constants.EXCLUDE_DIRECTIVE);
-        if (value != null)
-        {
-            List<String> filters = ManifestParser.parseDelimitedString(value, ",");
-            m_excludeFilter = new ArrayList<List<String>>(filters.size());
-            for (int filterIdx = 0; filterIdx < filters.size(); filterIdx++)
-            {
-                List<String> substrings = SimpleFilter.parseSubstring(filters.get(filterIdx));
-                m_excludeFilter.add(substrings);
-            }
-        }
-        else
-        {
-            m_excludeFilter = null;
-        }
-
-        Set<String> mandatory = Collections.EMPTY_SET;
+        Set<String> mandatory = Collections.emptySet();
         value = m_dirs.get(Constants.MANDATORY_DIRECTIVE);
         if (value != null)
         {
             List<String> names = ManifestParser.parseDelimitedString(value, ",");
-            mandatory = new HashSet<String>(names.size());
+            mandatory = new HashSet<>(names.size());
             for (String name : names)
             {
                 // If attribute exists, then record it as mandatory.
@@ -160,38 +125,6 @@ public class BundleCapabilityImpl implements BundleCapability
         return m_uses;
     }
 
-    public boolean isIncluded(String name)
-    {
-        if ((m_includeFilter == null) && (m_excludeFilter == null))
-        {
-            return true;
-        }
-
-        // Get the class name portion of the target class.
-        String className = Util.getClassName(name);
-
-        // If there are no include filters then all classes are included
-        // by default, otherwise try to find one match.
-        boolean included = (m_includeFilter == null);
-        for (int i = 0;
-            (!included) && (m_includeFilter != null) && (i < m_includeFilter.size());
-            i++)
-        {
-            included = SimpleFilter.compareSubstring(m_includeFilter.get(i), className);
-        }
-
-        // If there are no exclude filters then no classes are excluded
-        // by default, otherwise try to find one match.
-        boolean excluded = false;
-        for (int i = 0;
-            (!excluded) && (m_excludeFilter != null) && (i < m_excludeFilter.size());
-            i++)
-        {
-            excluded = SimpleFilter.compareSubstring(m_excludeFilter.get(i), className);
-        }
-        return included && !excluded;
-    }
-
     @Override
     public String toString()
     {
diff --git a/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java b/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java
index 3e3b685..881d366 100644
--- a/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java
@@ -61,7 +61,7 @@ public class BundleRequirementImpl implements BundleRequirement
         BundleRevision revision, String namespace,
         Map<String, String> dirs, Map<String, Object> attrs)
     {
-        this(revision, namespace, dirs, Collections.EMPTY_MAP, SimpleFilter.convert(attrs));
+        this(revision, namespace, dirs, Collections.emptyMap(), SimpleFilter.convert(attrs));
     }
 
     public String getNamespace()
@@ -91,7 +91,7 @@ public class BundleRequirementImpl implements BundleRequirement
 
     public boolean matches(BundleCapability cap)
     {
-        return CapabilitySet.matches((BundleCapabilityImpl) cap, getFilter());
+        return CapabilitySet.matches(cap, getFilter());
     }
 
     public boolean isOptional()