in src/main/kotlin/com/netflix/dgs/plugin/hints/DgsInputArgumentInspector.kt [42:85]
override fun visitMethod(node: UMethod): Boolean {
if (InputArgumentUtils.hasDgsAnnotation(node) ) {
val dgsDataAnnotation = InputArgumentUtils.getDgsAnnotation(node)
val dgsService = dgsDataAnnotation.project.getService(DgsService::class.java)
val typeDefinitionRegistry = GraphQLSchemaProvider.getInstance(dgsDataAnnotation.project).getSchemaInfo(node.javaPsi).registry
val dgsDataFetcher = dgsService.dgsComponentIndex.dataFetchers.find { it.psiAnnotation.toUElement() == dgsDataAnnotation.toUElement() }
if (dgsDataFetcher?.schemaPsi != null) {
val isJavaFile = dgsDataFetcher.psiFile is PsiJavaFile
val arguments = (dgsDataFetcher.schemaPsi as? GraphQLFieldDefinitionImpl)?.argumentsDefinition?.inputValueDefinitionList
if (arguments != null && arguments.size > 0 && !node.uastParameters.any { it.hasAnnotation(InputArgumentUtils.DGS_INPUT_ARGUMENT_ANNOTATION) }) {
val inputArgumentsHint: String = InputArgumentUtils.getHintForInputArgument(arguments[0], typeDefinitionRegistry, isJavaFile)
val inputArgumentsList = mutableListOf<String>()
arguments.forEach {
// do not add a hint for custom scalar types
if (! InputArgumentUtils.isCustomScalarType(it.type!!, typeDefinitionRegistry)) {
val parameter = InputArgumentUtils.getHintForInputArgument(it, typeDefinitionRegistry, isJavaFile)
inputArgumentsList.add(parameter)
}
}
val message = MyBundle.getMessage(
"dgs.inspection.dgsinputargument.hint",
inputArgumentsHint
)
when(val element = node.toUElement()){
is UMethod -> {
val pointer = SmartPointerManager.createPointer(element)
node.identifyingElement?.let {
holder.registerProblem(
it.navigationElement,
message,
ProblemHighlightType.WEAK_WARNING,
DgsInputArgumentQuickFix(pointer, inputArgumentsList, message)
)
}
}
}
}
}
}
return super.visitMethod(node)
}