xmlgradlecode-formattingintellij-13idea-gradle-plugin

Pass custom code style xml to gradle idea plugin


Is there any way to tell the gradle idea plugin to use a custom code style xml when generating the project's files?

I can always copy the xml into "~/Library/Preferences/IntelliJIdea13/codestyles" and then change the code style once I import the project but I would like the gradle plugin to do this automatically for me as part of its generation.

Thanks!


Solution

  • Just in case someone else is trying to do this, I managed to solve it using the plugin hooks to modify the project's ipr file before it gets written to disk. Basically, adding the following to your build.gradle:

    idea {
      project {
        ipr {
          withXml { provider -> addCodeStyle(provider) }
        }
      }
    }
    
      def addCodeStyle(provider) {
          def project = provider.asNode()
          project.appendNode('component', [name: 'ProjectCodeStyleSettingsManager'])
    
          def codeStyleNode = findComponent(project, 'ProjectCodeStyleSettingsManager')
          codeStyleNode.appendNode('option', [name: 'USE_PER_PROJECT_SETTINGS', value: 'true'])
          def projectSettingsNode = codeStyleNode.appendNode('option', [name: 'PER_PROJECT_SETTINGS']).appendNode('value')    
    
          def codeStyleUrl = "fileUrl".toURL()
    
          //If you want to read from a file you could do new File(path).text
          def codeStyleXml = new XmlParser().parseText(codeStyleUrl.text)
          codeStyleXml.children().each { option ->
              projectSettingsNode.append(option)
          }
      }
    

    This assumes that your xml with the code style preferences follows the format:

    <?xml version="1.0" encoding="UTF-8"?>
    <code_scheme name="X">
      <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="6" />
      <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="9" />
    

    Which I think is the standard format when you export your preferences from IntelliJ.