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 all 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
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: 'frankgh@zoho.com' ],
]

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: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
# 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