boolean forceRequireOSGi = state != null && host == null && manifestVersion < 2 && Constants.getInternalSymbolicName() != null && !Constants.getInternalSymbolicName().equals(result.getSymbolicName()) && state.getBundle(Constants.getInternalSymbolicName(), null) != null; result.setRequiredBundles(createRequiredBundles(requires, forceRequireOSGi));
result.setRequiredBundles(createRequiredBundles(requires));
	static BundleDescription createBundleDescription(StateImpl state, Dictionary manifest, String location) throws BundleException {		BundleDescriptionImpl result = new BundleDescriptionImpl();		String manifestVersionHeader = (String) manifest.get(Constants.BUNDLE_MANIFESTVERSION);		int manifestVersion = 1;		if (manifestVersionHeader != null)			manifestVersion = Integer.parseInt(manifestVersionHeader);		// retrieve the symbolic-name and the singleton status 		String symbolicNameHeader = (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME);		if (symbolicNameHeader != null) {			ManifestElement[] symbolicNameElements = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, symbolicNameHeader);			if (symbolicNameElements.length > 0) {				result.setSymbolicName(symbolicNameElements[0].getValue());				String singleton = symbolicNameElements[0].getDirective(Constants.SINGLETON_DIRECTIVE);				if (singleton == null) // TODO this is for backward compatibility; need to check manifest version < 2 to allow this after everyone has converted to new syntax					singleton = symbolicNameElements[0].getAttribute(Constants.SINGLETON_DIRECTIVE);				result.setStateBit(BundleDescriptionImpl.SINGLETON, "true".equals(singleton)); //$NON-NLS-1$				String fragmentAttachment = symbolicNameElements[0].getDirective(Constants.FRAGMENT_ATTACHMENT_DIRECTIVE);				if (fragmentAttachment != null) {					if (fragmentAttachment.equals(Constants.FRAGMENT_ATTACHMENT_RESOLVETIME)) {						result.setStateBit(BundleDescriptionImpl.ATTACH_FRAGMENTS, true);						result.setStateBit(BundleDescriptionImpl.DYNAMIC_FRAGMENTS, false);					} else if (fragmentAttachment.equals(Constants.FRAGMENT_ATTACHMENT_NEVER)) {						result.setStateBit(BundleDescriptionImpl.ATTACH_FRAGMENTS, false);						result.setStateBit(BundleDescriptionImpl.DYNAMIC_FRAGMENTS, false);					}				}			}		}		// retrieve other headers		String version = (String) manifest.get(Constants.BUNDLE_VERSION);		result.setVersion((version != null) ? Version.parseVersion(version) : Version.emptyVersion);		result.setLocation(location);		result.setPlatformFilter((String) manifest.get(Constants.ECLIPSE_PLATFORMFILTER));		ManifestElement[] host = ManifestElement.parseHeader(Constants.FRAGMENT_HOST, (String) manifest.get(Constants.FRAGMENT_HOST));		if (host != null)			result.setHost(createHostSpecification(host[0]));		ManifestElement[] exports = ManifestElement.parseHeader(Constants.EXPORT_PACKAGE, (String) manifest.get(Constants.EXPORT_PACKAGE));		ManifestElement[] reexports = ManifestElement.parseHeader(Constants.REEXPORT_PACKAGE, (String) manifest.get(Constants.REEXPORT_PACKAGE));		ManifestElement[] provides = ManifestElement.parseHeader(Constants.PROVIDE_PACKAGE, (String) manifest.get(Constants.PROVIDE_PACKAGE)); // TODO this is null for now until the framwork is updated to handle the new re-export semantics		boolean strict = state != null && state.inStrictMode();		ArrayList providedExports = new ArrayList(provides == null ? 0 : provides.length);		result.setExportPackages(createExportPackages(exports, reexports, provides, providedExports, manifestVersion, strict));		ManifestElement[] imports = ManifestElement.parseHeader(Constants.IMPORT_PACKAGE, (String) manifest.get(Constants.IMPORT_PACKAGE));		ManifestElement[] dynamicImports = ManifestElement.parseHeader(Constants.DYNAMICIMPORT_PACKAGE, (String) manifest.get(Constants.DYNAMICIMPORT_PACKAGE));		result.setImportPackages(createImportPackages(result.getExportPackages(), providedExports, imports, dynamicImports, manifestVersion));		ManifestElement[] requires = ManifestElement.parseHeader(Constants.REQUIRE_BUNDLE, (String) manifest.get(Constants.REQUIRE_BUNDLE));		// make sure osgi is required if: not a fragment, manifestVersion < 2, not the system bundle, and the system bundle is available		boolean forceRequireOSGi = state != null && host == null && manifestVersion < 2 && Constants.getInternalSymbolicName() != null && !Constants.getInternalSymbolicName().equals(result.getSymbolicName()) && state.getBundle(Constants.getInternalSymbolicName(), null) != null;		result.setRequiredBundles(createRequiredBundles(requires, forceRequireOSGi));		return result;	}