@SuppressWarnings("unchecked")
    public AnalysisResult analyze(@Nonnull AnalysisContext analysisContext) {
        TIMING_LOG.debug("Analysis starts");

        AnalysisResult.Extensions extensions = prepareAnalysis(analysisContext);

        if (extensions.getAnalyzers().isEmpty()) {
            throw new IllegalArgumentException("At least one analyzer needs to be present. Make sure there is at" +
                    " least one on the classpath and that the extension filters do not exclude all of them.");
        }

        StreamSupport.stream(extensions.spliterator(), false)
                .map(e -> (Map.Entry<ExtensionInstance<? extends Configurable>, AnalysisContext>) (Map.Entry) e)
                .forEach(e -> e.getKey().getInstance().initialize(e.getValue()));

        AnalysisProgress progress = new AnalysisProgress(extensions, pipelineConfiguration);

        TIMING_LOG.debug("Initialization complete.");

        matchingTransformsCache.clear();

        Exception error = null;
        try {
            for (ExtensionInstance<ApiAnalyzer> ia : extensions.getAnalyzers().keySet()) {
                analyzeWith(ia.getInstance(), analysisContext.getOldApi(), analysisContext.getNewApi(), progress);
            }
        } catch (Exception t) {
            error = t;
        }

        return new AnalysisResult(error, extensions);
    }
@ SuppressWarnings ( "unchecked" ) public AnalysisResult analyze ( @ Nonnull AnalysisContext analysisContext ) { TIMING_LOG . debug ( "Analysis starts" ) ; AnalysisResult . Extensions extensions = prepareAnalysis ( analysisContext ) ; if ( extensions . getAnalyzers ( ) . isEmpty ( ) ) { throw new IllegalArgumentException ( "At least one analyzer needs to be present. Make sure there is at" + " least one on the classpath and that the extension filters do not exclude all of them." ) ; } StreamSupport . stream ( extensions . spliterator ( ) , false ) . map ( e -> ( Map . Entry < ExtensionInstance < ? extends Configurable > , AnalysisContext > ) ( Map . Entry ) e ) . forEach ( e -> e . getKey ( ) . getInstance ( ) . initialize ( e . getValue ( ) ) ) ; AnalysisProgress progress = new AnalysisProgress ( extensions , pipelineConfiguration ) ; TIMING_LOG . debug ( "Initialization complete." ) ; matchingTransformsCache . clear ( ) ; Exception error = null ; try { for ( ExtensionInstance < ApiAnalyzer > ia : extensions . getAnalyzers ( ) . keySet ( ) ) { analyzeWith ( ia . getInstance ( ) , analysisContext . getOldApi ( ) , analysisContext . getNewApi ( ) , progress ) ; } } catch ( Exception t ) { error = t ; } return new AnalysisResult ( error , extensions ) ; }
Performs the analysis configured by the given analysis context.
<p>
Make sure to call the {@link AnalysisResult#close()} method (or perform the analysis in try-with-resources
block).

@param analysisContext describes the analysis to be performed
@return a result object that has to be closed for the analysis to conclude