Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Applied common Spotless Eclipse framework to CDT #238

Merged
merged 7 commits into from
Aug 6, 2018
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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