Skip to content

Commit 88b25a6

Browse files
committed
1、修复使用多个Kapt框架时的冲突问题
1 parent 1310b06 commit 88b25a6

File tree

12 files changed

+104
-58
lines changed

12 files changed

+104
-58
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.hearthappy.annotations
2+
3+
@Target(AnnotationTarget.VALUE_PARAMETER)
4+
@Retention(AnnotationRetention.SOURCE)
5+
annotation class Cookie(val value: String)

app/src/main/java/com/hearthappy/viewmodelautomation/ui/LoginActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import com.hearthappy.viewmodelautomation.model.response.ResLogin
1414
import com.hearthappy.viewmodelautomation.ui.base.BaseActivity
1515

1616
@AndroidViewModel
17-
1817
@BindStateFlow("login", ReLogin::class, ResLogin::class) class LoginActivity: BaseActivity() {
1918

2019
private lateinit var viewBinding: ActivityLoginBinding
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.hearthappy.ktorexpand.code.network
2+
3+
data class Cookie(val name:String,val value: String)

ktorexpand/src/main/java/com/hearthappy/ktorexpand/code/network/KtorApi.kt

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -48,30 +48,38 @@ fun HttpRequestBuilder.handleHeaders(headers: List<Header>?) {
4848
headers?.apply { for (header in this) header(header.key, header.value) }
4949
}
5050

51-
suspend inline fun HttpClient.getRequest(url: String, headers: List<Header>?, httpRequestScope: HttpRequestBuilder.() -> Unit): HttpResponse = get(urlString = url) {
51+
fun HttpRequestBuilder.handlerCookies(cookies:List<Cookie>?){
52+
cookies?.apply { for (cookie in this) cookie(cookie.name, cookie.value) }
53+
}
54+
55+
suspend inline fun HttpClient.getRequest(url: String, headers: List<Header>?,cookies: List<Cookie>?=null, httpRequestScope: HttpRequestBuilder.() -> Unit): HttpResponse = get(urlString = url) {
56+
handlerCookies(cookies)
5257
handleHeaders(headers)
5358
httpRequestScope()
5459
}
5560

56-
suspend inline fun HttpClient.postRequest(url: String, headers: List<Header>?, httpRequestScope: HttpRequestBuilder.() -> Unit): HttpResponse = post(urlString = url) {
61+
suspend inline fun HttpClient.postRequest(url: String, headers: List<Header>?, cookies: List<Cookie>?=null,httpRequestScope: HttpRequestBuilder.() -> Unit): HttpResponse = post(urlString = url) {
62+
handlerCookies(cookies)
5763
handleHeaders(headers)
5864
httpRequestScope()
5965
}
6066

61-
suspend inline fun HttpClient.patchRequest(url: String, headers: List<Header>?, httpRequestScope: HttpRequestBuilder.() -> Unit): HttpResponse = patch(urlString = url) {
67+
suspend inline fun HttpClient.patchRequest(url: String, headers: List<Header>?,cookies: List<Cookie>?=null, httpRequestScope: HttpRequestBuilder.() -> Unit): HttpResponse = patch(urlString = url) {
68+
handlerCookies(cookies)
6269
handleHeaders(headers)
6370
httpRequestScope()
6471
}
6572

66-
suspend inline fun HttpClient.deleteRequest(url: String, headers: List<Header>?, httpRequestScope: HttpRequestBuilder.() -> Unit): HttpResponse = delete(urlString = url) {
73+
suspend inline fun HttpClient.deleteRequest(url: String, headers: List<Header>?,cookies: List<Cookie>?=null, httpRequestScope: HttpRequestBuilder.() -> Unit): HttpResponse = delete(urlString = url) {
74+
handlerCookies(cookies)
6775
handleHeaders(headers)
6876
httpRequestScope()
6977
}
7078

7179
@OptIn(InternalAPI::class)
72-
suspend fun HttpClient.multiPartRequest(httpType: Int = POST, url: String, headers: List<Header>?, listener: ProgressListener, multipartBody: MultipartBody): HttpResponse {
80+
suspend fun HttpClient.multiPartRequest(httpType: Int = POST, url: String, headers: List<Header>?,cookies: List<Cookie>?=null, listener: ProgressListener, multipartBody: MultipartBody): HttpResponse {
7381
return when (httpType) {
74-
POST -> postRequest(url, headers) {
82+
POST -> postRequest(url, headers,cookies) {
7583
setBody(MultiPartFormDataContent(
7684
formData {
7785
multipartBody.appends?.apply {
@@ -97,16 +105,16 @@ suspend fun HttpClient.multiPartRequest(httpType: Int = POST, url: String, heade
97105
* @param defaultConfig DefaultConfig
98106
* @return HttpResponse
99107
*/
100-
suspend fun sendKtorDownload(httpType: Int = GET, url: String, headers: List<Header>? = null, listener: ProgressListener = { _, _ -> }, defaultConfig: DefaultConfig = DefaultConfig(EmptyString)) = ktorClient(defaultConfig).use {
108+
suspend fun sendKtorDownload(httpType: Int = GET, url: String, headers: List<Header>? = null,cookies: List<Cookie>?=null, listener: ProgressListener = { _, _ -> }, defaultConfig: DefaultConfig = DefaultConfig(EmptyString)) = ktorClient(defaultConfig).use {
101109
when (httpType) {
102-
GET -> it.getRequest(url, headers) { onDownload(listener) }
103-
POST -> it.postRequest(url, headers) { onDownload(listener) }
110+
GET -> it.getRequest(url, headers,cookies) { onDownload(listener) }
111+
POST -> it.postRequest(url, headers,cookies) { onDownload(listener) }
104112
else -> throw RuntimeException("sendKtorDownload not implemented yet,The current RequestType value is $httpType")
105113
}
106114
}
107115

108-
suspend fun sendKtorUpload(httpType: Int = POST, url: String, headers: List<Header>? = null, multipartBody: MultipartBody, listener: ProgressListener = { _, _ -> }, defaultConfig: DefaultConfig = DefaultConfig(EmptyString)) = ktorClient(defaultConfig).use {
109-
it.multiPartRequest(httpType, url, headers, listener, multipartBody)
116+
suspend fun sendKtorUpload(httpType: Int = POST, url: String, headers: List<Header>? = null,cookies: List<Cookie>?=null, multipartBody: MultipartBody, listener: ProgressListener = { _, _ -> }, defaultConfig: DefaultConfig = DefaultConfig(EmptyString)) = ktorClient(defaultConfig).use {
117+
it.multiPartRequest(httpType, url, headers,cookies, listener, multipartBody)
110118
}
111119

112120

@@ -121,61 +129,66 @@ suspend fun sendKtorUpload(httpType: Int = POST, url: String, headers: List<Head
121129
* @param appends @Body = FormUrlEncoded 时有数据
122130
* @return Any?
123131
*/
124-
suspend inline fun sendKtorRequest(httpType: Int = GET, bodyType: Int = NONE, url: String, headers: List<Header>? = null, parameters: HttpRequestBuilder.() -> Unit = {}, requestBody: Any = EmptyContent, appends: ParametersBuilder.() -> Unit = {}, defaultConfig: DefaultConfig = DefaultConfig(EmptyString)) = ktorClient(defaultConfig).use {
132+
suspend inline fun sendKtorRequest(httpType: Int = GET, bodyType: Int = NONE, url: String, headers: List<Header>? = null,cookies: List<Cookie>?=null, parameters: HttpRequestBuilder.() -> Unit = {}, requestBody: Any = EmptyContent, appends: ParametersBuilder.() -> Unit = {}, defaultConfig: DefaultConfig = DefaultConfig(EmptyString)) = ktorClient(defaultConfig).use {
125133
when (httpType) {
126134
GET -> {
127135
when (bodyType) {
128-
NONE -> it.getRequest(url, headers) { parameters() }
129-
TEXT -> it.getRequest(url, headers?.plus(textHeader) ?: listOf(textHeader)) { setBody(Gson().toJson(requestBody)) }
130-
JSON -> it.getRequest(url, headers) { setBody(requestBody) }
131-
FormData -> it.submitForm(url = url, Parameters.build(appends), encodeInQuery = true) { handleHeaders(headers) }
132-
FormUrlEncoded -> it.getRequest(url, headers) { setBody(FormDataContent(Parameters.build(appends))) }
136+
NONE -> it.getRequest(url, headers,cookies) { parameters() }
137+
TEXT -> it.getRequest(url, headers?.plus(textHeader) ?: listOf(textHeader),cookies) { setBody(Gson().toJson(requestBody)) }
138+
JSON -> it.getRequest(url, headers,cookies) { setBody(requestBody) }
139+
FormData -> it.submitForm(url = url, Parameters.build(appends), encodeInQuery = true) {
140+
handlerCookies(cookies)
141+
handleHeaders(headers) }
142+
FormUrlEncoded -> it.getRequest(url, headers,cookies) { setBody(FormDataContent(Parameters.build(appends))) }
133143
else -> throw RuntimeException("get other error")
134144
}
135145
}
136146
POST -> {
137147
when (bodyType) {
138-
NONE -> it.postRequest(url, headers) { parameters() }
139-
TEXT -> it.postRequest(url, headers?.plus(textHeader) ?: listOf(textHeader)) { setBody(Gson().toJson(requestBody)) }
140-
JSON -> it.postRequest(url, headers) { setBody(requestBody) }
148+
NONE -> it.postRequest(url, headers,cookies) { parameters() }
149+
TEXT -> it.postRequest(url, headers?.plus(textHeader) ?: listOf(textHeader),cookies) { setBody(Gson().toJson(requestBody)) }
150+
JSON -> it.postRequest(url, headers,cookies) { setBody(requestBody) }
141151
FormData -> it.submitForm(url = url, Parameters.build(appends)) {
152+
handlerCookies(cookies)
142153
handleHeaders(headers)
143154
}
144-
FormUrlEncoded -> it.postRequest(url, headers) {
155+
FormUrlEncoded -> it.postRequest(url, headers,cookies) {
145156
setBody(FormDataContent(Parameters.build(appends)))
146157
}
147158
else -> throw RuntimeException("post other error")
148159
}
149160
}
150161
PATCH -> {
151162
when (bodyType) {
152-
NONE -> it.patchRequest(url, headers) { parameters() }
153-
TEXT -> it.patchRequest(url, headers?.plus(textHeader) ?: listOf(textHeader)) {
163+
NONE -> it.patchRequest(url, headers,cookies) { parameters() }
164+
TEXT -> it.patchRequest(url, headers?.plus(textHeader) ?: listOf(textHeader),cookies) {
154165
setBody(Gson().toJson(requestBody))
155166
}
156-
JSON -> it.patchRequest(url, headers) {
167+
JSON -> it.patchRequest(url, headers,cookies) {
157168
setBody(requestBody)
158169
}
159170
FormData -> it.submitForm(url = url, Parameters.build(appends)) {
171+
handlerCookies(cookies)
160172
handleHeaders(headers)
161173
}
162-
FormUrlEncoded -> it.patchRequest(url, headers) {
174+
FormUrlEncoded -> it.patchRequest(url, headers,cookies) {
163175
setBody(FormDataContent(Parameters.build(appends)))
164176
}
165177
else -> throw RuntimeException("patch other error")
166178
}
167179
}
168180
DELETE -> {
169181
when (bodyType) {
170-
NONE -> it.deleteRequest(url, headers) { parameters() }
171-
TEXT -> it.deleteRequest(url, headers?.plus(textHeader) ?: listOf(textHeader)) {
182+
NONE -> it.deleteRequest(url, headers,cookies) { parameters() }
183+
TEXT -> it.deleteRequest(url, headers?.plus(textHeader) ?: listOf(textHeader),cookies) {
172184
setBody(Gson().toJson(requestBody))
173185
}
174-
JSON -> it.deleteRequest(url, headers) { setBody(requestBody) }
186+
JSON -> it.deleteRequest(url, headers,cookies) { setBody(requestBody) }
175187
FormData -> it.submitForm(url = url, Parameters.build(appends)) {
188+
handlerCookies(cookies)
176189
handleHeaders(headers)
177190
}
178-
FormUrlEncoded -> it.deleteRequest(url, headers) {
191+
FormUrlEncoded -> it.deleteRequest(url, headers,cookies) {
179192
setBody(FormDataContent(Parameters.build(appends)))
180193
}
181194
else -> throw RuntimeException("delete other error")

ktorexpand/src/main/java/com/hearthappy/ktorexpand/code/network/KtorTest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ internal suspend fun multiFileUpload(partData: List<PartData>, listener: (suspen
9898

9999

100100
fun main() = runBlocking {
101+
102+
101103
// val file = File("/Library/MyComputer/Software/Android/Git/ViewModelAutomation/test.jpeg")
102104

103105
// println("exist:${file.exists()},${file.name}")
@@ -144,4 +146,10 @@ fun main() = runBlocking {
144146
}
145147
146148
println("end...:")*/
149+
150+
151+
}
152+
153+
data class RequestData(val requestType: String, val ver: String, val biz: Biz) {
154+
class Biz
147155
}

processor/src/main/java/com/hearthappy/processor/AnnotationHandler.kt

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.hearthappy.annotations.*
44
import com.hearthappy.processor.common.KTOR_PROGRESS_PKG
55
import com.hearthappy.processor.common.NETWORK_MultipartBody
66
import com.hearthappy.processor.common.NETWORK_PKG
7+
import com.hearthappy.processor.common.TAG_COOKIE
78
import com.hearthappy.processor.model.*
89
import com.hearthappy.processor.tools.asRest
910
import com.hearthappy.processor.tools.findRest
@@ -18,9 +19,10 @@ import javax.lang.model.element.ElementKind
1819
* Create RequestData
1920
* @param roundEnv RoundEnvironment
2021
*/
21-
internal fun ViewModelProcessor.getRequestDataMap(roundEnv: RoundEnvironment, createServiceConfigList: List<ServiceConfigData>): Map<String,RequestData> { //获取所有注解,将请求集中在一起
22+
internal fun ViewModelProcessor.getRequestDataMap(roundEnv: RoundEnvironment, createServiceConfigList: List<ServiceConfigData>): Map<String, RequestData> { //获取所有注解,将请求集中在一起
2223
val requestElements = roundEnv.getElementsAnnotatedWith(Request::class.java)
2324
val headersElements = roundEnv.getElementsAnnotatedWith(Header::class.java)
25+
val cookiesElements = roundEnv.getElementsAnnotatedWith(Cookie::class.java)
2426
val fixedHeadersElements = roundEnv.getElementsAnnotatedWith(Headers::class.java)
2527
val bodyElements = roundEnv.getElementsAnnotatedWith(Body::class.java).filterCopy()
2628
val queryElements = roundEnv.getElementsAnnotatedWith(Query::class.java).filterCopy()
@@ -35,9 +37,11 @@ internal fun ViewModelProcessor.getRequestDataMap(roundEnv: RoundEnvironment, cr
3537
// outElementsAllLog(TAG_SITE, siteElements)
3638
// outElementsAllLog(TAG_ORDER, orderElements)
3739

40+
outElementsAllLog(TAG_COOKIE, cookiesElements)
41+
3842

3943
//创建请求集合
40-
val requestDataList = mutableMapOf<String,RequestData>()
44+
val requestDataList = mutableMapOf<String, RequestData>()
4145

4246
return requestDataList.apply {
4347
for (requestElement in requestElements) {
@@ -52,6 +56,9 @@ internal fun ViewModelProcessor.getRequestDataMap(roundEnv: RoundEnvironment, cr
5256
val headers = headersElements.getRequestHeaders(requestClass).map {
5357
HeaderData(it.getAnnotation(Header::class.java).value, it.simpleName.toString())
5458
}
59+
val cookies = cookiesElements.getRequestHeaders(requestClass).map {
60+
CookieData(it.getAnnotation(Cookie::class.java).value, it.simpleName.toString())
61+
}
5562

5663
//获取固定headers请求头
5764
val fixedHeaders = fixedHeadersElements.getFixedHeaders(requestElement)
@@ -73,14 +80,14 @@ internal fun ViewModelProcessor.getRequestDataMap(roundEnv: RoundEnvironment, cr
7380

7481
val multiPartParameters = multiPart?.run { methodParameters.filter { it.parameterType == NETWORK_PKG.plus(".$NETWORK_MultipartBody") }.takeIf { it.isNotEmpty() }?.run { this.plus(ParameterData("listener", KTOR_PROGRESS_PKG)) } }
7582
//获取需要过滤的方法参数名
76-
val multiPartParameter = multiPartParameters?.find { it.parameterType== NETWORK_PKG.plus(".$NETWORK_MultipartBody")}?.run { this.parameterName }
83+
val multiPartParameter = multiPartParameters?.find { it.parameterType == NETWORK_PKG.plus(".$NETWORK_MultipartBody") }?.run { this.parameterName }
7784

7885
//获取请求参数
79-
val requestParameters: List<String> = getRequestParameters(methodParameters, requestAnt, headers, requestBodyData, order, multiPartParameter)
86+
val requestParameters: List<String> = getRequestParameters(methodParameters, requestAnt, headers, requestBodyData, order, multiPartParameter, cookies)
8087

81-
val requestData = RequestData(requestClass, httpType, requestUrl, findBaseConfig, headers, fixedHeaders, methodParameters, requestParameters, requestBodyData, order, streamingParameters, multiPartParameters)
82-
this[requestClass]=requestData
83-
// sendNoteMsg("【RequestData】:$requestData")
88+
val requestData = RequestData(requestClass, httpType, requestUrl, findBaseConfig, headers, fixedHeaders, methodParameters, requestParameters, requestBodyData, order, streamingParameters, multiPartParameters, cookies)
89+
this[requestClass] = requestData
90+
sendNoteMsg("【RequestData】:$requestData")
8491
}
8592
}
8693
}
@@ -111,10 +118,10 @@ private fun ViewModelProcessor.getMethodParameters(requestElement: Element, body
111118
BodyType.JSON, BodyType.FormUrlEncoded -> parameters.addAll(getMethodParameterByBodyKind(bodyElements, requestElement))
112119
BodyType.HTML -> {
113120
}
114-
BodyType.XML -> {
121+
BodyType.XML -> {
115122
}
116-
BodyType.FormData -> parameters.addAll(getMethodParameterByBodyKind(bodyElements, requestElement))
117-
else -> {
123+
BodyType.FormData -> parameters.addAll(getMethodParameterByBodyKind(bodyElements, requestElement))
124+
else -> {
118125
}
119126
}
120127
order?.let { parameters.add(ParameterData(it, "Int")) }
@@ -275,10 +282,11 @@ private fun getCurrentBodyType(bodyElement: Element): BodyType {
275282
* @param requestBodyData: String 根据BodyType过滤的对应注解的参数(@Body、@FormUrlEncoded)
276283
* @return List<String>
277284
*/
278-
private fun getRequestParameters(parameters: List<ParameterData>, requestAnt: Request, headers: List<HeaderData>, requestBodyData: RequestBodyData?, orderParamName: String?, multiPartParamName: String?): List<String> {
285+
private fun getRequestParameters(parameters: List<ParameterData>, requestAnt: Request, headers: List<HeaderData>, requestBodyData: RequestBodyData?, orderParamName: String?, multiPartParamName: String?, cookies: List<CookieData>): List<String> {
279286

280287
//过滤headers参数
281-
val filterHeaderParameters = (parameters.map { it.parameterName } subtract headers.map { it.parameterName }.toSet()).toList()
288+
val filterHeaderParameters = (parameters.map { it.parameterName } subtract headers.map { it.parameterName }.toSet() subtract cookies.map { it.parameterName }.toSet()).toList()
289+
282290

283291
//过滤rest参数
284292
val filterRestParameters = filterHeaderParameters.filterRestParameters(requestAnt.urlString)

0 commit comments

Comments
 (0)