All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraftforge.gradle.tasks.dev.SubprojectTask Maven / Gradle / Ivy

package net.minecraftforge.gradle.tasks.dev;

import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Set;

import net.minecraftforge.gradle.delayed.DelayedFile;
import net.minecraftforge.gradle.dev.FmlDevPlugin;

import org.gradle.api.Action;
import org.gradle.api.DefaultTask;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.internal.AbstractTask;
import org.gradle.api.tasks.TaskAction;

public class SubprojectTask extends DefaultTask
{
    private DelayedFile                 buildFile;
    private String                      tasks;
    private LinkedList> configureProject = new LinkedList>();
    private Action                configureTask;

    @TaskAction
    public void doTask() throws IOException
    {
        Project childProj = FmlDevPlugin.getProject(getBuildFile(), getProject());
        
        // configure the project
        for (Action act : configureProject)
        {
            if (act != null)
                act.execute(childProj);
        }

        for (String task : tasks.split(" "))
        {
            Set list = childProj.getTasksByName(task, false);
            for (Task t : list)
            {
                if (configureTask != null)
                    configureTask.execute(t);
                executeTask((AbstractTask) t);
            }
        }

        System.gc();
    }

    private void executeTask(AbstractTask task)
    {
        for (Object dep : task.getTaskDependencies().getDependencies(task))
        {
            executeTask((AbstractTask) dep);
        }

        if (!task.getState().getExecuted())
        {
            getLogger().lifecycle(task.getPath());
            task.execute();
        }
    }

    public File getBuildFile()
    {
        return buildFile.call();
    }

    public void setBuildFile(DelayedFile buildFile)
    {
        this.buildFile = buildFile;
    }

    public String getTasks()
    {
        return tasks;
    }

    public void setTasks(String tasks)
    {
        this.tasks = tasks;
    }

    public Action getConfigureTask()
    {
        return configureTask;
    }

    public void setConfigureTask(Action configureTask)
    {
        this.configureTask = configureTask;
    }
    
    public void configureProject(Action action)
    {
        configureProject.add(action);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy