Remove some unused classes from the DJVM. (#4809)

Simplify DJVM Gradle files.
This commit is contained in:
Chris Rankin 2019-02-25 13:15:32 +00:00 committed by Tommy Lillehagen
parent 254d1b1631
commit 46909feef9
6 changed files with 13 additions and 122 deletions

View File

@ -19,7 +19,7 @@ repositories {
}
configurations {
testCompile.extendsFrom shadow
testImplementation.extendsFrom shadow
jdkRt.resolutionStrategy {
// Always check the repository for a newer SNAPSHOT.
cacheChangingModulesFor 0, 'seconds'
@ -32,16 +32,16 @@ dependencies {
shadow "org.slf4j:slf4j-api:$slf4j_version"
// ASM: byte code manipulation library
compile "org.ow2.asm:asm:$asm_version"
compile "org.ow2.asm:asm-commons:$asm_version"
implementation "org.ow2.asm:asm:$asm_version"
implementation "org.ow2.asm:asm-commons:$asm_version"
// ClassGraph: classpath scanning
shadow "io.github.classgraph:classgraph:$class_graph_version"
// Test utilities
testCompile "junit:junit:$junit_version"
testCompile "org.assertj:assertj-core:$assertj_version"
testCompile "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version"
testImplementation "junit:junit:$junit_version"
testImplementation "org.assertj:assertj-core:$assertj_version"
testImplementation "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version"
jdkRt "net.corda:deterministic-rt:latest.integration"
}

View File

@ -2,27 +2,14 @@ plugins {
id 'com.github.johnrengelman.shadow'
}
repositories {
maven {
url "$artifactory_contextUrl/corda-dev"
}
}
configurations {
deterministicRt
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
compile "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version"
compile "com.jcabi:jcabi-manifests:$jcabi_manifests_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
implementation "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version"
implementation "com.jcabi:jcabi-manifests:$jcabi_manifests_version"
compile "info.picocli:picocli:$picocli_version"
compile project(path: ":djvm", configuration: "shadow")
// Deterministic runtime - used in whitelist generation
deterministicRt project(path: ':jdk8u-deterministic', configuration: 'jdk')
implementation "info.picocli:picocli:$picocli_version"
implementation project(path: ':djvm', configuration: 'shadow')
}
jar.enabled = false
@ -39,10 +26,3 @@ shadowJar {
}
}
assemble.dependsOn shadowJar
task generateWhitelist(type: JavaExec, dependsOn: shadowJar) {
// This is an example of how a whitelist can be generated from a JAR. In most applications though, it is recommended
// that the minimal set whitelist is used.
main = '-jar'
args = [shadowJar.outputs.files.singleFile, 'whitelist', 'generate', '-o', "$buildDir/jdk8-deterministic.dat.gz", configurations.deterministicRt.files[0] ]
}

View File

@ -1,38 +0,0 @@
package net.corda.djvm.analysis
/**
* Trie data structure to make prefix matching more efficient.
*/
class PrefixTree {
private class Node(val children: MutableMap<Char, Node> = mutableMapOf())
private val root = Node()
/**
* Add a new prefix to the set.
*/
fun add(prefix: String) {
var node = root
for (char in prefix) {
val nextNode = node.children.computeIfAbsent(char) { Node() }
node = nextNode
}
}
/**
* Check if any of the registered prefixes matches the provided string.
*/
fun contains(string: String): Boolean {
var node = root
for (char in string) {
val nextNode = node.children[char] ?: return false
if (nextNode.children.isEmpty()) {
return true
}
node = nextNode
}
return false
}
}

View File

@ -38,12 +38,7 @@ class IsolatedTask(
exception = (ex as? LinkageError)?.cause ?: ex
null
}
costs = CostSummary(
runtimeCosts.allocationCost.value,
runtimeCosts.invocationCost.value,
runtimeCosts.jumpCost.value,
runtimeCosts.throwCost.value
)
costs = CostSummary(runtimeCosts)
}
logger.trace("Exiting isolated runtime environment...")
completionLatch.countDown()

View File

@ -1,46 +0,0 @@
package net.corda.djvm.validation
/**
* Representation of the reason for why a reference has been marked as invalid.
*
* @property code The code used to label the error.
* @property classes A set of invalid class references, where applicable.
*/
data class Reason(
val code: Code,
val classes: List<String> = emptyList()
) {
/**
* The derived description of the error.
*/
val description = classes.joinToString(", ").let {
when {
classes.size == 1 -> "${code.singularDescription}; $it"
classes.size > 1 -> "${code.pluralDescription}; $it"
else -> code.singularDescription
}
}
/**
* Error codes used to label invalid references.
*
* @property singularDescription The description to use when [classes] is empty or has one element.
* @property pluralDescription The description to use when [classes] has more than one element.
*/
@Suppress("KDocMissingDocumentation")
enum class Code(
val singularDescription: String,
val pluralDescription: String = singularDescription
) {
INVALID_CLASS(
singularDescription = "entity signature contains an invalid reference",
pluralDescription = "entity signature contains invalid references"
),
NOT_WHITELISTED("entity is not whitelisted"),
ANNOTATED("entity is annotated with @NonDeterministic"),
NON_EXISTENT_CLASS("class does not exist"),
NON_EXISTENT_MEMBER("member does not exist")
}
}