public void analyzeInnerClasses(ProgressListener pl, double done,
			double scale) {
		double subScale = scale / innerComplexity;
		// If output should be immediate, we delay analyzation to output.
		// Note that this may break anonymous classes, but the user
		// has been warned.
		if ((Options.options & Options.OPTION_IMMEDIATE) != 0)
			return;

		// Now analyze the inner classes.
		for (int j = 0; j < inners.length; j++) {
			if (pl != null) {
				double innerCompl = inners[j].getComplexity() * subScale;
				if (innerCompl > STEP_COMPLEXITY) {
					double innerscale = subScale * inners[j].methodComplexity;
					inners[j].analyze(pl, done, innerscale);
					inners[j].analyzeInnerClasses(null, done + innerscale,
							innerCompl - innerscale);
				} else {
					pl.updateProgress(done, inners[j].name);
					inners[j].analyze(null, 0.0, 0.0);
					inners[j].analyzeInnerClasses(null, 0.0, 0.0);
				}
				done += innerCompl;
			} else {
				inners[j].analyze(null, 0.0, 0.0);
				inners[j].analyzeInnerClasses(null, 0.0, 0.0);
			}
		}

		// Now analyze the method scoped classes.
		for (int j = 0; j < methods.length; j++)
			methods[j].analyzeInnerClasses();
	}