Package org.eclipse.tycho.core.osgitools
Class DependencyComputer
- java.lang.Object
-
- org.eclipse.tycho.core.osgitools.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DependencyComputer.DependencyEntry
-
Field Summary
Fields Modifier and Type Field Description private BundleReader
manifestReader
-
Constructor Summary
Constructors Constructor Description DependencyComputer()
-
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)
-
-
-
Field Detail
-
manifestReader
@Requirement private BundleReader manifestReader
-
-
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)
-
-