Class DependencyComputer


  • @Component(role=DependencyComputer.class)
    public class DependencyComputer
    extends java.lang.Object
    Helper class that computes compile dependencies of a bundle project. Code below is copy&paste of org.eclipse.pde.internal.core.RequiredPluginsClasspathContainer adopted to work outside of Eclipse runtime. Note that some functionality, namely SecondaryDependencies, ExtraClasspathEntries and isPatchFragment, has been removed due to time constraints.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void addDependency​(org.eclipse.osgi.service.resolver.BundleDescription desc, java.util.HashSet<org.eclipse.osgi.service.resolver.BundleDescription> added, java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map, java.util.ArrayList<DependencyComputer.DependencyEntry> entries)  
      private void addDependency​(org.eclipse.osgi.service.resolver.BundleDescription desc, java.util.HashSet<org.eclipse.osgi.service.resolver.BundleDescription> added, java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map, java.util.ArrayList<DependencyComputer.DependencyEntry> entries, boolean useInclusion)  
      protected void addDependencyViaImportPackage​(org.eclipse.osgi.service.resolver.BundleDescription desc, java.util.HashSet<org.eclipse.osgi.service.resolver.BundleDescription> added, java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map, java.util.ArrayList<DependencyComputer.DependencyEntry> entries)  
      private void addHostPlugin​(org.eclipse.osgi.service.resolver.HostSpecification hostSpec, java.util.HashSet<org.eclipse.osgi.service.resolver.BundleDescription> added, java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map, java.util.ArrayList<DependencyComputer.DependencyEntry> entries)  
      private boolean addPlugin​(org.eclipse.osgi.service.resolver.BundleDescription desc, boolean useInclusions, java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map, java.util.ArrayList<DependencyComputer.DependencyEntry> entries)  
      private void addVisiblePackagesFromState​(org.eclipse.osgi.service.resolver.StateHelper helper, org.eclipse.osgi.service.resolver.BundleDescription desc, java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> visiblePackages)  
      java.util.List<ClasspathEntry.AccessRule> computeBootClasspathExtraAccessRules​(org.eclipse.osgi.service.resolver.StateHelper helper, org.eclipse.osgi.service.resolver.BundleDescription desc)
      Although totally not obvious from the specification text, section 3.15 "Extension Bundles" of OSGi Core Spec apparently says that framework extension bundles can export additional packaged of the underlying JRE.
      java.util.List<DependencyComputer.DependencyEntry> computeDependencies​(org.eclipse.osgi.service.resolver.StateHelper helper, org.eclipse.osgi.service.resolver.BundleDescription desc)  
      private java.util.List<ClasspathEntry.AccessRule> getInclusions​(java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map, org.eclipse.osgi.service.resolver.BundleDescription desc)  
      private ClasspathEntry.AccessRule getRule​(org.eclipse.osgi.service.resolver.StateHelper helper, org.eclipse.osgi.service.resolver.BundleDescription desc, org.eclipse.osgi.service.resolver.ExportPackageDescription export)  
      private boolean hasExtensibleAPI​(org.eclipse.osgi.service.resolver.BundleDescription desc)  
      private boolean isFrameworkExtension​(org.eclipse.osgi.service.resolver.BundleDescription bundle)  
      private boolean isPatchFragment​(org.eclipse.osgi.service.resolver.BundleDescription bundleDescription)  
      private java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> retrieveVisiblePackagesFromState​(org.eclipse.osgi.service.resolver.StateHelper helper, org.eclipse.osgi.service.resolver.BundleDescription desc)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • manifestReader

        @Requirement
        private BundleReader manifestReader
    • Constructor Detail

      • DependencyComputer

        public DependencyComputer()
    • Method Detail

      • computeDependencies

        public java.util.List<DependencyComputer.DependencyEntry> computeDependencies​(org.eclipse.osgi.service.resolver.StateHelper helper,
                                                                                      org.eclipse.osgi.service.resolver.BundleDescription desc)
      • retrieveVisiblePackagesFromState

        private java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> retrieveVisiblePackagesFromState​(org.eclipse.osgi.service.resolver.StateHelper helper,
                                                                                                                                                                         org.eclipse.osgi.service.resolver.BundleDescription desc)
      • addVisiblePackagesFromState

        private void addVisiblePackagesFromState​(org.eclipse.osgi.service.resolver.StateHelper helper,
                                                 org.eclipse.osgi.service.resolver.BundleDescription desc,
                                                 java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> visiblePackages)
      • getRule

        private ClasspathEntry.AccessRule getRule​(org.eclipse.osgi.service.resolver.StateHelper helper,
                                                  org.eclipse.osgi.service.resolver.BundleDescription desc,
                                                  org.eclipse.osgi.service.resolver.ExportPackageDescription export)
      • addDependencyViaImportPackage

        protected void addDependencyViaImportPackage​(org.eclipse.osgi.service.resolver.BundleDescription desc,
                                                     java.util.HashSet<org.eclipse.osgi.service.resolver.BundleDescription> added,
                                                     java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map,
                                                     java.util.ArrayList<DependencyComputer.DependencyEntry> entries)
      • addDependency

        private void addDependency​(org.eclipse.osgi.service.resolver.BundleDescription desc,
                                   java.util.HashSet<org.eclipse.osgi.service.resolver.BundleDescription> added,
                                   java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map,
                                   java.util.ArrayList<DependencyComputer.DependencyEntry> entries)
      • addDependency

        private void addDependency​(org.eclipse.osgi.service.resolver.BundleDescription desc,
                                   java.util.HashSet<org.eclipse.osgi.service.resolver.BundleDescription> added,
                                   java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map,
                                   java.util.ArrayList<DependencyComputer.DependencyEntry> entries,
                                   boolean useInclusion)
      • isPatchFragment

        private boolean isPatchFragment​(org.eclipse.osgi.service.resolver.BundleDescription bundleDescription)
      • addPlugin

        private boolean addPlugin​(org.eclipse.osgi.service.resolver.BundleDescription desc,
                                  boolean useInclusions,
                                  java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map,
                                  java.util.ArrayList<DependencyComputer.DependencyEntry> entries)
      • getInclusions

        private java.util.List<ClasspathEntry.AccessRule> getInclusions​(java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map,
                                                                        org.eclipse.osgi.service.resolver.BundleDescription desc)
      • addHostPlugin

        private void addHostPlugin​(org.eclipse.osgi.service.resolver.HostSpecification hostSpec,
                                   java.util.HashSet<org.eclipse.osgi.service.resolver.BundleDescription> added,
                                   java.util.Map<org.eclipse.osgi.service.resolver.BundleDescription,​java.util.ArrayList<ClasspathEntry.AccessRule>> map,
                                   java.util.ArrayList<DependencyComputer.DependencyEntry> entries)
      • hasExtensibleAPI

        private boolean hasExtensibleAPI​(org.eclipse.osgi.service.resolver.BundleDescription desc)
      • computeBootClasspathExtraAccessRules

        public java.util.List<ClasspathEntry.AccessRule> computeBootClasspathExtraAccessRules​(org.eclipse.osgi.service.resolver.StateHelper helper,
                                                                                              org.eclipse.osgi.service.resolver.BundleDescription desc)
        Although totally not obvious from the specification text, section 3.15 "Extension Bundles" of OSGi Core Spec apparently says that framework extension bundles can export additional packaged of the underlying JRE. More specific explanation is provided in [1] and I verified that at least Equinox 3.7.1 does indeed behave like described.

        There does not seem to be a way to tell which packages exported by a framework extension bundle are supposed to come from JRE and which from the bundle itself, so returned classpath access rules include all packages exported by the framework extension bundles. [1] http://blog.meschberger.ch/2008/10/osgi-bundles-require-classes-from.html

      • isFrameworkExtension

        private boolean isFrameworkExtension​(org.eclipse.osgi.service.resolver.BundleDescription bundle)