boolean satisfied = false; Vector unevalCondsSets = null; SecurityManager sm = System.getSecurityManager(); FrameworkSecurityManager fsm = null; if (sm instanceof FrameworkSecurityManager) { fsm = (FrameworkSecurityManager) sm; }
	public boolean implies(Permission perm) {		processPending();		if (satisfiedCPS.implies(perm)) {			this.empty = false;			return true;		}		boolean newEmpty = !satisfiedCPS.isNonEmpty();		ConditionalPermissionSet cpsArray[] = (ConditionalPermissionSet[]) satisfiableCPSs.toArray(new ConditionalPermissionSet[0]);		cpsLoop: for (int i = 0; i < cpsArray.length; i++) {			if (cpsArray[i].isNonEmpty()) {				newEmpty = false;				if (cpsArray[i].implies(perm)) {					Condition conds[] = cpsArray[i].getNeededConditions();					Vector unevaluatedConds = new Vector();					for (int j = 0; j < conds.length; j++) {						if (conds[j].isEvaluated() && !conds[j].isSatisfied()) {							continue cpsLoop;						}						if (!conds[j].isEvaluated()) {							unevaluatedConds.add(conds[j]);						}					}					/*					 * TODO: we need to add the unevaluatedConds to the					 * ThreadLocal variable. We also need to track where we left					 * off incase we need to do another pass					 */					this.empty = false;					return true;				}			} else {				satisfiedCPIs.remove(cpsArray[i]);			}		}		this.empty = newEmpty;		return false;	}