Skip to content

Commit

Permalink
Applied common Spotless Eclipse framework to CDT (#238)
Browse files Browse the repository at this point in the history
Applied common Spotless Eclipse framework to CDT
  • Loading branch information
fvgh authored Aug 6, 2018
1 parent f70e1c7 commit e1734c0
Show file tree
Hide file tree
Showing 9 changed files with 75 additions and 232 deletions.
4 changes: 2 additions & 2 deletions _ext/eclipse-cdt/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# spotless-cdt-eclipse
# spotless-eclipse-cdt

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:

Expand Down
216 changes: 16 additions & 200 deletions _ext/eclipse-cdt/build.gradle
Original file line number Diff line number Diff line change
@@ -1,82 +1,28 @@
plugins {
// bintray uploading
id 'com.jfrog.bintray' version '1.3.1'
// p2 dependencies
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

import java.io.File

// 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':'+',
]
ext {
developers = [
fvgh: [ name: 'Frank Vennemeyer', email: '[email protected]' ],
]

p2Repository = "http://download.eclipse.org/tools/cdt/releases/${VER_ECLIPSE_CDT}"

p2Dependencies = [
'org.eclipse.cdt.core':'+', // CodeFormatter and related
]

// 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}"
eclipseCdtDeps.keySet.each { p2.addIU(it) }
eclipseCdtDeps.keySet.each { p2.addIU(it + '.source') }
}
}

configurations
{
embeddedJars // JARs (Eclipse and WTP) the fat-jar is based uppon
embeddedSource // Source for Eclipse JARS (GrEclipse provides no source packages)
compile.extendsFrom(embeddedJars)
}
apply from: rootProject.file('../gradle/p2-fat-jar-setup.gradle')
apply from: rootProject.file('../gradle/java-publish.gradle')


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"
}
eclipseCdtDeps.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'
}

testCompile "junit:junit:${cdt_VER_JUNIT}"
}

jar {
// this embeds the eclipse jars into our "fat jar"
from {
configurations.embeddedJars.collect{ it.isDirectory() ? it : zipTree(it) }
}
// the eclipse jars are signed, and our fat jar breaks the signatures
// so we've got to be sure to filter out the signatures
exclude 'META-INF/*.RSA'
exclude 'META-INF/*.SF'
}

//////////
// Test //
Expand All @@ -85,133 +31,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:[email protected]/${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 '[email protected]'
}
}
}
}
}
}
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
])
}
26 changes: 13 additions & 13 deletions _ext/eclipse-cdt/gradle.properties
Original file line number Diff line number Diff line change
@@ -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
# Versions correspond to the Eclipse-CDT version used for the fat-JAR.
# See https://www.eclipse.org/cdt/ for further information about Eclipse-CDT versions.
# Patch version can be incremented independently for backward compatible patches of this library.
ext_version=9.4.3
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.0,4.0.0[
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -26,24 +26,31 @@
import org.eclipse.jface.text.IDocument;
import org.eclipse.text.edits.TextEdit;

/** Formatter step which calls out to the Eclipse formatter. */
public class EclipseCdtFormatterStepImpl {
/** Spotless always uses \n internally as line delimiter */
public static final String LINE_DELIMITER = "\n";
import com.diffplug.spotless.extra.eclipse.base.SpotlessEclipseFramework;

/** Formatter step which calls out to the Eclipse CDT formatter. */
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<Entry<Object, Object>> stream = settings.entrySet().stream();
Map<String, String> settingsMap = stream.collect(Collectors.toMap(
e -> String.valueOf(e.getKey()),
e -> String.valueOf(e.getValue())));
codeFormatter = org.eclipse.cdt.core.ToolFactory.createDefaultCodeFormatter(settingsMap);
}

/** Formatting C/C++ string */
public String format(String raw) throws Exception {
//The 'kind' can be set to CodeFormatter.K_UNKNOWN, since it is anyway ignored by the internal formatter
TextEdit edit = codeFormatter.format(CodeFormatter.K_UNKNOWN, raw, 0, raw.length(), 0, LINE_DELIMITER);
TextEdit edit = codeFormatter.format(CodeFormatter.K_UNKNOWN, raw, 0, raw.length(), 0, SpotlessEclipseFramework.LINE_DELIMITER);
if (edit == null) {
throw new IllegalArgumentException("Invalid C/C++ syntax for formatting.");
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Copyright 2016 DiffPlug
*
* Licensed 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.
*/
/** Eclipse CDT based Spotless formatter */
@ParametersAreNonnullByDefault
package com.diffplug.spotless.extra.eclipse.cdt;

import javax.annotation.ParametersAreNonnullByDefault;
Original file line number Diff line number Diff line change
Expand Up @@ -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.base.SpotlessEclipseFramework.LINE_DELIMITER;
import static org.junit.Assert.*;

import java.util.Properties;
Expand All @@ -41,7 +41,7 @@ public class EclipseCdtFormatterStepImplTest {
"\treturn 0;\n" +
"}\n".replaceAll("\n", LINE_DELIMITER);

private final static String DOXYGEN_HTML = "/** <ul> <li>Hello</li> </ul> */" + LINE_DELIMITER;
private final static String DOXYGEN_HTML = "/**\n *<pre>void f() {int a =1;} </pre>\n */\n".replaceAll("\n", LINE_DELIMITER);

private final static String ILLEGAL_CHAR = Character.toString((char) 254);

Expand Down
6 changes: 3 additions & 3 deletions _ext/eclipse-groovy/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Versions correspond to the Eclipse-Groovy version used for th FAT JAR
# See https://github.com/groovy/groovy-eclipse/releases for further information about Eclipse-Groovy versions.
# Patch version can be is incremented independently for backward compatible patches of this library.
# Versions correspond to the Groovy-Eclipse version used for the fat-JAR.
# See https://github.com/groovy/groovy-eclipse/releases for further information about Groovy-Eclipse versions.
# Patch version can be incremented independently for backward compatible patches of this library.
ext_version=2.9.2
ext_artifactId=spotless-eclipse-groovy
ext_description=Groovy Eclipse's formatter bundled for Spotless
Expand Down
2 changes: 1 addition & 1 deletion _ext/eclipse-wtp/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ ext {

p2Repository = "http://download.eclipse.org/webtools/repository/${VER_ECLIPSE_WTP}"

p2Dependencies = [
p2Dependencies = [
// XML/HTML Formatter - Dependencies
'org.eclipse.wst.xml.core':'+', // DefaultXMLPartitionFormatter and XMLAssociationProvider
'org.eclipse.wst.sse.core':'+', // Structure models
Expand Down
6 changes: 3 additions & 3 deletions _ext/eclipse-wtp/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Versions correspond to the Eclipse-WTP version used for th FAT JAR
# See https://www.eclipse.org/webtools/ for further information about Eclipse-Groovy versions.
# Patch version can be is incremented independently for backward compatible patches of this library.
# Versions correspond to the Eclipse-WTP version used for the fat-JAR.
# See https://www.eclipse.org/webtools/ for further information about Eclipse-WTP versions.
# Patch version can be incremented independently for backward compatible patches of this library.
ext_version=3.9.5
ext_artifactId=spotless-eclipse-wtp
ext_description=Eclipse's WTP formatters bundled for Spotless
Expand Down

0 comments on commit e1734c0

Please sign in to comment.