diff --git a/_ext/eclipse-cdt/README.md b/_ext/eclipse-cdt/README.md index 248969b753..28f26e732b 100644 --- a/_ext/eclipse-cdt/README.md +++ b/_ext/eclipse-cdt/README.md @@ -1,6 +1,6 @@ # spotless-cdt-eclipse -Eclipse CDT is not available in a form which can be easily consumed by maven or gradle. To fix this, we publish Eclipse's formatter and all its dependencies, along with a small amount of glue code, into the `com.diffplug.gradle.spotless:spotless-ext-eclipse-cdt` artifact. +Eclipse CDT is not available in a form which can be easily consumed by maven or gradle. To fix this, we publish Eclipse's formatter and all its dependencies, along with a small amount of glue code, into the `com.diffplug.gradle.spotless:spotless-eclipse-cdt` artifact. To publish a new version, update the `_ext/eclipse-cdt/gradle.properties` appropriately and run this from the root directory: diff --git a/_ext/eclipse-cdt/build.gradle b/_ext/eclipse-cdt/build.gradle index 9a206e473a..e1d691b2c9 100644 --- a/_ext/eclipse-cdt/build.gradle +++ b/_ext/eclipse-cdt/build.gradle @@ -5,42 +5,24 @@ plugins { id 'com.diffplug.gradle.p2.asmaven' version '3.9.0' } -repositories { - mavenCentral() - maven { url 'https://plugins.gradle.org/m2/' } -} - -apply plugin: 'java' -sourceCompatibility = VER_JAVA -targetCompatibility = VER_JAVA +apply from: rootProject.file('../gradle/java-setup.gradle') +apply from: rootProject.file('../gradle/java-publish.gradle') -import java.io.File +ext { + developers = [ + fvgh: [ name: 'Frank Vennemeyer', email: 'frankgh@zoho.com' ], + ] +} // The dependencies to pull from CDT's p2 repositories def eclipseCdtDeps = [ 'org.eclipse.cdt.core':'+', // CodeFormatter and related ] -// The dependencies to pull from Eclipse's p2 repositories -def eclipseDeps = [ - 'org.eclipse.core.jobs':'+', // Required by CDT ParserUtil - 'org.eclipse.core.resources':'+', - 'org.eclipse.core.runtime':'+', // Provides central logging and plugin interface - 'org.eclipse.equinox.common':'+', // Provides runtime status used during exception reporting - 'org.eclipse.jface':'+', // PreferenceStore for creating preferences from properties - 'org.eclipse.text':'+', // Provides Document data structure for formatter - 'org.eclipse.osgi':'+', // CCorePlugin requires OSGI bundle interfaces (but not effectively used) - 'org.eclipse.osgi.services':'+', -] - - // build a maven repo in our build folder containing these artifacts p2AsMaven { group 'p2', { - repoEclipse cdt_VER_ECLIPSE - eclipseDeps.keySet.each { p2.addIU(it) } - eclipseDeps.keySet.each { p2.addIU(it + '.source') } - repo "http://download.eclipse.org/tools/cdt/releases/${cdt_VER_ECLIPSE_CDT}" + repo "http://download.eclipse.org/tools/cdt/releases/${VER_ECLIPSE_CDT}" eclipseCdtDeps.keySet.each { p2.addIU(it) } eclipseCdtDeps.keySet.each { p2.addIU(it + '.source') } } @@ -54,17 +36,17 @@ configurations } dependencies { - // Add the Eclipse and Eclipse-WTP jars to the embedded configuration. - eclipseDeps.each { groupArtifact, version -> - embeddedJars "p2:${groupArtifact}:${version}" - embeddedSource "p2:${groupArtifact}:${version}:sources" + compile "com.diffplug.spotless:spotless-eclipse-base:${VER_SPOTLESS_ECLISPE_BASE}" + // Provides text partitioners for formatters + compile ("org.eclipse.platform:org.eclipse.jface.text:${VER_ECLISPE_JFACE}") { + exclude group: 'org.eclipse.platform', module: 'org.eclipse.swt' } + + // Add the Eclipse and Eclipse-WTP jars to the embedded configuration. eclipseCdtDeps.each { groupArtifact, version -> embeddedJars "p2:${groupArtifact}:${version}" embeddedSource "p2:${groupArtifact}:${version}:sources" } - - testCompile "junit:junit:${cdt_VER_JUNIT}" } jar { @@ -85,133 +67,3 @@ sourceSets { // Use JAR file with all resources for Eclipse-XML integration-tests test.runtimeClasspath = jar.outputs.files + sourceSets.test.output + sourceSets.test.compileClasspath } - -///////// -// IDE // -///////// - -apply plugin: 'eclipse' - -eclipse { - classpath { - downloadSources true - downloadJavadoc true - } -} - -// always create fresh projects -tasks.eclipse.dependsOn(cleanEclipse) - -//////////////// -// Publishing // -//////////////// -apply plugin: 'maven-publish' - -task sourcesJar(type: Jar) { - classifier = 'sources' - from sourceSets.main.allJava -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -def isSnapshot = cdt_version.endsWith('-SNAPSHOT') -// pulls the credentials from either the environment variable or gradle.properties -def cred = { - if (System.env[it] != null) { - return System.env[it] - } else if (project.hasProperty(it)) { - return project[it] - } else { - return 'unknown_' + it - } -} - -model { - publishing { - publications { - mavenJava(MavenPublication) { - - groupId project.cdt_group - artifactId project.cdt_artifactId - version project.cdt_version - from components.java - - pom.withXml { - - // add MavenCentral requirements to the POM - asNode().children().last() + { - resolveStrategy = Closure.DELEGATE_FIRST - name project.cdt_artifactId - description project.cdt_description - url "https://github.com/${project.cdt_org}/${project.name}" - scm { - url "https://github.com/${project.cdt_org}/${project.name}" - connection "scm:git:git://github.com/${project.cdt_org}/${project.name}" - developerConnection "scm:git:ssh:git@github.com/${project.cdt_org}/${project.name}" - } - licenses { - license { - name 'Eclipse Public License - v 1.0' - url 'https://www.eclipse.org/legal/epl-v10.html' - distribution 'repo' - } - } - developers { - developer { - id 'fvgh' - name 'Frank Vennemeyer' - email 'frankgh@zoho.com' - } - } - } - } - } - } - if (isSnapshot) { - // upload snapshots to oss.sonatype.org - repositories { - maven { - url = 'https://oss.sonatype.org/content/repositories/snapshots' - credentials { - username = cred('nexus_user') - password = cred('nexus_pass') - } - } } - } - } -} - -if (!isSnapshot) { - // upload releases to bintray and then mavenCentral - bintray { - user = cred('bintray_user') - key = cred('bintray_pass') - publications = [ - 'mavenJava' - ] - publish = true - pkg { - repo = 'opensource' - name = project.cdt_artifactId - userOrg = project.cdt_org - version { - name = project.cdt_version - mavenCentralSync { - user = cred('nexus_user') - password = cred('nexus_pass') - } - } - } - } - - publish.dependsOn(bintrayUpload) - bintrayUpload.dependsOn([ - 'generatePomFileForMavenJavaPublication', - jar, - sourcesJar, - javadocJar - ]) -} diff --git a/_ext/eclipse-cdt/gradle.properties b/_ext/eclipse-cdt/gradle.properties index ee861fe967..8da38b9c7b 100644 --- a/_ext/eclipse-cdt/gradle.properties +++ b/_ext/eclipse-cdt/gradle.properties @@ -1,16 +1,16 @@ -# Mayor/Minor versions are in line with the one of the Eclipse C/C++ IDE version. -# Patch version is an incremental counter for the Spotless plugin. -cdt_version=9.4.0-SNAPSHOT -cdt_artifactId=spotless-ext-eclipse-cdt -cdt_description=Eclipse's CDT C/C++ formatter bundled for Spotless -VER_JAVA=1.8 +# Mayor version correspond to the Eclipse C/C++ IDE version. +# Minor version changes in case the minimum Eclipse dependencies are raised due to incompatibilities of their internal interfaces. +# Patch version is incremented in case of bug-fixes and evolutions. +ext_version=9.0.0-SNAPSHOT +ext_artifactId=spotless-eclipse-cdt +ext_description=Eclipse's CDT C/C++ formatter bundled for Spotless +ext_org=diffplug +ext_group=com.diffplug.spotless -cdt_org=diffplug -cdt_group=com.diffplug.spotless +# Build requirements +ext_VER_JAVA=1.8 # Compile dependencies -cdt_VER_ECLIPSE=4.7.2 -cdt_VER_ECLIPSE_CDT=9.4 - -# Test -cdt_VER_JUNIT=4.12 +VER_ECLIPSE_CDT=9.4 +VER_SPOTLESS_ECLISPE_BASE=3.+ +VER_ECLISPE_JFACE=3.12.+ diff --git a/_ext/eclipse-cdt/src/main/java/com/diffplug/spotless/extra/eclipse/cdt/EclipseCdtFormatterStepImpl.java b/_ext/eclipse-cdt/src/main/java/com/diffplug/spotless/extra/eclipse/cdt/EclipseCdtFormatterStepImpl.java index fcd138391f..163fa91862 100644 --- a/_ext/eclipse-cdt/src/main/java/com/diffplug/spotless/extra/eclipse/cdt/EclipseCdtFormatterStepImpl.java +++ b/_ext/eclipse-cdt/src/main/java/com/diffplug/spotless/extra/eclipse/cdt/EclipseCdtFormatterStepImpl.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.diffplug.gradle.spotless.cdt.eclipse; +package com.diffplug.spotless.extra.eclipse.cdt; import java.util.Map; import java.util.Map.Entry; @@ -26,6 +26,8 @@ import org.eclipse.jface.text.IDocument; import org.eclipse.text.edits.TextEdit; +import com.diffplug.spotless.extra.eclipse.base.SpotlessEclipseFramework; + /** Formatter step which calls out to the Eclipse formatter. */ public class EclipseCdtFormatterStepImpl { /** Spotless always uses \n internally as line delimiter */ @@ -33,7 +35,14 @@ public class EclipseCdtFormatterStepImpl { private final CodeFormatter codeFormatter; - public EclipseCdtFormatterStepImpl(Properties settings) { + public EclipseCdtFormatterStepImpl(Properties settings) throws Exception { + SpotlessEclipseFramework.setup( + bundles -> {}, //CDT does not use the internal Eclipse feature + config -> { + config.changeSystemLineSeparator(); + }, + plugins -> {} //CDT does not use other Eclipse plugins); + ); Stream> stream = settings.entrySet().stream(); Map settingsMap = stream.collect(Collectors.toMap( e -> String.valueOf(e.getKey()), diff --git a/_ext/eclipse-cdt/src/test/java/com/diffplug/spotless/extra/eclipse/cdt/EclipseCdtFormatterStepImplTest.java b/_ext/eclipse-cdt/src/test/java/com/diffplug/spotless/extra/eclipse/cdt/EclipseCdtFormatterStepImplTest.java index 8c7aa85d60..e43ab4e9e6 100644 --- a/_ext/eclipse-cdt/src/test/java/com/diffplug/spotless/extra/eclipse/cdt/EclipseCdtFormatterStepImplTest.java +++ b/_ext/eclipse-cdt/src/test/java/com/diffplug/spotless/extra/eclipse/cdt/EclipseCdtFormatterStepImplTest.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.diffplug.gradle.spotless.cdt.eclipse; +package com.diffplug.spotless.extra.eclipse.cdt; -import static com.diffplug.gradle.spotless.cdt.eclipse.EclipseCdtFormatterStepImpl.LINE_DELIMITER; +import static com.diffplug.spotless.extra.eclipse.cdt.EclipseCdtFormatterStepImpl.LINE_DELIMITER; import static org.junit.Assert.*; import java.util.Properties; @@ -41,7 +41,7 @@ public class EclipseCdtFormatterStepImplTest { "\treturn 0;\n" + "}\n".replaceAll("\n", LINE_DELIMITER); - private final static String DOXYGEN_HTML = "/** */" + LINE_DELIMITER; + private final static String DOXYGEN_HTML = "/**\n *
void f() {int a =1;} 
\n */\n".replaceAll("\n", LINE_DELIMITER); private final static String ILLEGAL_CHAR = Character.toString((char) 254);