Skip to content

faster -PspotlessIdeHook with configure-on-demand #1101

@nedtwigg

Description

@nedtwigg

Right now, the IDE hook works like this

spotlessApply -PspotlessIdeHook=${ABSOLUTE_PATH_TO_FILE}

But for large multiproject projects we could make it significantly faster with (note the leading colon)

:spotlessApply -PspotlessIdeHook=${ABSOLUTE_PATH_TO_FILE} --configure-on-demand

but only if we modified this code

@Override
protected void createFormatTasks(String name, FormatExtension formatExtension) {
boolean isIdeHook = project.hasProperty(IdeHook.PROPERTY);

by adding something like:

if (project == rootProject) {
  String ideHookPath = (String) project.property(IdeHook.PROPERTY);
  project.gradle.settingsEvaluated { settings -> 
    // the code below works only for root with children, needs to also handle children with children
    ProjectDescriptor owningProject = null;
    ProjectDescriptor rootDescriptor = settings.rootProject
    for (ProjectDescriptor child : rootDescriptor.children) {
      if (ideHookPath.startsWith(child.projectDir.absolutePath)) {
        owningProject = child;
      } 
    }
    if (owningProject != null) {
      project.evaluationDependsOn(owningProject.path)
    }
  }
}

In this way we can avoid evaluating all the spotlessApply tasks and instead only evaluate the root project and, if necessary, the project which contains the file in question.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions