if (permissionMsg != null) { return permissionMsg;
if (runtimeResolveError != null) { return runtimeResolveError;
	protected String getResolutionFailureMessage() {		String defaultMessage = Msg.formatter.getString("BUNDLE_UNRESOLVED_EXCEPTION");		// don't spend time if debug info is not needed		if (!Debug.DEBUG) {			return defaultMessage;		}		if (permissionMsg != null) {			return permissionMsg; // do not null this field out until a successful resolve is done.		}		BundleDescription bundleDescription = getBundleDescription();		if (bundleDescription == null) {			return defaultMessage;		}		// just a sanity check - this would be an inconsistency between the		// framework and the state		if (bundleDescription.isResolved()) {			throw new IllegalStateException("bundle *is* resolved");		}		VersionConstraint[] unsatisfied = framework.adaptor.getPlatformAdmin().getStateHelper().getUnsatisfiedConstraints(bundleDescription);		if (unsatisfied.length == 0) {			return Msg.formatter.getString("BUNDLE_UNRESOLVED_NOT_CHOSEN_EXCEPTION");		}		StringBuffer missing = new StringBuffer();		for (int i = 0; i < unsatisfied.length; i++) {			if (unsatisfied[i] instanceof PackageSpecification) {				missing.append(Msg.formatter.getString("BUNDLE_UNRESOLVED_PACKAGE", toString(unsatisfied[i])));			} else if (unsatisfied[i] instanceof BundleSpecification) {				missing.append(Msg.formatter.getString("BUNDLE_UNRESOLVED_BUNDLE", toString(unsatisfied[i])));			} else {				missing.append(Msg.formatter.getString("BUNDLE_UNRESOLVED_HOST", toString(unsatisfied[i])));			}			missing.append(',');		}		missing.deleteCharAt(missing.length() - 1);		return Msg.formatter.getString("BUNDLE_UNRESOLVED_UNSATISFIED_CONSTRAINT_EXCEPTION", missing.toString());	}