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

fix: keep parameter info to query or form. #307

Merged
merged 1 commit into from
Jul 26, 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 @@ -30,6 +30,7 @@ import com.itangcent.intellij.psi.JsonOption
import com.itangcent.intellij.psi.PsiClassUtils
import com.itangcent.intellij.util.*
import java.util.*
import kotlin.collections.HashMap
import kotlin.reflect.KClass

abstract class AbstractRequestClassExporter : ClassExporter, Worker {
Expand Down Expand Up @@ -495,9 +496,9 @@ abstract class AbstractRequestClassExporter : ClassExporter, Worker {

processMethodParameter(
request,
param,
ExplicitParameterInfo(param),
typeObject,
KVUtils.getUltimateComment(paramDocComment, param.psi().name).append(readParamDoc(param))
KVUtils.getUltimateComment(paramDocComment, param.name()).append(readParamDoc(param))
)
}
}
Expand All @@ -514,7 +515,7 @@ abstract class AbstractRequestClassExporter : ClassExporter, Worker {

}

abstract fun processMethodParameter(request: Request, param: ExplicitParameter, typeObject: Any?, paramDesc: String?)
abstract fun processMethodParameter(request: Request, parameter: ExplicitParameterInfo, typeObject: Any?, paramDesc: String?)

protected fun setRequestBody(request: Request, typeObject: Any?, paramDesc: String?) {
requestHelper!!.setMethodIfMissed(request, HttpMethod.POST)
Expand All @@ -528,13 +529,13 @@ abstract class AbstractRequestClassExporter : ClassExporter, Worker {
}

@Suppress("UNCHECKED_CAST")
protected fun addParamAsQuery(parameter: ExplicitParameter, request: Request, typeObject: Any?, paramDesc: String? = null, required: Boolean? = null) {
protected fun addParamAsQuery(parameter: ExplicitParameterInfo, request: Request, typeObject: Any?, paramDesc: String? = null) {

try {
if (typeObject == Magics.FILE_STR) {
requestHelper!!.addFormFileParam(
request, parameter.name(),
required ?: ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter)
parameter.required ?: ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter)
?: false, paramDesc
)
} else if (typeObject != null && typeObject is Map<*, *>) {
Expand Down Expand Up @@ -585,17 +586,17 @@ abstract class AbstractRequestClassExporter : ClassExporter, Worker {
} else {
requestHelper!!.addParam(
request, parameter.name(), tinyQueryParam(typeObject?.toString()),
required ?: ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter)
parameter.required ?: ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter)
?: false, paramDesc
)
}
} catch (e: Exception) {
logger!!.traceError("error to parse[" + parameter.getType()?.canonicalText() + "] as Querys", e)
logger!!.traceError("error to parse [${parameter.getType()?.canonicalText()}] as Querys", e)
}
}

@Suppress("UNCHECKED_CAST")
protected fun addParamAsForm(parameter: ExplicitParameter, request: Request, typeObject: Any?, paramDesc: String? = null, required: Boolean? = null) {
protected fun addParamAsForm(parameter: ExplicitParameterInfo, request: Request, typeObject: Any?, paramDesc: String? = null) {

try {
if (typeObject == Magics.FILE_STR) {
Expand Down Expand Up @@ -649,7 +650,7 @@ abstract class AbstractRequestClassExporter : ClassExporter, Worker {
} else {
requestHelper!!.addFormParam(
request, parameter.name(), tinyQueryParam(typeObject?.toString()),
required ?: ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter)
parameter.required ?: ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter)
?: false, paramDesc
)
}
Expand Down Expand Up @@ -703,4 +704,52 @@ abstract class AbstractRequestClassExporter : ClassExporter, Worker {
protected fun formExpanded(): Boolean {
return settingBinder!!.read().formExpanded
}
}

/**
* ExplicitParameter with extra info.
*
* use extras instead of declare variables:
* var paramName: String? = null
* var required: Boolean? = null
* var defaultVal: Any? = null
*/
class ExplicitParameterInfo(val parameter: ExplicitParameter) : ExplicitParameter by parameter {

private var extras: HashMap<Int, Any?>? = null

private fun extras(): HashMap<Int, Any?> {
if (extras == null) {
extras = HashMap()
}
return extras!!
}

var paramName: String?
get() {
return extras?.get(1) as? String
}
set(value) {
extras()[1] = value
}

var required: Boolean?
get() {
return extras?.get(2) as? Boolean
}
set(value) {
extras()[2] = value
}

var defaultVal: String?
get() {
return extras?.get(3) as? String
}
set(value) {
extras()[3] = value
}

override fun name(): String {
return paramName ?: parameter.name()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ 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
import com.itangcent.intellij.util.hasFile

open class SpringRequestClassExporter : AbstractRequestClassExporter() {
Expand Down Expand Up @@ -54,47 +53,47 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
}
}

override fun processMethodParameter(request: Request, param: ExplicitParameter, typeObject: Any?, paramDesc: String?) {
override fun processMethodParameter(request: Request, parameter: ExplicitParameterInfo, typeObject: Any?, paramDesc: String?) {

//RequestBody(json)
if (isRequestBody(param.psi())) {
if (isRequestBody(parameter.psi())) {
setRequestBody(request, typeObject, paramDesc)
return
}

//ModelAttr(form)
if (isModelAttr(param.psi())) {
if (isModelAttr(parameter.psi())) {
if (request.method == HttpMethod.NO_METHOD) {
requestHelper!!.setMethod(request,
ruleComputer!!.computer(ClassExportRuleKeys.METHOD_DEFAULT_HTTP_METHOD, param.containMethod())
ruleComputer!!.computer(ClassExportRuleKeys.METHOD_DEFAULT_HTTP_METHOD, parameter.containMethod())
?: HttpMethod.POST)
}
if (request.method == HttpMethod.GET) {
addParamAsQuery(param, request, typeObject)
addParamAsQuery(parameter, request, typeObject)
} else {
addParamAsForm(param, request, typeObject, paramDesc)
addParamAsForm(parameter, request, typeObject, paramDesc)
}
return
}

var ultimateComment = (paramDesc ?: "")
param.getType()?.let { duckType ->
commentResolver!!.resolveCommentForType(duckType, param.psi())?.let {
parameter.getType()?.let { duckType ->
commentResolver!!.resolveCommentForType(duckType, parameter.psi())?.let {
ultimateComment = "$ultimateComment $it"
}
}

//head
val requestHeaderAnn = findRequestHeader(param.psi())
val requestHeaderAnn = findRequestHeader(parameter.psi())
if (requestHeaderAnn != null) {

var headName = requestHeaderAnn.any("value", "name")
if (headName.anyIsNullOrEmpty()) {
headName = param.name()
headName = parameter.name()
}

var required = findRequired(requestHeaderAnn)
if (!required && ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, param) == true) {
if (!required && ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter) == true) {
required = true
}

Expand All @@ -110,31 +109,31 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
}

//path
val pathVariableAnn = findPathVariable(param.psi())
val pathVariableAnn = findPathVariable(parameter.psi())
if (pathVariableAnn != null) {

var pathName = pathVariableAnn["value"]?.toString()

if (pathName == null) {
pathName = param.name()
pathName = parameter.name()
}

requestHelper!!.addPathParam(request, pathName, ultimateComment)
return
}

//cookie
val cookieValueAnn = findCookieValue(param.psi())
val cookieValueAnn = findCookieValue(parameter.psi())
if (cookieValueAnn != null) {

var cookieName = cookieValueAnn["value"]?.toString()

if (cookieName == null) {
cookieName = param.name()
cookieName = parameter.name()
}

var required = findRequired(cookieValueAnn)
if (!required && ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, param) == true) {
if (!required && ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter) == true) {
required = true
}

Expand All @@ -156,45 +155,36 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
//form/body/query
var paramType: String? = null

var paramName: String? = null
var required: Boolean? = null
var defaultVal: Any? = null

val requestParamAnn = findRequestParam(param.psi())
val requestParamAnn = findRequestParam(parameter.psi())

if (requestParamAnn != null) {
paramName = findParamName(requestParamAnn)
required = findRequired(requestParamAnn)

defaultVal = findDefaultValue(requestParamAnn)
parameter.paramName = findParamName(requestParamAnn)
parameter.required = findRequired(requestParamAnn)
parameter.defaultVal = findDefaultValue(requestParamAnn)

if (request.method == "GET") {
paramType = "query"
}
}

val readParamDefaultValue = readParamDefaultValue(param)
val readParamDefaultValue = readParamDefaultValue(parameter)

if (readParamDefaultValue.notNullOrBlank()) {
defaultVal = readParamDefaultValue
}

if (required == null && ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, param) == true) {
required = true
parameter.defaultVal = readParamDefaultValue
}

if (paramName.isNullOrBlank()) {
paramName = param.name()
if (parameter.required == null) {
parameter.required = ruleComputer!!.computer(ClassExportRuleKeys.PARAM_REQUIRED, parameter)
}

if (request.method == HttpMethod.GET) {
addParamAsQuery(param, request, typeObject, ultimateComment, required)
addParamAsQuery(parameter, request, typeObject, ultimateComment)
return
}

if (paramType.isNullOrBlank()) {
paramType = ruleComputer!!.computer(ClassExportRuleKeys.PARAM_HTTP_TYPE,
param)
parameter)
}

if (paramType.notNullOrBlank()) {
Expand All @@ -204,11 +194,11 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
return
}
"form" -> {
addParamAsForm(param, request, defaultVal ?: typeObject, ultimateComment, required)
addParamAsForm(parameter, request, parameter.defaultVal ?: typeObject, ultimateComment)
return
}
"query" -> {
addParamAsQuery(param, request, defaultVal ?: typeObject, ultimateComment, required)
addParamAsQuery(parameter, request, parameter.defaultVal ?: typeObject, ultimateComment)
return
}
else -> {
Expand All @@ -220,26 +210,26 @@ open class SpringRequestClassExporter : AbstractRequestClassExporter() {
}

if (typeObject.hasFile()) {
addParamAsForm(param, request, typeObject, ultimateComment)
addParamAsForm(parameter, request, typeObject, ultimateComment)
return
}

if (defaultVal != null) {
if (parameter.defaultVal != null) {
requestHelper!!.addParam(request,
paramName
, defaultVal.toString()
, required ?: false
parameter.name()
, parameter.defaultVal.toString()
, parameter.required ?: false
, ultimateComment)
return
}

if (request.canHasForm()) {
addParamAsForm(param, request, typeObject, ultimateComment)
addParamAsForm(parameter, request, typeObject, ultimateComment)
return
}

//else
addParamAsQuery(param, request, typeObject, ultimateComment)
addParamAsQuery(parameter, request, typeObject, ultimateComment)
}

override fun processMethod(method: ExplicitMethod, kv: KV<String, Any?>, request: Request) {
Expand Down