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.
No signature of method: org.gradle.plugins.ide.api.XmlFileContentMerger.addCodeStyle() is applicable for argument types: (org.gradle.internal.xml.XmlTransformer$XmlProviderImpl)
. I tried figuring out the problem, but I suspect my gradle foo is too weak. – Twitter