public UAA build() {
            failIfAlreadyBuilt();

            logVersion(showFullVersion);

            // In case we only want specific fields we must add these special cases too
            if (!wantedFieldNames.isEmpty()) {
                // Special field that affects ALL fields.
                wantedFieldNames.add(SET_ALL_FIELDS);

                // This is always needed to determine the Hacker fallback
                wantedFieldNames.add(DEVICE_CLASS);
            }

            boolean keepTestsAfterPreheat = keepTests;
            if (preheatIterations != 0) {
                // Because we want to do a preheat we keep the tests until
                // after the preheat and then drop them if so desired.
                keepTests = true;
            }

            ConfigLoader configLoader = new ConfigLoader(showMatcherStats)
                .keepTests(keepTests)
                .addResource(resources, false)
                .addResource(optionalResources, true);

            int yamlRuleCount = 1;
            for (String yamlRule : yamlRules) {
                configLoader.addYaml(yamlRule, "Manually Inserted Rules " + yamlRuleCount++);
            }

            AnalyzerConfig analyzerConfig =
                configLoader
                    .load()
                    .setUserAgentMaxLength(userAgentMaxLength)
                    .wantedFieldNames(wantedFieldNames);

            uaa.configure(analyzerConfig, showMatcherStats, delayInitialization);

            if (preheatIterations < 0) {
                uaa.preHeat();
            } else {
                if (preheatIterations > 0) {
                    uaa.preHeat(preheatIterations);
                }
            }
            if (!keepTestsAfterPreheat) {
                uaa.dropTests();
            }

            didBuildStep = true;
            return uaa;
        }
Construct the analyzer and run the preheat sequence (if requested).
@return the new analyzer instance.
analyzer/src/main/java/nl/basjes/parse/useragent/AbstractUserAgentAnalyzerDirect.java