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 classDependencyComputer.DependencyEntry
-
Field Summary
Fields Modifier and Type Field Description private BundleReadermanifestReader
-
Constructor Summary
Constructors Constructor Description DependencyComputer()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddDependency(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 voidaddDependency(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 voidaddDependencyViaImportPackage(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 voidaddHostPlugin(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 booleanaddPlugin(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 voidaddVisiblePackagesFromState(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.AccessRulegetRule(org.eclipse.osgi.service.resolver.StateHelper helper, org.eclipse.osgi.service.resolver.BundleDescription desc, org.eclipse.osgi.service.resolver.ExportPackageDescription export)private booleanhasExtensibleAPI(org.eclipse.osgi.service.resolver.BundleDescription desc)private booleanisFrameworkExtension(org.eclipse.osgi.service.resolver.BundleDescription bundle)private booleanisPatchFragment(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)
-
-