Skip to content

Commit 587d560

Browse files
authored
Add fully qualified method name API #198 (#199)
1 parent ab7e772 commit 587d560

File tree

5 files changed

+40
-44
lines changed

5 files changed

+40
-44
lines changed

jacodb-api/src/main/kotlin/org/jacodb/api/ext/JcMethods.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ val JcMethod.jcdbSignature: String
5151
val JcMethod.humanReadableSignature: String
5252
get() {
5353
val params = parameters.joinToString(",") { it.type.typeName }
54-
return "${returnType.typeName} $name($params)"
54+
return "${enclosingClass.name}#$name($params):${returnType.typeName}"
5555
}
5656

5757
@get:JvmName("hasBody")

jacodb-api/src/main/kotlin/org/jacodb/api/ext/JcTypes.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,3 +187,10 @@ fun JcClassType.findMethodOrNull(predicate: (JcTypedMethod) -> kotlin.Boolean):
187187
return methods.firstOrNull(predicate)
188188
}
189189

190+
val JcTypedMethod.humanReadableSignature: String get() {
191+
val params = parameters.joinToString(",") { it.type.typeName }
192+
val generics = typeParameters.takeIf { it.isNotEmpty() }?.let{
193+
it.joinToString(prefix = "<", separator = ",", postfix = ">") { it.symbol }
194+
} ?: ""
195+
return "${enclosingType.typeName}#$generics$name($params):${returnType.typeName}"
196+
}

jacodb-core/src/main/kotlin/org/jacodb/impl/storage/PersistenceService.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ data class AppVersion(val major: Int, val minor: Int) : Comparable<AppVersion> {
7272

7373
class PersistenceService(private val persistence: AbstractJcDatabasePersistenceImpl) {
7474

75-
companion object : KLogging()
75+
companion object : KLogging() {
76+
77+
private val defaultVersion = AppVersion(1, 3)
78+
79+
}
7680

7781
private val refactorings = JcRefactoringChain(
7882
listOf(
@@ -98,12 +102,18 @@ class PersistenceService(private val persistence: AbstractJcDatabasePersistenceI
98102
persistence.read {
99103
logger.info("Starting app version $currentAppVersion")
100104
version = try {
101-
val appVersion = it.selectFrom(APPLICATIONMETADATA).fetch().first()
102-
logger.info("Restored app version is ${appVersion.version}")
103-
AppVersion.parse(appVersion.version!!)
105+
val appVersion = it.selectFrom(APPLICATIONMETADATA).fetch().firstOrNull()
106+
if (appVersion != null) {
107+
logger.info("Restored app version is ${appVersion.version}")
108+
AppVersion.parse(appVersion.version!!)
109+
} else {
110+
// this is startup on empty database
111+
// there is no records in AppMetadata table
112+
currentAppVersion
113+
}
104114
} catch (e: Exception) {
105-
logger.info("fail to restore app version. Use [1.3] as fallback")
106-
AppVersion(1, 3)
115+
logger.info("fail to restore app version. Use [$defaultVersion] as fallback")
116+
defaultVersion
107117
}
108118
classIdGen.set(CLASSES.ID.maxId ?: 0)
109119
symbolsIdGen.set(SYMBOLS.ID.maxId ?: 0)

jacodb-core/src/test/kotlin/org/jacodb/testing/types/TypesTest.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.jacodb.api.JcPrimitiveType
2222
import org.jacodb.api.JcTypeVariable
2323
import org.jacodb.api.ext.findClass
2424
import org.jacodb.api.ext.findMethodOrNull
25+
import org.jacodb.api.ext.humanReadableSignature
2526
import org.jacodb.api.ext.toType
2627
import org.jacodb.impl.types.JcClassTypeImpl
2728
import org.jacodb.impl.types.signature.JvmClassRefType
@@ -137,6 +138,15 @@ class TypesTest : BaseTypesTest() {
137138
assertNotEquals(objectList.iterator, stringList1.iterator)
138139
}
139140

141+
@Test
142+
fun `humanReadableSignature should work`() {
143+
val type = listType<String>()
144+
assertEquals(
145+
"java.util.List<java.lang.String>#isEmpty():boolean",
146+
type.declaredMethods.first { it.name == "isEmpty" }.humanReadableSignature
147+
)
148+
}
149+
140150
private inline fun <reified T> listType(raw: Boolean = false): JcClassType {
141151
val elementName = T::class.java.name
142152
return JcClassTypeImpl(

jacodb-core/src/testFixtures/kotlin/org/jacodb/testing/tests/DatabaseEnvTest.kt

Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,53 +21,22 @@ import org.jacodb.api.JcClassOrInterface
2121
import org.jacodb.api.JcClassProcessingTask
2222
import org.jacodb.api.JcClasspath
2323
import org.jacodb.api.PredefinedPrimitives
24-
import org.jacodb.api.ext.HierarchyExtension
25-
import org.jacodb.api.ext.constructors
26-
import org.jacodb.api.ext.enumValues
27-
import org.jacodb.api.ext.fields
28-
import org.jacodb.api.ext.findClass
29-
import org.jacodb.api.ext.findClassOrNull
30-
import org.jacodb.api.ext.findDeclaredFieldOrNull
31-
import org.jacodb.api.ext.findDeclaredMethodOrNull
32-
import org.jacodb.api.ext.findMethodOrNull
33-
import org.jacodb.api.ext.hasBody
34-
import org.jacodb.api.ext.humanReadableSignature
35-
import org.jacodb.api.ext.isEnum
36-
import org.jacodb.api.ext.isLocal
37-
import org.jacodb.api.ext.isMemberClass
38-
import org.jacodb.api.ext.isNullable
39-
import org.jacodb.api.ext.jcdbSignature
40-
import org.jacodb.api.ext.jvmSignature
41-
import org.jacodb.api.ext.methods
42-
import org.jacodb.api.ext.toType
24+
import org.jacodb.api.ext.*
4325
import org.jacodb.impl.features.classpaths.ClasspathCache
4426
import org.jacodb.impl.features.classpaths.VirtualClassContent
4527
import org.jacodb.impl.features.classpaths.VirtualClasses
4628
import org.jacodb.impl.features.classpaths.virtual.JcVirtualClass
4729
import org.jacodb.impl.features.classpaths.virtual.JcVirtualField
4830
import org.jacodb.impl.features.classpaths.virtual.JcVirtualMethod
49-
import org.jacodb.testing.A
50-
import org.jacodb.testing.B
51-
import org.jacodb.testing.Bar
52-
import org.jacodb.testing.C
53-
import org.jacodb.testing.D
54-
import org.jacodb.testing.Enums
55-
import org.jacodb.testing.Foo
56-
import org.jacodb.testing.SuperDuper
57-
import org.jacodb.testing.allClasspath
31+
import org.jacodb.testing.*
5832
import org.jacodb.testing.hierarchies.Creature
59-
import org.jacodb.testing.skipAssertionsOn
6033
import org.jacodb.testing.structure.FieldsAndMethods
6134
import org.jacodb.testing.structure.HiddenFieldSuperClass.HiddenFieldSuccClass
6235
import org.jacodb.testing.usages.Generics
6336
import org.jacodb.testing.usages.HelloWorldAnonymousClasses
6437
import org.jacodb.testing.usages.WithInner
6538
import org.junit.jupiter.api.AfterEach
66-
import org.junit.jupiter.api.Assertions.assertEquals
67-
import org.junit.jupiter.api.Assertions.assertFalse
68-
import org.junit.jupiter.api.Assertions.assertNotNull
69-
import org.junit.jupiter.api.Assertions.assertNull
70-
import org.junit.jupiter.api.Assertions.assertTrue
39+
import org.junit.jupiter.api.Assertions.*
7140
import org.junit.jupiter.api.Nested
7241
import org.junit.jupiter.api.Test
7342
import org.junit.jupiter.api.condition.JRE
@@ -224,7 +193,7 @@ abstract class DatabaseEnvTest {
224193
assertEquals(DocumentType::class.java.name, returnType.typeName)
225194
assertEquals("getDoctype()org.w3c.dom.DocumentType;", jcdbSignature)
226195
assertEquals("getDoctype()Lorg/w3c/dom/DocumentType;", jvmSignature)
227-
assertEquals("org.w3c.dom.DocumentType getDoctype()", humanReadableSignature)
196+
assertEquals("org.w3c.dom.Document#getDoctype():org.w3c.dom.DocumentType", humanReadableSignature)
228197
assertTrue(isPublic)
229198
}
230199

@@ -233,12 +202,12 @@ abstract class DatabaseEnvTest {
233202
assertEquals(Element::class.java.name, returnType.typeName)
234203
assertEquals("createElement(java.lang.String;)org.w3c.dom.Element;", jcdbSignature)
235204
assertEquals("createElement(Ljava/lang/String;)Lorg/w3c/dom/Element;", jvmSignature)
236-
assertEquals("org.w3c.dom.Element createElement(java.lang.String)", humanReadableSignature)
205+
assertEquals("org.w3c.dom.Document#createElement(java.lang.String):org.w3c.dom.Element", humanReadableSignature)
237206
}
238207

239208
with(methods.first { it.name == "importNode" }) {
240209
assertEquals("importNode(org.w3c.dom.Node;boolean;)org.w3c.dom.Node;", jcdbSignature)
241-
assertEquals("org.w3c.dom.Node importNode(org.w3c.dom.Node,boolean)", humanReadableSignature)
210+
assertEquals("org.w3c.dom.Document#importNode(org.w3c.dom.Node,boolean):org.w3c.dom.Node", humanReadableSignature)
242211
}
243212
}
244213

0 commit comments

Comments
 (0)