new PruneUnconditionalExceptionThrowerEdges(methodGen, cfg, getConstantPoolGen(), analysisContext).execute();
PruneUnconditionalExceptionThrowerEdges pruner = new PruneUnconditionalExceptionThrowerEdges(methodGen, cfg, getConstantPoolGen(), analysisContext); pruner.execute(); changed = changed || pruner.wasCFGModified();
		public CFG getRefinedCFG(Method method) throws CFGBuilderException {			MethodGen methodGen = getMethodGen(method);			if (methodGen == null) {				JavaClassAndMethod javaClassAndMethod = new JavaClassAndMethod(jclass, method);				getLookupFailureCallback().reportSkippedAnalysis(javaClassAndMethod.toMethodDescriptor());				throw new MethodUnprofitableException(javaClassAndMethod);			}			CFG cfg = getRawCFG(method);						// Record method name and signature for informational purposes			cfg.setMethodName(SignatureConverter.convertMethodSignature(methodGen));			// HACK:			// Due to recursive method invocations, we may get a recursive			// request for the pruned CFG of a method.  In this case,			// we just return the raw CFG.			String methodId = methodGen.getClassName() + "." + methodGen.getName() + ":" + methodGen.getSignature();			if (DEBUG_CFG) {				indent();				System.out.println("CC: getting refined CFG for " + methodId);			}			if (DEBUG) System.out.println("ClassContext: request to prune " + methodId);			if (!busyCFGSet.add(methodId))				return cfg;			final boolean PRUNE_INFEASIBLE_EXCEPTION_EDGES =				analysisContext.getBoolProperty(AnalysisFeatures.ACCURATE_EXCEPTIONS);						if (PRUNE_INFEASIBLE_EXCEPTION_EDGES && !cfg.isFlagSet(PRUNED_INFEASIBLE_EXCEPTIONS)) {				try {					TypeDataflow typeDataflow = getTypeDataflow(method);					// Exception edge pruning based on ExceptionSets.					// Note: this is quite slow.					new PruneInfeasibleExceptionEdges(cfg, methodGen, typeDataflow).execute();				} catch (DataflowAnalysisException e) {					// FIXME: should report the error				} catch (ClassNotFoundException e) {					getLookupFailureCallback().reportMissingClass(e);				}			}			cfg.setFlags(cfg.getFlags() | PRUNED_INFEASIBLE_EXCEPTIONS);						final boolean PRUNE_UNCONDITIONAL_EXCEPTION_THROWER_EDGES =				!analysisContext.getBoolProperty(AnalysisFeatures.CONSERVE_SPACE);			if (PRUNE_UNCONDITIONAL_EXCEPTION_THROWER_EDGES && !cfg.isFlagSet(PRUNED_UNCONDITIONAL_THROWERS)) {				try {					new PruneUnconditionalExceptionThrowerEdges(methodGen, cfg, getConstantPoolGen(), analysisContext).execute();				} catch (DataflowAnalysisException e) {					// FIXME: should report the error				}			}			cfg.setFlags(cfg.getFlags() | PRUNED_UNCONDITIONAL_THROWERS);			busyCFGSet.remove(methodId);			return cfg;		}