Introduce contracted compiled patch tries for faster lookup, make compiled patch commands the primary runtime path, refresh stemmer benchmarks and documentation, and restructure the documentation for 3.0.0 onboarding. BREAKING CHANGE: Radixor 3.0.0 promotes compiled patch-command APIs and new compiled trie artifacts as the primary runtime integration model.
143 lines
5.4 KiB
Groovy
143 lines
5.4 KiB
Groovy
import org.gradle.plugins.ide.eclipse.model.SourceFolder
|
|
|
|
|
|
def snowballVersion = '3.0.1'
|
|
def snowballArchiveName = "libstemmer_java-${snowballVersion}.tar.gz"
|
|
def snowballDistributionDirectoryName = "libstemmer_java-${snowballVersion}"
|
|
def snowballRootRelativePath = 'third-party/snowball'
|
|
def snowballSourceRelativePath = "${snowballRootRelativePath}/source"
|
|
def snowballJavaSourceRelativePath = "${snowballSourceRelativePath}/${snowballDistributionDirectoryName}/java"
|
|
def snowballGeneratedSourceRelativePath = 'generated/sources/snowball'
|
|
def snowballDownloadUrl = "https://snowballstem.org/dist/${snowballArchiveName}"
|
|
def snowballDownloadFile = layout.buildDirectory.file("${snowballRootRelativePath}/${snowballArchiveName}")
|
|
def snowballExtractDirectory = layout.buildDirectory.dir(snowballSourceRelativePath)
|
|
def snowballJavaSourceDirectory = layout.buildDirectory.dir(snowballJavaSourceRelativePath)
|
|
def snowballGeneratedSourceDirectory = layout.buildDirectory.dir(snowballGeneratedSourceRelativePath)
|
|
def snowballJavaSourceClasspathPath = provider {
|
|
project.relativePath(snowballJavaSourceDirectory.get().asFile)
|
|
}
|
|
def snowballGeneratedSourceClasspathPath = provider {
|
|
project.relativePath(snowballGeneratedSourceDirectory.get().asFile)
|
|
}
|
|
def transformSnowballSourceText = { final String sourceText ->
|
|
String transformedText = sourceText
|
|
|
|
transformedText = transformedText.replaceAll(/(?m)^\s*package\s+org\.tartarus\.snowball\.ext\s*;/,
|
|
'package org.egothor.stemmer.benchmark.snowball.ext;')
|
|
transformedText = transformedText.replaceAll(/(?m)^\s*package\s+org\.tartarus\.snowball\s*;/,
|
|
'package org.egothor.stemmer.benchmark.snowball;')
|
|
transformedText = transformedText.replace('org.tartarus.snowball.', 'org.egothor.stemmer.benchmark.snowball.')
|
|
|
|
return transformedText
|
|
}
|
|
def copySnowballSourcesWithPackageIsolation = { final File sourceDirectory, final File targetDirectory ->
|
|
final FileTree sourceFiles = fileTree(sourceDirectory).matching { include '**/*.java' }
|
|
if (targetDirectory.exists()) {
|
|
targetDirectory.deleteDir()
|
|
}
|
|
|
|
for (File sourceFile : sourceFiles.files) {
|
|
final String relativePath = sourceDirectory.toPath().relativize(sourceFile.toPath()).toString()
|
|
final File outputFile = new File(targetDirectory, relativePath)
|
|
outputFile.parentFile.mkdirs()
|
|
outputFile.text = transformSnowballSourceText(sourceFile.getText('UTF-8'))
|
|
}
|
|
}
|
|
|
|
def snowballEclipseClasspathAttributes = [
|
|
gradle_scope : 'jmh',
|
|
gradle_used_by_scope: 'jmh',
|
|
test : 'true'
|
|
]
|
|
def isAbsoluteClasspathPath = { String path ->
|
|
path.startsWith('/') || path ==~ /^[A-Za-z]:[\\\/].*/
|
|
}
|
|
|
|
tasks.register('downloadSnowballJava') {
|
|
group = 'build setup'
|
|
description = 'Downloads the official Snowball Java source distribution for benchmark-only use.'
|
|
|
|
outputs.file(snowballDownloadFile)
|
|
|
|
doLast {
|
|
File targetFile = snowballDownloadFile.get().asFile
|
|
targetFile.parentFile.mkdirs()
|
|
|
|
if (!targetFile.exists()) {
|
|
new URL(snowballDownloadUrl).withInputStream { inputStream ->
|
|
targetFile.withOutputStream { outputStream ->
|
|
outputStream << inputStream
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.register('extractSnowballJava', Copy) {
|
|
group = 'build setup'
|
|
description = 'Extracts the official Snowball Java source distribution.'
|
|
|
|
dependsOn(tasks.named('downloadSnowballJava'))
|
|
|
|
from(tarTree(resources.gzip(snowballDownloadFile)))
|
|
into(snowballExtractDirectory)
|
|
}
|
|
|
|
tasks.register('generateIsolatedSnowballSources') {
|
|
group = 'build setup'
|
|
description = 'Copies Snowball source to benchmark-only package-isolated package paths.'
|
|
|
|
dependsOn(tasks.named('extractSnowballJava'))
|
|
|
|
inputs.dir(snowballJavaSourceDirectory)
|
|
outputs.dir(snowballGeneratedSourceDirectory)
|
|
|
|
doLast {
|
|
copySnowballSourcesWithPackageIsolation(
|
|
snowballJavaSourceDirectory.get().asFile,
|
|
snowballGeneratedSourceDirectory.get().asFile
|
|
)
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
jmh {
|
|
java {
|
|
srcDir(snowballGeneratedSourceDirectory)
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.named('compileJmhJava') {
|
|
dependsOn(tasks.named('generateIsolatedSnowballSources'))
|
|
}
|
|
|
|
eclipse {
|
|
classpath {
|
|
file {
|
|
whenMerged { classpath ->
|
|
String generatedSnowballPath = snowballJavaSourceClasspathPath.get()
|
|
String generatedIsolatedSnowballPath = snowballGeneratedSourceClasspathPath.get()
|
|
String modelSnowballPath = snowballJavaSourceRelativePath
|
|
|
|
classpath.entries.removeAll { entry ->
|
|
entry.hasProperty('path') && (
|
|
entry.path == generatedSnowballPath ||
|
|
entry.path == generatedIsolatedSnowballPath ||
|
|
entry.path == modelSnowballPath ||
|
|
isAbsoluteClasspathPath(entry.path)
|
|
)
|
|
}
|
|
|
|
SourceFolder snowballEntry = new SourceFolder(generatedIsolatedSnowballPath, null)
|
|
snowballEntry.output = 'bin/jmh'
|
|
snowballEclipseClasspathAttributes.each { String name, String value ->
|
|
snowballEntry.entryAttributes[name] = value
|
|
}
|
|
|
|
classpath.entries.add(snowballEntry)
|
|
}
|
|
}
|
|
}
|
|
}
|