private void createPartGraph(Attribute attribute) {
		long start = System.nanoTime();
		
		Map<String, Part> parts = new HashMap<>();
		
		for (Attribute child : attribute.getChildren()) {
			if (child.getName().equals("PART")) {
				parts.put(child.getValue("part"), new Part(child));
			}
		}

		partCount = parts.size();
		Set<String> rootCandidates = new HashSet<>();
		rootCandidates.addAll(parts.keySet());
		
		for (String part : parts.keySet()) {
			for (String succ : parts.get(part).getSuccessors()) {
				rootCandidates.remove(succ);
			}
		}
		
		if (rootCandidates.size() != 1) {
			throw new IllegalArgumentException("ksp file must contain exactly one root. (" + rootCandidates.size() + ")");
		}
		
		root = parts.get(rootCandidates.iterator().next());
		
		resolveParts(root, parts);
		
		LogManager.getLogger(getClass()).info("createPartGraph: " + (System.nanoTime() - start) + " ns");
	}