{"record":{"id":"219c1fee17f51133","repo":"quarkusio/quarkus","slug":"unknown-extensiondependency-type-dependency-get","errorCode":null,"errorMessage":"Unknown ExtensionDependency type: ${dependency.getClass().getName()}","messagePattern":"Unknown ExtensionDependency type: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/dependency/DependencyUtils.java","lineNumber":363,"sourceCode":"        return list;\n    }\n\n    public static Dependency create(DependencyHandler dependencies, String conditionalDependency) {\n        final ArtifactCoords dependencyCoords = ArtifactCoords.fromString(conditionalDependency);\n        return dependencies.create(String.join(\":\", dependencyCoords.getGroupId(), dependencyCoords.getArtifactId(),\n                dependencyCoords.getVersion()));\n    }\n\n    public static Dependency createDeploymentDependency(\n            DependencyHandler dependencyHandler,\n            ExtensionDependency<?> dependency) {\n        if (dependency instanceof ProjectExtensionDependency ped) {\n            return createDeploymentProjectDependency(dependencyHandler, ped);\n        } else if (dependency instanceof ArtifactExtensionDependency aed) {\n            return createArtifactDeploymentDependency(dependencyHandler, aed);\n        }\n\n        throw new IllegalArgumentException(\"Unknown ExtensionDependency type: \" + dependency.getClass().getName());\n    }\n\n    private static Dependency createDeploymentProjectDependency(DependencyHandler handler, ProjectExtensionDependency ped) {\n        if (ped.isIncludedBuild()) {\n            return new DefaultExternalModuleDependency(\n                    ped.getDeploymentModule().getGroup().toString(),\n                    ped.getDeploymentModule().getName(),\n                    ped.getDeploymentModule().getVersion().toString());\n        } else {\n            return handler.create(handler.project(Map.of(\"path\", ped.getDeploymentModule().getPath())));\n        }\n    }\n\n    private static Dependency createArtifactDeploymentDependency(DependencyHandler handler,\n            ArtifactExtensionDependency dependency) {\n        return handler.create(dependency.getDeploymentModule().getGroupId() + \":\"\n                + dependency.getDeploymentModule().getArtifactId() + \":\"\n                + dependency.getDeploymentModule().getVersion());","sourceCodeStart":345,"sourceCodeEnd":381,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/dependency/DependencyUtils.java#L345-L381","documentation":"createDeploymentDependency converts an ExtensionDependency into the actual Gradle Dependency to add to a deployment configuration. It handles exactly two subtypes: ProjectExtensionDependency and ArtifactExtensionDependency. Any other subclass hits the final throw, an IllegalArgumentException naming the concrete class. Since ExtensionDependency is internal tooling API, this indicates a new/unknown subtype introduced by a version mismatch or custom fork, or an unexpected object passed into the API.","triggerScenarios":"Calling DependencyUtils.createDeploymentDependency(handler, dependency) with an ExtensionDependency instance that is neither ProjectExtensionDependency nor ArtifactExtensionDependency — e.g. a custom subclass or one produced by a differently-versioned gradle-model class.","commonSituations":"Mixing Quarkus Gradle plugin module versions (gradle-model vs plugin) so two different ExtensionDependency class hierarchies exist on the classpath; custom IDE tooling constructing its own ExtensionDependency implementation; forks that added a third subtype without updating this switch.","solutions":["Align all Quarkus Gradle plugin artifacts to one version (./gradlew build with a single plugin version) to eliminate duplicate ExtensionDependency classes","Check buildscript/classpath for multiple quarkus-gradle-model versions (./gradlew buildEnvironment) and exclude stale ones","If you authored a custom subtype, extend createDeploymentDependency to handle it or convert it to one of the supported types","Stop the daemon and clear configuration cache to drop stale plugin classes","If it occurs with unmodified releases, report to Quarkus with the class name from the message"],"exampleFix":"// before (custom subtype)\nclass MyExtDependency implements ExtensionDependency<MyCfg> { ... }\ncreateDeploymentDependency(handler, new MyExtDependency(...));\n// after (convert to supported type)\nProjectExtensionDependency ped = toProjectExtensionDependency(myDep);\ncreateDeploymentDependency(handler, ped);","handlingStrategy":"type-guard","validationCode":"if (!(dependency instanceof ProjectExtensionDependency) && !(dependency instanceof ArtifactExtensionDependency)) {\n    throw new IllegalStateException(\"Unsupported ExtensionDependency: \" + dependency.getClass().getName());\n}","typeGuard":"static boolean supported(ExtensionDependency<?> d) {\n    return d instanceof ProjectExtensionDependency || d instanceof ArtifactExtensionDependency;\n}","tryCatchPattern":"try {\n    Dependency dep = DependencyUtils.createDeploymentDependency(handler, extDep);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"Unknown ExtensionDependency type:\")) {\n        // convert/handle the custom subtype before retrying\n    } else throw e;\n}","preventionTips":["Do not create custom subclasses of ExtensionDependency","Ensure only one version of quarkus-gradle-model is on the build classpath (check ./gradlew buildEnvironment)","Convert third-party extension dependency representations into the two supported types first","Stop the daemon and clear configuration cache after plugin version changes"],"tags":["gradle","extension","type-mismatch","illegal-argument"],"backgroundTag":"invalid-enum-value","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}