private void loadApi()

in analysis/src/main/java/org/eclipse/jifa/analysis/AbstractApiExecutor.java [123:174]


    private void loadApi() {
        this.apis = new HashSet<>();

        // load predefine apis
        fillPredefinedApis("needOptionsForAnalysis", Path.class);
        fillPredefinedApis("analyze", Path.class, Map.class);
        fillPredefinedApis("progressOfAnalysis", Path.class);
        fillPredefinedApis("release", Path.class);
        fillPredefinedApis("clean", Path.class);
        fillPredefinedApis("errorLog", Path.class);

        // load apis from analyzer class
        Class<Analyzer> analyzerClass = analyzerClass();
        for (Method method : analyzerClass.getMethods()) {
            if (Modifier.isStatic(method.getModifiers()) ||
                (!analyzerClass.isInterface() && method.getDeclaringClass() != analyzerClass) ||
                method.isAnnotationPresent(Exclude.class)) {
                continue;
            }
            String name = method.getName();
            if (methodNameConverter() != null) {
                name = methodNameConverter().convert(name);
            }
            String[] aliases = null;
            ApiMeta apiMeta = method.getAnnotation(ApiMeta.class);
            if (apiMeta != null) {
                if (StringUtils.isNotBlank(apiMeta.value())) {
                    name = apiMeta.value();
                }
                aliases = apiMeta.aliases();
            }
            // validate duplication
            Validate.isTrue(!apiMethodMap.containsKey(name), "Duplicate api name: " + name);
            if (aliases != null) {
                for (String alias : aliases) {
                    Validate.isTrue(!apiMethodMap.containsKey(alias), "Duplicate api name: " + alias);
                }
            }

            ApiParameter[] apiParameters = buildApiParameters(method);

            Set<String> aliasesSet = aliases != null ? Set.of(aliases) : Collections.emptySet();
            Api api = new Api(name, aliasesSet, apiParameters);

            apiMethodMap.put(name, method);
            for (String alias : aliasesSet) {
                apiMethodMap.put(alias, method);
            }
            apis.add(api);
        }
        this.apis = Collections.unmodifiableSet(apis);
    }