org.gradle.api.tasks.incremental.InputFileDetails Java Examples

The following examples show how to use org.gradle.api.tasks.incremental.InputFileDetails. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: JarChangeProcessor.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 6 votes vote down vote up
public RebuildInfo processJarChange(InputFileDetails jarChangeDetails, JarArchive jarArchive) {
    JarSnapshot existing = jarSnapshotFeeder.changedJar(jarChangeDetails.getFile());
    if (jarChangeDetails.isAdded()) {
        return DefaultRebuildInfo.NOTHING_TO_REBUILD;
    }

    if (jarChangeDetails.isRemoved()) {
        if (existing != null) {
            return new AllFromJarRebuildInfo(jarArchive);
        } else {
            return DefaultRebuildInfo.FULL_REBUILD;
        }
    }

    if (jarChangeDetails.isModified()) {
        if (existing != null) {
            JarSnapshot newSnapshot = jarSnapshotFeeder.createSnapshot(jarArchive);
            JarDelta jarDelta = existing.compareToSnapshot(newSnapshot);
            return new SpecificClassesRebuildInfo(jarDelta);
        } else {
            return new AllFromJarRebuildInfo(jarArchive);
        }
    }

    throw new IllegalArgumentException("Unknown input file details provided: " + jarChangeDetails);
}
 
Example #2
Source File: SelectiveCompilation.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 6 votes vote down vote up
public void execute(InputFileDetails inputFileDetails) {
    if (fullRebuildNeeded != null) {
        return;
    }
    File inputFile = inputFileDetails.getFile();
    String name = inputFile.getName();
    if (name.endsWith(".java")) {
        JavaSourceClass source = mapper.toJavaSourceClass(inputFile);
        compiler.addStaleClass(source);
        changedSourceOnly.include(source.getRelativePath());
        Set<String> actualDependents = dependencyInfo.getActualDependents(source.getClassName());
        if (actualDependents == null) {
            fullRebuildNeeded = "change to " + source.getClassName() + " requires full rebuild";
            return;
        }
        for (String d : actualDependents) {
            JavaSourceClass dSource = mapper.toJavaSourceClass(d);
            compiler.addStaleClass(dSource);
            changedSourceOnly.include(dSource.getRelativePath());
        }
    }
    if (name.endsWith(".jar")) {
        fullRebuildNeeded = "change to " + inputFile + " requires full rebuild";
        return;
    }
}
 
Example #3
Source File: JarChangeProcessor.java    From pushfish-android with BSD 2-Clause "Simplified" License 6 votes vote down vote up
public RebuildInfo processJarChange(InputFileDetails jarChangeDetails, JarArchive jarArchive) {
    JarSnapshot existing = jarSnapshotFeeder.changedJar(jarChangeDetails.getFile());
    if (jarChangeDetails.isAdded()) {
        return DefaultRebuildInfo.NOTHING_TO_REBUILD;
    }

    if (jarChangeDetails.isRemoved()) {
        if (existing != null) {
            return new AllFromJarRebuildInfo(jarArchive);
        } else {
            return DefaultRebuildInfo.FULL_REBUILD;
        }
    }

    if (jarChangeDetails.isModified()) {
        if (existing != null) {
            JarSnapshot newSnapshot = jarSnapshotFeeder.createSnapshot(jarArchive);
            JarDelta jarDelta = existing.compareToSnapshot(newSnapshot);
            return new SpecificClassesRebuildInfo(jarDelta);
        } else {
            return new AllFromJarRebuildInfo(jarArchive);
        }
    }

    throw new IllegalArgumentException("Unknown input file details provided: " + jarChangeDetails);
}
 
Example #4
Source File: SelectiveCompilation.java    From pushfish-android with BSD 2-Clause "Simplified" License 6 votes vote down vote up
public void execute(InputFileDetails inputFileDetails) {
    if (fullRebuildNeeded != null) {
        return;
    }
    File inputFile = inputFileDetails.getFile();
    String name = inputFile.getName();
    if (name.endsWith(".java")) {
        JavaSourceClass source = mapper.toJavaSourceClass(inputFile);
        compiler.addStaleClass(source);
        changedSourceOnly.include(source.getRelativePath());
        Set<String> actualDependents = dependencyInfo.getActualDependents(source.getClassName());
        if (actualDependents == null) {
            fullRebuildNeeded = "change to " + source.getClassName() + " requires full rebuild";
            return;
        }
        for (String d : actualDependents) {
            JavaSourceClass dSource = mapper.toJavaSourceClass(d);
            compiler.addStaleClass(dSource);
            changedSourceOnly.include(dSource.getRelativePath());
        }
    }
    if (name.endsWith(".jar")) {
        fullRebuildNeeded = "change to " + inputFile + " requires full rebuild";
        return;
    }
}
 
Example #5
Source File: JarChangeProcessor.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void processChange(InputFileDetails input, RecompilationSpec spec) {
    JarArchive jarArchive = new JarArchive(input.getFile(), fileOperations.zipTree(input.getFile()));
    JarChangeDependentsFinder dependentsFinder = new JarChangeDependentsFinder(jarClasspathSnapshot, previousCompilation);
    DependentsSet actualDependents = dependentsFinder.getActualDependents(input, jarArchive);
    if (actualDependents.isDependencyToAll()) {
        spec.setFullRebuildCause(actualDependents.getDescription(), input.getFile());
        return;
    }
    spec.getClassNames().addAll(actualDependents.getDependentClasses());
}
 
Example #6
Source File: ChangesOnlyIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
@Override
protected void doOutOfDate(final Action<? super InputFileDetails> outOfDateAction) {
    for (TaskStateChange change : inputFilesState) {
        InputFileDetails fileChange = (InputFileDetails) change;
        if (fileChange.isRemoved()) {
            removedFiles.add(fileChange);
        } else {
            outOfDateAction.execute(fileChange);
        }
    }
}
 
Example #7
Source File: StatefulIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void removed(Action<? super InputFileDetails> removedAction) {
    if (!outOfDateProcessed) {
        throw new IllegalStateException("Must first process outOfDate files before processing removed files");
    }
    if (removedProcessed) {
        throw new IllegalStateException("Cannot process removed files multiple times");
    }
    doRemoved(removedAction);
    removedProcessed = true;
}
 
Example #8
Source File: StatefulIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void outOfDate(final Action<? super InputFileDetails> outOfDateAction) {
    if (outOfDateProcessed) {
        throw new IllegalStateException("Cannot process outOfDate files multiple times");
    }
    doOutOfDate(outOfDateAction);
    outOfDateProcessed = true;
}
 
Example #9
Source File: ChangesOnlyIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
@Override
protected void doOutOfDate(final Action<? super InputFileDetails> outOfDateAction) {
    for (TaskStateChange change : inputFilesState) {
        InputFileDetails fileChange = (InputFileDetails) change;
        if (fileChange.isRemoved()) {
            removedFiles.add(fileChange);
        } else {
            outOfDateAction.execute(fileChange);
        }
    }
}
 
Example #10
Source File: StatefulIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void removed(Action<? super InputFileDetails> removedAction) {
    if (!outOfDateProcessed) {
        throw new IllegalStateException("Must first process outOfDate files before processing removed files");
    }
    if (removedProcessed) {
        throw new IllegalStateException("Cannot process removed files multiple times");
    }
    doRemoved(removedAction);
    removedProcessed = true;
}
 
Example #11
Source File: StatefulIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void outOfDate(final Action<? super InputFileDetails> outOfDateAction) {
    if (outOfDateProcessed) {
        throw new IllegalStateException("Cannot process outOfDate files multiple times");
    }
    doOutOfDate(outOfDateAction);
    outOfDateProcessed = true;
}
 
Example #12
Source File: JavaChangeProcessor.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void processChange(InputFileDetails input, RecompilationSpec spec) {
    String className = sourceToNameConverter.getClassName(input.getFile());
    spec.getClassNames().add(className);
    DependentsSet actualDependents = previousCompilation.getDependents(className);
    if (actualDependents.isDependencyToAll()) {
        spec.setFullRebuildCause(actualDependents.getDescription(), input.getFile());
        return;
    }
    spec.getClassNames().addAll(actualDependents.getDependentClasses());
}
 
Example #13
Source File: RecompilationSpecProvider.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void execute(InputFileDetails input) {
    if (spec.getFullRebuildCause() != null) {
        return;
    }
    if (input.getFile().getName().endsWith(".java")) {
        javaChangeProcessor.processChange(input, spec);
    }
    if (input.getFile().getName().endsWith(".jar")) {
        jarChangeProcessor.processChange(input, spec);
    }
}
 
Example #14
Source File: JarChangeProcessor.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void processChange(InputFileDetails input, RecompilationSpec spec) {
    JarArchive jarArchive = new JarArchive(input.getFile(), fileOperations.zipTree(input.getFile()));
    JarChangeDependentsFinder dependentsFinder = new JarChangeDependentsFinder(jarClasspathSnapshot, previousCompilation);
    DependentsSet actualDependents = dependentsFinder.getActualDependents(input, jarArchive);
    if (actualDependents.isDependencyToAll()) {
        spec.setFullRebuildCause(actualDependents.getDescription(), input.getFile());
        return;
    }
    spec.getClassNames().addAll(actualDependents.getDependentClasses());
}
 
Example #15
Source File: ChangesOnlyIncrementalTaskInputs.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
@Override
protected void doOutOfDate(final Action<? super InputFileDetails> outOfDateAction) {
    for (TaskStateChange change : inputFilesState) {
        InputFileDetails fileChange = (InputFileDetails) change;
        if (fileChange.isRemoved()) {
            removedFiles.add(fileChange);
        } else {
            outOfDateAction.execute(fileChange);
        }
    }
}
 
Example #16
Source File: RecompilationSpecProvider.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void execute(InputFileDetails input) {
    if (spec.getFullRebuildCause() != null) {
        return;
    }
    if (input.getFile().getName().endsWith(".java")) {
        javaChangeProcessor.processChange(input, spec);
    }
    if (input.getFile().getName().endsWith(".jar")) {
        jarChangeProcessor.processChange(input, spec);
    }
}
 
Example #17
Source File: StatefulIncrementalTaskInputs.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void removed(Action<? super InputFileDetails> removedAction) {
    if (!outOfDateProcessed) {
        throw new IllegalStateException("Must first process outOfDate files before processing removed files");
    }
    if (removedProcessed) {
        throw new IllegalStateException("Cannot process removed files multiple times");
    }
    doRemoved(removedAction);
    removedProcessed = true;
}
 
Example #18
Source File: JavaChangeProcessor.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void processChange(InputFileDetails input, RecompilationSpec spec) {
    String className = sourceToNameConverter.getClassName(input.getFile());
    spec.getClassNames().add(className);
    DependentsSet actualDependents = previousCompilation.getDependents(className);
    if (actualDependents.isDependencyToAll()) {
        spec.setFullRebuildCause(actualDependents.getDescription(), input.getFile());
        return;
    }
    spec.getClassNames().addAll(actualDependents.getDependentClasses());
}
 
Example #19
Source File: StatefulIncrementalTaskInputs.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void outOfDate(final Action<? super InputFileDetails> outOfDateAction) {
    if (outOfDateProcessed) {
        throw new IllegalStateException("Cannot process outOfDate files multiple times");
    }
    doOutOfDate(outOfDateAction);
    outOfDateProcessed = true;
}
 
Example #20
Source File: StatefulIncrementalTaskInputs.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void outOfDate(final Action<? super InputFileDetails> outOfDateAction) {
    if (outOfDateProcessed) {
        throw new IllegalStateException("Cannot process outOfDate files multiple times");
    }
    doOutOfDate(outOfDateAction);
    outOfDateProcessed = true;
}
 
Example #21
Source File: ChangesOnlyIncrementalTaskInputs.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
@Override
protected void doOutOfDate(final Action<? super InputFileDetails> outOfDateAction) {
    for (TaskStateChange change : inputFilesState) {
        InputFileDetails fileChange = (InputFileDetails) change;
        if (fileChange.isRemoved()) {
            removedFiles.add(fileChange);
        } else {
            outOfDateAction.execute(fileChange);
        }
    }
}
 
Example #22
Source File: StatefulIncrementalTaskInputs.java    From pushfish-android with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public void removed(Action<? super InputFileDetails> removedAction) {
    if (!outOfDateProcessed) {
        throw new IllegalStateException("Must first process outOfDate files before processing removed files");
    }
    if (removedProcessed) {
        throw new IllegalStateException("Cannot process removed files multiple times");
    }
    doRemoved(removedAction);
    removedProcessed = true;
}
 
Example #23
Source File: RebuildIncrementalTaskInputs.java    From pushfish-android with BSD 2-Clause "Simplified" License 4 votes vote down vote up
public void doOutOfDate(Action<? super InputFileDetails> outOfDateAction) {
    for (File file : task.getInputs().getFiles()) {
        outOfDateAction.execute(new RebuildInputFile(file));
    }
}
 
Example #24
Source File: JarChangeDependentsFinder.java    From pushfish-android with BSD 2-Clause "Simplified" License 4 votes vote down vote up
public DependentsSet getActualDependents(InputFileDetails jarChangeDetails, JarArchive jarArchive) {
    if (jarChangeDetails.isAdded()) {
        if (jarClasspathSnapshot.isAnyClassDuplicated(jarArchive)) {
            //at least one of the classes from the new jar is already present in jar classpath
            //to avoid calculation which class gets on the classpath first, rebuild all
            return new DependencyToAll("at least one of the classes of '" + jarArchive.file.getName() + "' is already present in classpath");
        } else {
            //none of the new classes in the jar are duplicated on classpath, don't rebuild
            return new DefaultDependentsSet();
        }
    }
    JarSnapshot previous = previousCompilation.getJarSnapshot(jarChangeDetails.getFile());

    if (previous == null) {
        //we don't know what classes were dependents of the jar in the previous build
        //for example, a class (in jar) with a constant might have changed into a class without a constant - we need to rebuild everything
        return new DependencyToAll("missing jar snapshot of '" + jarArchive.file.getName()  + "' from previous build");
    }

    if (jarChangeDetails.isRemoved()) {
        DependentsSet allClasses = previous.getAllClasses();
        if (allClasses.isDependencyToAll()) {
            return new DependencyToAll("at least one of the classes of removed jar '" + jarArchive.file.getName() + "' requires it");
        }
        //recompile all dependents of all the classes from jar
        return previousCompilation.getDependents(allClasses.getDependentClasses());
    }

    if (jarChangeDetails.isModified()) {
        JarSnapshot currentSnapshot = jarClasspathSnapshot.getSnapshot(jarArchive);
        AffectedClasses affected = currentSnapshot.getAffectedClassesSince(previous);
        if (affected.getAltered().isDependencyToAll()) {
            //at least one of the classes changed in the jar is a 'dependency-to-all'
            return affected.getAltered();
        }

        if (jarClasspathSnapshot.isAnyClassDuplicated(affected.getAdded())) {
            //A new duplicate class on classpath. As we don't fancy-handle classpath order right now, we don't know which class is on classpath first.
            //For safe measure rebuild everything
            return new DependencyToAll("at least one of the classes of modified jar '" + jarArchive.file.getName() + "' is already present in the classpath");
        }

        //recompile all dependents of the classes changed in the jar
        return previousCompilation.getDependents(affected.getAltered().getDependentClasses());
    }

    throw new IllegalArgumentException("Unknown input file details provided: " + jarChangeDetails);
}
 
Example #25
Source File: ChangesOnlyIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 4 votes vote down vote up
@Override
protected void doRemoved(Action<? super InputFileDetails> removedAction) {
    for (InputFileDetails removedFile : removedFiles) {
        removedAction.execute(removedFile);
    }
}
 
Example #26
Source File: RebuildIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 4 votes vote down vote up
public void doRemoved(Action<? super InputFileDetails> removedAction) {
}
 
Example #27
Source File: RebuildIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 4 votes vote down vote up
public void doOutOfDate(Action<? super InputFileDetails> outOfDateAction) {
    for (File file : task.getInputs().getFiles()) {
        outOfDateAction.execute(new RebuildInputFile(file));
    }
}
 
Example #28
Source File: ChangesOnlyIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 4 votes vote down vote up
@Override
protected void doRemoved(Action<? super InputFileDetails> removedAction) {
    for (InputFileDetails removedFile : removedFiles) {
        removedAction.execute(removedFile);
    }
}
 
Example #29
Source File: RebuildIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 4 votes vote down vote up
public void doRemoved(Action<? super InputFileDetails> removedAction) {
}
 
Example #30
Source File: RebuildIncrementalTaskInputs.java    From Pushjet-Android with BSD 2-Clause "Simplified" License 4 votes vote down vote up
public void doOutOfDate(Action<? super InputFileDetails> outOfDateAction) {
    for (File file : task.getInputs().getFiles()) {
        outOfDateAction.execute(new RebuildInputFile(file));
    }
}