Search in sources :

Example 1 with CompilerApiData

use of org.gradle.api.internal.tasks.compile.incremental.compilerapi.CompilerApiData in project gradle by gradle.

the class IncrementalResultStoringCompiler method storeResult.

private void storeResult(JavaCompileSpec spec, WorkResult result) {
    ClassSetAnalysisData outputSnapshot = classpathSnapshotter.analyzeOutputFolder(spec.getDestinationDir());
    ClassSetAnalysisData classpathSnapshot = classpathSnapshotter.getClasspathSnapshot(Iterables.concat(spec.getCompileClasspath(), spec.getModulePath()));
    AnnotationProcessingData annotationProcessingData = getAnnotationProcessingData(spec, result);
    CompilerApiData compilerApiData = getCompilerApiData(spec, result);
    ClassSetAnalysisData minimizedClasspathSnapshot = classpathSnapshot.reduceToTypesAffecting(outputSnapshot, compilerApiData);
    PreviousCompilationData data = new PreviousCompilationData(outputSnapshot, annotationProcessingData, minimizedClasspathSnapshot, compilerApiData);
    File previousCompilationDataFile = Objects.requireNonNull(spec.getCompileOptions().getPreviousCompilationDataFile());
    previousCompilationAccess.writePreviousCompilationData(data, previousCompilationDataFile);
}
Also used : AnnotationProcessingData(org.gradle.api.internal.tasks.compile.incremental.processing.AnnotationProcessingData) CompilerApiData(org.gradle.api.internal.tasks.compile.incremental.compilerapi.CompilerApiData) ClassSetAnalysisData(org.gradle.api.internal.tasks.compile.incremental.deps.ClassSetAnalysisData) PreviousCompilationData(org.gradle.api.internal.tasks.compile.incremental.recomp.PreviousCompilationData) File(java.io.File)

Example 2 with CompilerApiData

use of org.gradle.api.internal.tasks.compile.incremental.compilerapi.CompilerApiData in project gradle by gradle.

the class IncrementalResultStoringCompiler method getCompilerApiData.

private CompilerApiData getCompilerApiData(JavaCompileSpec spec, WorkResult result) {
    if (spec.getCompileOptions().supportsCompilerApi()) {
        CompilerApiData previousCompilerApiData = null;
        RecompilationSpec recompilationSpec = null;
        if (result instanceof IncrementalCompilationResult) {
            previousCompilerApiData = ((IncrementalCompilationResult) result).getPreviousCompilationData().getCompilerApiData();
            recompilationSpec = ((IncrementalCompilationResult) result).getRecompilationSpec();
            result = ((IncrementalCompilationResult) result).getCompilerResult();
        }
        Set<String> changedClasses = recompilationSpec == null ? Collections.emptySet() : recompilationSpec.getClassesToCompile();
        ConstantToDependentsMapping previousConstantToDependentsMapping = previousCompilerApiData == null ? null : previousCompilerApiData.getConstantToClassMapping();
        Map<String, Set<String>> previousSourceClassesMapping = previousCompilerApiData == null ? null : previousCompilerApiData.getSourceToClassMapping();
        if (result instanceof ApiCompilerResult) {
            ApiCompilerResult jdkJavaResult = (ApiCompilerResult) result;
            ConstantToDependentsMapping newConstantsToDependentsMapping = jdkJavaResult.getConstantsAnalysisResult().getConstantToDependentsMapping().orElseThrow(() -> new GradleException("Constants to dependents mapping not present, but it should be"));
            Map<String, Set<String>> newSourceClassesMapping = jdkJavaResult.getSourceClassesMapping();
            Map<String, Set<String>> mergedSourceClassesMapping;
            if (previousSourceClassesMapping == null) {
                mergedSourceClassesMapping = newSourceClassesMapping;
            } else {
                mergedSourceClassesMapping = mergeSourceClassesMappings(previousSourceClassesMapping, newSourceClassesMapping, changedClasses);
            }
            ConstantToDependentsMapping mergedConstants = new ConstantToDependentsMappingMerger().merge(newConstantsToDependentsMapping, previousConstantToDependentsMapping, changedClasses);
            if (spec.getCompileOptions().supportsConstantAnalysis()) {
                return CompilerApiData.withConstantsMapping(mergedSourceClassesMapping, mergedConstants);
            } else {
                return CompilerApiData.withoutConstantsMapping(mergedSourceClassesMapping);
            }
        }
    }
    return CompilerApiData.unavailable();
}
Also used : CompilerApiData(org.gradle.api.internal.tasks.compile.incremental.compilerapi.CompilerApiData) RecompilationSpec(org.gradle.api.internal.tasks.compile.incremental.recomp.RecompilationSpec) HashSet(java.util.HashSet) ImmutableSet(com.google.common.collect.ImmutableSet) Set(java.util.Set) IncrementalCompilationResult(org.gradle.api.internal.tasks.compile.incremental.recomp.IncrementalCompilationResult) GradleException(org.gradle.api.GradleException) ConstantToDependentsMappingMerger(org.gradle.api.internal.tasks.compile.incremental.compilerapi.constants.ConstantToDependentsMappingMerger) ApiCompilerResult(org.gradle.api.internal.tasks.compile.ApiCompilerResult) ConstantToDependentsMapping(org.gradle.api.internal.tasks.compile.incremental.compilerapi.constants.ConstantToDependentsMapping)

Aggregations

CompilerApiData (org.gradle.api.internal.tasks.compile.incremental.compilerapi.CompilerApiData)2 ImmutableSet (com.google.common.collect.ImmutableSet)1 File (java.io.File)1 HashSet (java.util.HashSet)1 Set (java.util.Set)1 GradleException (org.gradle.api.GradleException)1 ApiCompilerResult (org.gradle.api.internal.tasks.compile.ApiCompilerResult)1 ConstantToDependentsMapping (org.gradle.api.internal.tasks.compile.incremental.compilerapi.constants.ConstantToDependentsMapping)1 ConstantToDependentsMappingMerger (org.gradle.api.internal.tasks.compile.incremental.compilerapi.constants.ConstantToDependentsMappingMerger)1 ClassSetAnalysisData (org.gradle.api.internal.tasks.compile.incremental.deps.ClassSetAnalysisData)1 AnnotationProcessingData (org.gradle.api.internal.tasks.compile.incremental.processing.AnnotationProcessingData)1 IncrementalCompilationResult (org.gradle.api.internal.tasks.compile.incremental.recomp.IncrementalCompilationResult)1 PreviousCompilationData (org.gradle.api.internal.tasks.compile.incremental.recomp.PreviousCompilationData)1 RecompilationSpec (org.gradle.api.internal.tasks.compile.incremental.recomp.RecompilationSpec)1