Skip to content

Commit

Permalink
Merge pull request #2 from PhiloInc/mark/fix-fully-qualified-name-col…
Browse files Browse the repository at this point in the history
…lisions/2024-07-09

Fix to prevent naming collisions
  • Loading branch information
markrebhan authored Jul 9, 2024
2 parents 2bc4cba + 7f01dcf commit e79818c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ plugins {

allprojects {
group = "com.philo"
version = "0.1.0"
version = "0.1.1"

repositories {
mavenLocal()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.google.devtools.ksp.processing.CodeGenerator
import com.google.devtools.ksp.symbol.ClassKind
import com.google.devtools.ksp.symbol.FunctionKind
import com.google.devtools.ksp.symbol.KSClassDeclaration
import com.google.devtools.ksp.symbol.KSDeclaration
import com.google.devtools.ksp.symbol.KSFunctionDeclaration
import com.google.devtools.ksp.symbol.KSTypeParameter
import com.google.devtools.ksp.symbol.KSVisitorVoid
Expand Down Expand Up @@ -65,7 +66,8 @@ class JsNamedArgsVisitor(
processConstructorFunction(
it,
classDeclaration.typeParameters,
if (isInnerClass) classDeclaration.toClassName().enclosingClassName() else null
if (isInnerClass) classDeclaration.toClassName().enclosingClassName() else null,
classDeclaration.parentDeclaration
)
}

Expand Down Expand Up @@ -95,15 +97,32 @@ class JsNamedArgsVisitor(
private fun processConstructorFunction(
function: KSFunctionDeclaration,
classTypeParameters: List<KSTypeParameter>,
outerParentClassTypeName: TypeName? = null
outerParentClassTypeName: TypeName?,
parentDeclaration: KSDeclaration?,
) {
if (!function.isConstructor()) return

val constructorOf = function.returnType?.toTypeName(classTypeParameters.toTypeParameterResolver()) ?: return
val constructorOfBaseName = constructorOf.toBaseTypeName()

val interfaceName = "${constructorOfBaseName}ConstructorArgs"
val functionWithInterfaceName = "create${constructorOfBaseName}Wrapper"
val parentDeclarationNames = mutableListOf<String>()
fun toParentDeclarationName(declaration: KSDeclaration?) {
if (declaration == null) return

declaration.qualifiedName?.getShortName()?.let {
parentDeclarationNames.add(0, it)
}

toParentDeclarationName(declaration.parentDeclaration)
}

toParentDeclarationName(parentDeclaration)

val interfaceName = parentDeclarationNames.joinToString("") +
"${constructorOfBaseName}ConstructorArgs"
val functionWithInterfaceName = "create" +
parentDeclarationNames.joinToString("") +
"${constructorOfBaseName}Wrapper"

processFunction(
interfaceName,
Expand Down

0 comments on commit e79818c

Please # to comment.