Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

resolve RequestMapping#params #259

Merged
merged 1 commit into from
Mar 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ abstract class AbstractRequestClassExporter : ClassExporter, Worker {

processResponse(method, request)

processCompleted(method, request)
processCompleted(method, kv, request)

docHandle(request)
}
Expand All @@ -192,7 +192,7 @@ abstract class AbstractRequestClassExporter : ClassExporter, Worker {
return ruleComputer!!.computer(ClassExportRuleKeys.PARAM_DEFAULT_VALUE, param)
}

protected open fun processCompleted(method: ExplicitMethod, request: Request) {
protected open fun processCompleted(method: ExplicitMethod, kv: KV<String, Any?>, request: Request) {
//parse additionalHeader by config
val additionalHeader = ruleComputer!!.computer(ClassExportRuleKeys.METHOD_ADDITIONAL_HEADER,
method)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,9 @@ import com.intellij.psi.PsiParameter
import com.itangcent.common.constant.HttpMethod
import com.itangcent.common.model.Header
import com.itangcent.common.model.Request
import com.itangcent.common.utils.KV
import com.itangcent.common.utils.any
import com.itangcent.common.utils.isNullOrEmpty
import com.itangcent.common.utils.tinyString
import com.itangcent.intellij.config.rule.computer
import com.itangcent.common.utils.*
import com.itangcent.idea.plugin.utils.SpringClassName
import com.itangcent.intellij.config.rule.computer
import com.itangcent.intellij.jvm.AnnotationHelper
import com.itangcent.intellij.jvm.element.ExplicitMethod
import com.itangcent.intellij.jvm.element.ExplicitParameter
Expand Down Expand Up @@ -188,6 +185,7 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
val basePath: String? = kv.getAs("basePath")
val ctrlHttpMethod: String? = kv.getAs("ctrlHttpMethod")
val requestMapping = findRequestMappingInAnn(method.psi())
kv["requestMapping"] = requestMapping
var httpMethod = findHttpMethod(requestMapping)
if (httpMethod == HttpMethod.NO_METHOD && ctrlHttpMethod != HttpMethod.NO_METHOD) {
httpMethod = ctrlHttpMethod!!
Expand All @@ -198,6 +196,11 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
requestHelper!!.setPath(request, httpPath)
}

override fun processCompleted(method: ExplicitMethod, kv: KV<String, Any?>, request: Request) {
val requestMapping: Pair<Map<String, Any?>, String>? = kv.getAs("requestMapping")
requestMapping?.let { resolveParamInRequestMapping(request, it) }
}

//region process spring annotation-------------------------------------------------------------------

private fun findHttpPath(requestMappingAnn: Pair<Map<String, Any?>, String>?): String? {
Expand All @@ -209,6 +212,57 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
}
}

protected open fun resolveParamInRequestMapping(request: Request, requestMappingAnn: Pair<Map<String, Any?>, String>) {
val params = requestMappingAnn.first["params"] ?: return
if (params is Array<*>) {
params.map { it.tinyString() }
.filter { it.notNullOrEmpty() }
.forEach { resolveParamStr(request, it!!) }
} else {
params.tinyString()
?.takeIf { it.notNullOrEmpty() }
?.let { resolveParamStr(request, it) }
}
}

protected open fun resolveParamStr(request: Request, params: String) {
when {
params.startsWith("!") -> {
requestHelper!!.appendDesc(request, "parameter [${params.removeSuffix("!")}] should not be present")
}
params.contains("!=") -> {
val name = params.substringBefore("!=").trim()
val value = params.substringAfter("!=").trim()
val param = request.querys?.find { it.name == name }
if (param == null) {
requestHelper!!.appendDesc(request, "parameter [$name] " +
"should not equal to [$value]")
} else {
param.desc = param.desc.append("should not equal to [$value]", "\n")
}
}
!params.contains('=') -> {
val param = request.querys?.find { it.name == params }
if (param == null) {
requestHelper!!.addParam(request, params, null, true, null)
} else {
param.required = true
}
}
else -> {
val name = params.substringBefore("=").trim()
val value = params.substringAfter("=").trim()
val param = request.querys?.find { it.name == name }
if (param == null) {
requestHelper!!.addParam(request, name, value, true, null)
} else {
param.required = true
param.value = value
}
}
}
}

private fun findHttpMethod(requestMappingAnn: Pair<Map<String, Any?>, String>?): String {
if (requestMappingAnn != null) {
when {
Expand Down Expand Up @@ -290,6 +344,6 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
}
}

//endregion process spring annotation-------------------------------------------------------------------
//endregion process spring annotation-------------------------------------------------------------------

}