public static CodeGenConfig load()

in grails-cli/src/main/java/org/grails/forge/cli/CodeGenConfig.java [104:171]


    public static CodeGenConfig load(BeanContext beanContext, File directory, ConsoleOutput consoleOutput) {

        File grailsCli = new File(directory, "grails-forge-cli.yml");

        if (!grailsCli.exists()) {
            // backwards compatibility for grails-cli.yml
            grailsCli = new File(directory, "grails-cli.yml");
        }

        if (grailsCli.exists()) {
            try (InputStream inputStream = Files.newInputStream(grailsCli.toPath())) {
                Yaml yaml = new Yaml();
                Map<String, Object> map = new LinkedHashMap<>();
                Iterable<Object> objects = yaml.loadAll(inputStream);
                Iterator<Object> i = objects.iterator();
                if (i.hasNext()) {
                    while (i.hasNext()) {
                        Object object = i.next();
                        if (object instanceof Map) {
                            map.putAll((Map) object);
                        }
                    }
                }
                BeanIntrospection<CodeGenConfig> introspection = BeanIntrospection.getIntrospection(CodeGenConfig.class);
                CodeGenConfig codeGenConfig = introspection.instantiate();
                introspection.getBeanProperties().forEach(bp -> {
                    Object value = map.get(bp.getName());
                    if (value != null) {
                        bp.convertAndSet(codeGenConfig, value);
                    }
                });

                if (map.containsKey("profile")) {
                    codeGenConfig.legacy = true;
                    String profile = map.get("profile").toString();
                    if (profile.equals("web")) {
                        codeGenConfig.setApplicationType(ApplicationType.WEB);
                    } else if (profile.equals("rest-api")) {
                        codeGenConfig.setApplicationType(ApplicationType.REST_API);
                    } else if (profile.equals("plugin")) {
                        codeGenConfig.setApplicationType(ApplicationType.PLUGIN);
                    } else if (profile.equals("web-plugin")) {
                        codeGenConfig.setApplicationType(ApplicationType.WEB_PLUGIN);
                    } else {
                        return null;
                    }

                    AvailableFeatures availableFeatures = beanContext.getBean(AvailableFeatures.class, Qualifiers.byName(codeGenConfig.getApplicationType().getName()));

                    codeGenConfig.setFeatures(availableFeatures.getAllFeatures()
                            .filter(f -> f instanceof DefaultFeature)
                            .map(DefaultFeature.class::cast)
                            .filter(f -> f.shouldApply(
                                    codeGenConfig.getApplicationType(),
                                    new Options(codeGenConfig.getTestFramework(), JdkVersion.DEFAULT_OPTION),
                                    new HashSet<>()))
                            .map(Feature::getName)
                            .collect(Collectors.toList()));

                    consoleOutput.warning("This project is using Grails CLI v2 but is still using the v1 grails-forge-cli.yml format");
                    consoleOutput.warning("To replace the configuration with the new format, run `grails update-cli-config`");
                }

                return codeGenConfig;
            } catch (IOException e) { }
        }
        return null;
    }