public AssemblyResolutionResults resolve() {
		RP empty = factory.nop("Empty");
		AssemblyConstructStateGenerator rootGen =
			new AssemblyConstructStateGenerator(this, tree, empty);

		Collection<AssemblyResolvedError> errors = new ArrayList<>();
		Stream<AssemblyGeneratedPrototype> protStream =
			rootGen.generate(new GeneratorContext(List.of(), 0));

		if (DBG == DbgTimer.ACTIVE) {
			try (DbgCtx dc = DBG.start("Prototypes:")) {
				protStream = protStream.map(prot -> {
					DBG.println(prot);
					return prot;
				}).collect(Collectors.toList()).stream();
			}
		}

		Stream<AssemblyResolvedPatterns> patStream =
			protStream.map(p -> p.state).distinct().flatMap(s -> s.resolve(empty, errors));

		AssemblyResolutionResults results =
			patStream.collect(Collectors.toCollection(factory::newAssemblyResolutionResults));
		results = resolveRootRecursion(results);
		results = selectContext(results);
		results = resolvePendingBackfills(results);
		// TODO: Remove this? It's subsumed by filterByDisassembly, and more accurately....
		results = filterForbidden(results);
		results = filterByDisassembly(results);
		for (AssemblyResolvedError err : errors) {
			results.add(err);
		}
		return results;
	}
Resolve the tree for the given parameters

@return a set of resolutions (encodings and errors)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AbstractAssemblyTreeResolver.java