spotless icon indicating copy to clipboard operation
spotless copied to clipboard

faster -PspotlessIdeHook with configure-on-demand

Open nedtwigg opened this issue 3 years ago • 0 comments

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 https://github.com/diffplug/spotless/blob/48723eb15b3e6b0ada0841bd78e4dd271af9507f/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtensionImpl.java#L54-L56

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.

nedtwigg avatar Jan 18 '22 19:01 nedtwigg