Skip to content

Commit

Permalink
Refactored CDT to use the eclipse-base and updated its artifact name …
Browse files Browse the repository at this point in the history
…as discussed in #226
  • Loading branch information
fvgh committed Apr 28, 2018
1 parent 147be08 commit 42e754b
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 181 deletions.
2 changes: 1 addition & 1 deletion _ext/eclipse-cdt/README.md
Original file line number Diff line number Diff line change
@@ -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:

Expand Down
176 changes: 14 additions & 162 deletions _ext/eclipse-cdt/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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') }
}
Expand All @@ -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 {
Expand All @@ -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
])
}
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
# 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.+
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,14 +26,23 @@
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 */
public static final String LINE_DELIMITER = "\n";

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()),
Expand Down
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.cdt.EclipseCdtFormatterStepImpl.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

0 comments on commit 42e754b

Please sign in to comment.