blob: 8407596e083b103207ab08899baa8fdb9ebf01da [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
if (gradle.startParameter.taskNames.any { it =~ /(?i)eclipse/ }) {
allprojects {
apply plugin: 'eclipse'
eclipse.classpath.file.whenMerged {
entries.removeAll { entry -> entry.path =~ '/build/' } // affects: cli-commons, cli-picocli, console, groovydoc, macro, servlet, swing, templates, xml
entries.unique(true) { entry -> entry.path } // affects: console, groovydoc, macro, servlet, swing, templates, xml
entries.sort(true) { entry ->
if (entry.class.simpleName != 'SourceFolder') {
"${entry.kind}:${entry.path.split('/')[-1].toLowerCase()}"
} else {
"${entry.kind}:${entry.path}"
}
}
}
project.tasks.eclipse.doLast {
if (!file("${project.projectDir}/.classpath").exists()) return
file("${project.projectDir}/.settings/org.eclipse.jdt.groovy.core.prefs").with { prefs ->
if (!prefs.exists()) {
append('''\
eclipse.preferences.version=1
groovy.compiler.level=40
groovy.script.filters=**/*.gradle,n,**/script*.groovy,y,**/*resources/**/*.groovy,y,**/benchmarks/**/*.groovy,y
org.codehaus.groovy.eclipse.preferences.compiler.project=true
'''.stripIndent()
)
}
}
file("${project.projectDir}/.settings/org.eclipse.core.resources.prefs").with { prefs ->
if (!prefs.exists()) {
append('''\
eclipse.preferences.version=1
encoding/<project>=UTF-8
'''.stripIndent()
)
}
}
file("${project.projectDir}/.settings/org.eclipse.core.runtime.prefs").with { prefs ->
if (!prefs.exists()) {
append('''\
eclipse.preferences.version=1
line.separator=\\n
'''.stripIndent()
)
}
}
file("${project.projectDir}/.settings/org.eclipse.jdt.ui.prefs").with { prefs ->
if (!prefs.exists()) {
append('''\
eclipse.preferences.version=1
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
org.eclipse.jdt.ui.ignorelowercasenames=true
org.eclipse.jdt.ui.importorder=;javax;java;\\#;
org.eclipse.jdt.ui.ondemandthreshold=99
org.eclipse.jdt.ui.staticondemandthreshold=99
sp_cleanup.on_save_use_additional_actions=true
sp_cleanup.organize_imports=true
sp_cleanup.remove_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
sp_cleanup.update_copyright_notice=true
'''.stripIndent()
)
}
}
}
// tasks for cleaning the .settings files created above
tasks.register('cleanEclipseGdt', Delete) {
delete "${project.projectDir}/.settings/org.eclipse.jdt.groovy.core.prefs"
}
cleanEclipse.dependsOn(cleanEclipseGdt)
tasks.register('cleanEclipseJdtUI', Delete) {
delete "${project.projectDir}/.settings/org.eclipse.jdt.ui.prefs"
}
cleanEclipse.dependsOn(cleanEclipseJdtUI)
project.tasks.cleanEclipse.doLast {
file("${project.projectDir}/.settings/org.eclipse.core.resources.prefs").delete()
file("${project.projectDir}/.settings/org.eclipse.core.runtime.prefs").delete()
file("${project.projectDir}/.settings/").with { if (!listFiles()) delete() }
}
}
eclipse.classpath.file.whenMerged {
// it's just 'src/test' not 'src/test/java' and 'src/test/groovy'
entries.removeAll { entry -> entry.path in ['src/test/groovy', 'src/test-resources'] }
entries.findAll { entry -> entry.path =~ '^build/generated/sources/antlr' }.each { entry ->
entry.entryAttributes['ignore_optional_problems'] = 'true'
entry.entryAttributes['optional'] = 'true'
}
}
// exclude folder 'subprojects' from root project
eclipse.project.resourceFilter {
type = 'EXCLUDE_ALL'
appliesTo = 'FOLDERS'
recursive = false
matcher {
id = 'org.eclipse.ui.ide.multiFilter'
arguments = '1.0-projectRelativePath-matches-true-false-subprojects'
}
}
sourceSets.main.java.srcDirs += "${buildDir}/generated/sources/antlr4"
eclipseClasspath.dependsOn(generateGrammarSource)
}