From 08fd90a2bb39b63a1262f613275c01401dab1375 Mon Sep 17 00:00:00 2001 From: Dagger Team Date: Thu, 30 Apr 2026 11:48:56 -0700 Subject: [PATCH] Internal change RELNOTES=n/a PiperOrigin-RevId: 908296143 --- .../dagger/internal/codegen/base/MapType.java | 16 ++++++++++++++++ .../writing/MapFactoryCreationExpression.java | 2 +- .../internal/codegen/xprocessing/XTypeNames.kt | 9 +++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/dagger-compiler/main/java/dagger/internal/codegen/base/MapType.java b/dagger-compiler/main/java/dagger/internal/codegen/base/MapType.java index dbae4d590a8..2983100e64f 100644 --- a/dagger-compiler/main/java/dagger/internal/codegen/base/MapType.java +++ b/dagger-compiler/main/java/dagger/internal/codegen/base/MapType.java @@ -81,6 +81,22 @@ public boolean isRawType() { return XTypes.isRawParameterizedType(type); } + public XTypeName keyTypeName() { + checkState(!isRawType()); + return XTypeNames.getParameterizedTypeArguments(typeName()).get(0); + } + + public XTypeName valueTypeName() { + checkState(!isRawType()); + return XTypeNames.getParameterizedTypeArguments(typeName()).get(1); + } + + public XTypeName unwrappedFrameworkValueTypeName() { + return valuesAreFrameworkType() + ? XTypeNames.getParameterizedTypeArguments(valueTypeName()).get(0) + : valueTypeName(); + } + /** * The map key type. * diff --git a/dagger-compiler/main/java/dagger/internal/codegen/writing/MapFactoryCreationExpression.java b/dagger-compiler/main/java/dagger/internal/codegen/writing/MapFactoryCreationExpression.java index 118bc171790..32998676966 100644 --- a/dagger-compiler/main/java/dagger/internal/codegen/writing/MapFactoryCreationExpression.java +++ b/dagger-compiler/main/java/dagger/internal/codegen/writing/MapFactoryCreationExpression.java @@ -166,7 +166,7 @@ private XTypeName keyTypeName() { if (useLazyClassKey) { return XTypeName.STRING; } - return MapType.from(binding.key()).keyType().asTypeName(); + return MapType.from(binding.key()).keyTypeName(); } private XTypeName valueTypeName() { diff --git a/dagger-compiler/main/java/dagger/internal/codegen/xprocessing/XTypeNames.kt b/dagger-compiler/main/java/dagger/internal/codegen/xprocessing/XTypeNames.kt index 0a8177764d4..e28f3d25490 100644 --- a/dagger-compiler/main/java/dagger/internal/codegen/xprocessing/XTypeNames.kt +++ b/dagger-compiler/main/java/dagger/internal/codegen/xprocessing/XTypeNames.kt @@ -336,6 +336,15 @@ object XTypeNames { * isn't a parameterized type, it returns the argument unchanged. */ // TODO(bcorso): Take in an XTypeName once we can check for XParameterizedTypeName in XPoet. + @JvmStatic + fun getParameterizedTypeArguments(typeName: XTypeName): List { + val javaPoet = typeName.toJavaPoet() + val kotlinPoet = typeName.toKotlinPoet() + val javaArgs = (javaPoet as? JParameterizedTypeName)?.typeArguments ?: emptyList() + val kotlinArgs = (kotlinPoet as? KParameterizedTypeName)?.typeArguments ?: emptyList() + return javaArgs.zip(kotlinArgs).map { (j, k) -> toXPoet(j, k) } + } + @JvmStatic fun rawJavaTypeName(typeName: JTypeName): JTypeName { return if (typeName is JParameterizedTypeName) {