public FlowGraph(final MethodEditor method) {
		this.method = method;

		subroutines = new HashMap();
		catchBlocks = new ArrayList(method.tryCatches().size());
		handlers = new HashMap(method.tryCatches().size() * 2 + 1);
		trace = new LinkedList();

		srcBlock = newBlock();
		iniBlock = newBlock();
		snkBlock = newBlock();

		trace.add(iniBlock);

		// If this method is empty(!) just make some default cfg edges
		if (method.codeLength() == 0) {
			addEdge(srcBlock, iniBlock);
			addEdge(iniBlock, snkBlock);
			addEdge(srcBlock, snkBlock);

			buildSpecialTrees(null, null);

			return;
		}

		final Map labelPos = new HashMap();
		buildBlocks(labelPos);
		removeUnreachable();

		// Make sure any labels in the removed blocks are saved.
		saveLabels();

		if (FlowGraph.DEBUG || FlowGraph.DB_GRAPHS) {
			System.out.println("---------- After building tree:");
			print(System.out);
			System.out.println("---------- end print after building tree");
		}

	}