1 /* 2 * Copyright 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.constraintlayout.compose.lint 18 19 import androidx.compose.lint.test.bytecodeStub 20 import com.android.tools.lint.checks.infrastructure.LintDetectorTest 21 import com.android.tools.lint.detector.api.Issue 22 import org.junit.Test 23 import org.junit.runner.RunWith 24 import org.junit.runners.JUnit4 25 26 private const val COMPOSE_CONSTRAINTLAYOUT_FILE_PATH = "androidx/constraintlayout/compose" 27 28 @RunWith(JUnit4::class) 29 class ConstraintLayoutDslDetectorTest : LintDetectorTest() { getDetectornull30 override fun getDetector() = ConstraintLayoutDslDetector() 31 32 override fun getIssues(): MutableList<Issue> = 33 mutableListOf(ConstraintLayoutDslDetector.IncorrectReferencesDeclarationIssue) 34 35 private val ConstraintSetScopeStub = 36 bytecodeStub( 37 filename = "ConstraintSetScope.kt", 38 filepath = COMPOSE_CONSTRAINTLAYOUT_FILE_PATH, 39 checksum = 0xb5f243fa, 40 source = 41 """ 42 package androidx.constraintlayout.compose 43 44 class ConstraintSetScope { 45 private var generatedCount = 0 46 private fun nextId() = "androidx.constraintlayout.id" + generatedCount++ 47 48 fun createRefsFor(vararg ids: Any): ConstrainedLayoutReferences = 49 ConstrainedLayoutReferences(arrayOf(*ids)) 50 51 inner class ConstrainedLayoutReferences internal constructor( 52 private val ids: Array<Any> 53 ) { 54 operator fun component1(): ConstrainedLayoutReference = 55 ConstrainedLayoutReference(ids.getOrElse(0) { nextId() }) 56 operator fun component2(): ConstrainedLayoutReference = 57 ConstrainedLayoutReference(ids.getOrElse(1) { nextId() }) 58 operator fun component3(): ConstrainedLayoutReference = 59 ConstrainedLayoutReference(ids.getOrElse(2) { nextId() }) 60 operator fun component4(): ConstrainedLayoutReference = 61 ConstrainedLayoutReference(ids.getOrElse(3) { nextId() }) 62 operator fun component5(): ConstrainedLayoutReference = 63 ConstrainedLayoutReference(ids.getOrElse(4) { nextId() }) 64 operator fun component6(): ConstrainedLayoutReference = 65 ConstrainedLayoutReference(ids.getOrElse(5) { nextId() }) 66 operator fun component7(): ConstrainedLayoutReference = 67 ConstrainedLayoutReference(ids.getOrElse(6) { nextId() }) 68 operator fun component8(): ConstrainedLayoutReference = 69 ConstrainedLayoutReference(ids.getOrElse(7) { nextId() }) 70 operator fun component9(): ConstrainedLayoutReference = 71 ConstrainedLayoutReference(ids.getOrElse(8) { nextId() }) 72 operator fun component10(): ConstrainedLayoutReference = 73 ConstrainedLayoutReference(ids.getOrElse(9) { nextId() }) 74 operator fun component11(): ConstrainedLayoutReference = 75 ConstrainedLayoutReference(ids.getOrElse(10) { nextId() }) 76 operator fun component12(): ConstrainedLayoutReference = 77 ConstrainedLayoutReference(ids.getOrElse(11) { nextId() }) 78 operator fun component13(): ConstrainedLayoutReference = 79 ConstrainedLayoutReference(ids.getOrElse(12) { nextId() }) 80 operator fun component14(): ConstrainedLayoutReference = 81 ConstrainedLayoutReference(ids.getOrElse(13) { nextId() }) 82 operator fun component15(): ConstrainedLayoutReference = 83 ConstrainedLayoutReference(ids.getOrElse(14) { nextId() }) 84 operator fun component16(): ConstrainedLayoutReference = 85 ConstrainedLayoutReference(ids.getOrElse(15) { nextId() }) 86 } 87 } 88 89 class ConstrainedLayoutReference(val id: Any) 90 """ 91 .trimIndent(), 92 """ 93 META-INF/main.kotlin_module: 94 H4sIAAAAAAAA/2NgYGBmYGBgBGJOBijgMudSTMxLKcrPTKnQS87PKy4pSszM 95 K8lJrMwvLQEK5BbkF6cKCfnml2Tm5wUnp+alBifnF6R6l3AJcrGnViTmFuSk 96 CrGFpBaXeJcoMWgxAACjh5JrZAAAAA== 97 """, 98 """ 99 androidx/constraintlayout/compose/ConstrainedLayoutReference.class: 100 H4sIAAAAAAAA/6VRXU8TURA9d/u1rEW2lUoBxQ9QSlEWiG8giWJMNqloqOGF 101 p9vda7ntdpfs3jb41t/iL9BEo/HBND76o4xzy4oCvvkyZ87cmTNzZ378/PoN 102 wCOsMWzz0I8j6Z84XhQmKuYyVAF/G/UVBXrHUSKc3d8Pwm+MX/bFGxGL0BMF 103 MAa7wwfcCXjYdl62OsJTBWQY8tsylGqHoVJrXEzYWjlgWGxEcdvpCNXS0onD 104 wzBSXElq5uxFaq8fBFsMhvRNmAwL3UgFMnQ6g55DE4o45IHjhiqmUuklBVjU 105 yTsSXjetfcVj3hOUyLD8jwn+ijS1SJtmKqKISQtXcJUhU9M8B9tCFiWG8mWJ 106 Ikxcm4CBaYasOpIJw07jf7ZJ3821hXJ9hunayuWGDKVGuoYXQnGfK6431Btk 107 6JhMmwltwMC6FD+Rmq2T52/QnUfDomVUDcuwR0PLMLPV0XDTWGdPJ8t525gj 108 7/u7vGFn9ktnzLRGw7msmbVzWmOTaeXK2fiqKVTTi47FWlcxzO/3QyV7wg0H 109 MpGtQDz5c05az27kC4apBv16r99rifg1pxy91sjjwQGPpeZpcOmi1tktz4la 110 zagfe+K51DWzac3Bpe7YoBNlx2sp64sRLhPLExYIDcIcMQM1Ys8IDUJ7tTzx 111 BVP1zyjXVz+h8mGcuZLW5bGOOvnXT3MJZ/TeyTvVXyW/wNIGJVQxm8o7+jaE 112 ufpHVN6f00SqWTxNSDXPT/pgbO/jIeFjis5R3vwhMi5uuLjpYgG3yMVtF3dw 113 9xAswSKWDpFPMJPgXgIz0X41wewvvckEVQIEAAA= 114 """, 115 """ 116 androidx/constraintlayout/compose/ConstraintSetScope$ConstrainedLayoutReferences.class: 117 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 154 """, 155 """ 156 androidx/constraintlayout/compose/ConstraintSetScope.class: 157 H4sIAAAAAAAA/7VVXU8bRxQ9s/5kMY5xAuEjTUlME/MR1qE0bQNNC25JljpA 158 7Qo14qXD7sRZWO+inTWCN9T+gv6F/oJWaiFqpAjlsT+q6p21IcFYeUDtg2fu 159 nHvvOXdn5o7//uev1wDmUGOY454d+I69b1i+J8OAO17o8gO/GRLQ2PWlMMpn 160 jpoIa5a/K1JgDLltvscNl3t1Y21rW1hhCjGG5ILjOeEjhlhxYiODBJI64kgx 161 xMMXjmR4ULmM4DwRe2I/NG2Ga8WJylvpWhg4Xp381zuxpabj2iJIoU9HVlVw 162 41R5plN5xrHTyJEG390VHmncK16UuKjaVpjPII+rSuQaQ7YuPBHwUNhlv+mF 163 DMzMYBDXe6BhiGoomu/nGVE8owzp0G85M/gAGQXeZOizAkHUVfFcLvsBQ724 164 Wek8BarzMjs8fgYJuxIFk4oIhGcJSbtbqPhB3dgW4ZYKkQb3PD/koUNJxqof 165 rjZdl6Jiji3TKDDc3PFD1/GM7b2GQSIi8LhrmJ76IOlYMoWPGAasF8LaaSev 166 84A3BAUy3C1e/KYup0GX6y6KOu5ggmH9v/7kFKZOb3gzdFxjMQj4AaH36JJQ 167 7sHac4aJbrtvTnQBMzBQ0jGD+wyV4uU6oNtJRw32sY5pzDFc7RJBV4Zb9Dly 168 /LR7Vi4p36XnMuhVN1PD5wyJ8VZ791faJ/9UhNzmIacStMZejJ4bpoYeNYC6 169 YofwfUetSmTZtDE/nxze0bUhTddyJ4e6llZGWlcmYWrK9bfRLC2HTg5ntRJ7 170 yDJLiTe/JrWctlLIJUaSpWRVK5Evn0uN6PlkmuUpqpS+TWMU1rOSzukjWqn3 171 iVbN5mJkxX9481NW+YhVlTLLVIHV/6OLRt/jpoa4yDezQy9IvOzbguFKhdJW 172 m40tEXzPt1xC8hXf4u4GDxy1boOjVXp2nIYwvT1HOgQtvm1VhvFO71njnQvL 173 mB69YmWXS6kq02t+M7DEsqMEhtsUGxfocZ8uQzw6X029eWTFyab/ABq/pZWh 174 Tp7mxOQx0r+ToaFCYzICY3hKY6YVgB7oNOfVFWsnrxCZRvPYK2SfHeNKvv8I 175 A5N/YHhhcjT+458YHj3CjSN8+FsHb+Id3rE27y9k3SJFxWtShOIdmMqPv8Tk 176 K0w/m5yaev0Ss8f45DxZEumIbLCV0CZTVgEPyL/ajrtN8xr9Uqy1yA3jU3zW 177 ZRMenudnHZswH/HHsE6jTtg0xZrox3dR1gqqNFcJX6DYLzYRM/HIxJcmvsIi 178 mVgyUcbXm2AS32B5E30SusRjiaTEYGSMSTyRKET2LYneyDD/BWglTVUgCAAA 179 """ 180 ) 181 182 private val MotionSceneScopeStub = 183 bytecodeStub( 184 filename = "MotionSceneScope.kt", 185 filepath = COMPOSE_CONSTRAINTLAYOUT_FILE_PATH, 186 checksum = 0x499473bb, 187 source = 188 """ 189 package androidx.constraintlayout.compose 190 191 import androidx.constraintlayout.compose.ConstrainedLayoutReference 192 193 private const val UNDEFINED_NAME_PREFIX = "androidx.constraintlayout" 194 195 class MotionSceneScope { 196 /** 197 * Count of generated ConstraintSet & Transition names. 198 */ 199 private var generatedCount = 0 200 201 /** 202 * Count of generated ConstraintLayoutReference IDs. 203 */ 204 private var generatedIdCount = 0 205 206 private fun nextId() = UNDEFINED_NAME_PREFIX + "id" + generatedIdCount++ 207 208 fun createRefsFor(vararg ids: Any): ConstrainedLayoutReferences = 209 ConstrainedLayoutReferences(arrayOf(*ids)) 210 211 inner class ConstrainedLayoutReferences internal constructor( 212 private val ids: Array<Any> 213 ) { 214 operator fun component1(): ConstrainedLayoutReference = 215 ConstrainedLayoutReference(ids.getOrElse(0) { nextId() }) 216 operator fun component2(): ConstrainedLayoutReference = 217 ConstrainedLayoutReference(ids.getOrElse(1) { nextId() }) 218 operator fun component3(): ConstrainedLayoutReference = 219 ConstrainedLayoutReference(ids.getOrElse(2) { nextId() }) 220 operator fun component4(): ConstrainedLayoutReference = 221 ConstrainedLayoutReference(ids.getOrElse(3) { nextId() }) 222 operator fun component5(): ConstrainedLayoutReference = 223 ConstrainedLayoutReference(ids.getOrElse(4) { nextId() }) 224 operator fun component6(): ConstrainedLayoutReference = 225 ConstrainedLayoutReference(ids.getOrElse(5) { nextId() }) 226 operator fun component7(): ConstrainedLayoutReference = 227 ConstrainedLayoutReference(ids.getOrElse(6) { nextId() }) 228 operator fun component8(): ConstrainedLayoutReference = 229 ConstrainedLayoutReference(ids.getOrElse(7) { nextId() }) 230 operator fun component9(): ConstrainedLayoutReference = 231 ConstrainedLayoutReference(ids.getOrElse(8) { nextId() }) 232 operator fun component10(): ConstrainedLayoutReference = 233 ConstrainedLayoutReference(ids.getOrElse(9) { nextId() }) 234 operator fun component11(): ConstrainedLayoutReference = 235 ConstrainedLayoutReference(ids.getOrElse(10) { nextId() }) 236 operator fun component12(): ConstrainedLayoutReference = 237 ConstrainedLayoutReference(ids.getOrElse(11) { nextId() }) 238 operator fun component13(): ConstrainedLayoutReference = 239 ConstrainedLayoutReference(ids.getOrElse(12) { nextId() }) 240 operator fun component14(): ConstrainedLayoutReference = 241 ConstrainedLayoutReference(ids.getOrElse(13) { nextId() }) 242 operator fun component15(): ConstrainedLayoutReference = 243 ConstrainedLayoutReference(ids.getOrElse(14) { nextId() }) 244 operator fun component16(): ConstrainedLayoutReference = 245 ConstrainedLayoutReference(ids.getOrElse(15) { nextId() }) 246 } 247 } 248 """ 249 .trimIndent(), 250 """ 251 META-INF/main.kotlin_module: 252 H4sIAAAAAAAA/2NgYGBmYGBgBGJOBijgMudSTMxLKcrPTKnQS87PKy4pSszM 253 K8lJrMwvLQEK5BbkF6cKCfnml2Tm5wUnp+alBifnF6R6l3AJcrGnViTmFuSk 254 CrGFpBaXeJcoMWgxAACjh5JrZAAAAA== 255 """, 256 """ 257 androidx/constraintlayout/compose/MotionSceneScope$ConstrainedLayoutReferences.class: 258 H4sIAAAAAAAA/92XS1PbVhTHz5XfwoBxgBDAAYoJYOMI+QUGkoYQKAZDKE5p 259 UvoStkIERmJ8ZYbsmC7yDdoP0C66bWeaSaad6TAsu+sXyvTIiCA5VkYhWnXA 260 0rlXV//zOw/ZV/+8+fNvAEiDQmBdkMtVRSofcyVFpmpVkGS1IjxXaipOHBwq 261 VOTWFFVS5GJJlMViSTkUowsXK8Vyob50U3wqVkW5JFIfEAKhPeFI4CqCvMs9 262 3NkTS6oPXAS8c5IsqXcJrIwVPtzp7HahUXV2fItA95jFheGCUt3l9kR1R5On 263 nCDLiipoopRbV9T1WqUyS8AllakfAgRu7itqRZK5vaMDDmnEqixUuLysVvFe 264 qYRxtRDoKj0TS/v6zRtCVTgQcSGB0bF3EQwzRU1kF6GC0AptLAShHbOhPpNo 265 dJJA+irJCEIHhAPAwDUMYUxT9kAXC27oJnCtSUKCEIAebf0NAm7NM4GNK/h9 266 X+UxmWz9PlmUVZ7AvbFxGx6sBVGvT69JSalUMIp66earVeE5XcWWGiAQ3BXV 267 gkDVvFwWj616IR+EIfiEhUEYJpD88KB9MEKgVShhjDQqi8dqvkxg+Uo9PP5u 268 VwRhFMZYuAXjBOY+Jl8+iGOHNunE8+5IsDABtwnko1JUiCYwcQ+rixUqJj6k 269 xtHLAkexxCRPgJGwFD3G2icdc5LUnFwKpxwTTpmF044Jp83CGceEM2bhrGPC 270 WbPwlGPCU2bhaceEp83COceEc5pwy2WL45fzikNPy2SDNO+cNN8gnXROOtkg 271 nXJOOtUgnXZOOt0gnXFOOtMgnXVOuv4cdhT0X7w1URXKgirgjyBzcOTCzRrR 272 DgHtAPjFu4/zx5I2wiZlyjwhkdOTXpbpYVgmdHrC4j8T6mAZv+t8zt/uP3vh 273 7jk9STKT5H6X//QkHAwxvf6wO4wTk66zn71MyL0SCHl7mUnf8tkLBm2/wQ4Y 274 bNZgtxjsoMFuNdhtBrvdYIcMdofBDhvsawa702B3GezuC3uz2xjT47Mf3BiX 275 GzPh0ZKEDwam7u5Hb0reU0/cfDWW//a+SiBWaLa7LCq1akl8IO7UdhePVRH3 276 mYqMDjxHQqUmEvi3uDa/wTbRY1frYmysOHhhLbHxQX6w2VpnN3noJjn4VNiv 277 SzeLaQmvrapsrMDyw/xEJjfDo5GcyU6ysUUWk7dZk1XpQMzLRxKVdiri/OWu 278 HHemC0oZA28voOv12sGOWH0k4BoC4YJSEipbQlXSxvpkoCjtyoJaq6IdbdR9 279 uzs3OWgtqkJpf0041CWCeVkWqwsVgVKteOx5RZYk7Vpns/IQuKF72nqHH3jc 280 X7vxkWQgrG23sdnKOPLi2Q8QCmlbdhx34NiDsy4QcbSNq7XHuGsizL6GUCz+ 281 Ejpjr+B6bOIl9P5eF3uKxzZc5IXr0I6ynXjexbnB8xuhD/q1bwW0NAekbmnu 282 GXhWv98HEp595JwDF0XgJk5r3n9ECR+e+dgf0Ftw3cFT53p//DVEf4FAvD/5 283 K7T1Z92urCfxGmIw4/0LJp7c8L4C7je8yQV7eAwB8wZ6fZAiPri14sMEaLzd 284 GCIgWQTmkLMPovgZwc8F9yCum8SEeXCFD5JoaYnj9VgMaUPctAWu22nciI4b 285 QdwI4kZMuBmbuFkLXI/TuAM67gDiDiDugAl3yibutAWu12ncIR13CHGHEHfI 286 hJuziTtjgetzGndYxx1G3GHEHTbhztrEnbPA9TuNO6LjjiDuSP3PiHvHJu7d 287 t7g/6bjJOm7o6t3Q15x3FD3NYQ+MIukovv2OvuUdwnWf1nlvGniTTXnvWfFe 288 vR0seMd13nHkHdfe1k288zZ571vxXr0fLHjjOm8ceePIGzfxLtjkfWDFG3Ca 289 N6HzJpA3gbwJE++iTd4lK17WaV5O5+WQl0NezsT7mU3eZSveFqd5eZ2XR14e 290 eXkTb94m74oVb9Bp3pTOm0LeFPKmTLyrNnkLVrytTvNmdN4M8maQN2PiXbPJ 291 u27F2+Y075TOO4W8U8g7ZeJ9aJN3w4q33WnenM6bQ94c8uZMvJ/b4vXAPh5Z 292 HDGo8B3yV0DbIH8PB3j+/71ugYxhHWK4mxh6cRtceXiUhy/ysAVfogmP8/AE 293 vtoGQvE15OttuE6hn8I3FAL1o5dCD4UIhW8pPKCwRGGZwgqFAoV1ChsU0hSy 294 FKYpzFCYo3CXwj2KP3FaytvQq4Cfnbp66T9woDCJcRoAAA== 295 """, 296 """ 297 androidx/constraintlayout/compose/MotionSceneScope.class: 298 H4sIAAAAAAAA/61VW08bRxT+Zm1ssxjHOOHqNCWBNuYS1qH0FmhacEtY11wK 299 KWrES4fdCVlY76KdNYI31H/Qp773F7RSC1EjRSiP/VFVz6yXJBgrUqLI0pkz 300 35z5vpkz56z//e+f5wBm8JBhmnt24Dv2oWH5ngwD7nihy4/8RkhAfd+Xwlj2 301 Q8f3NizhiQ3L3xdpMIb8Lj/ghsu9HWN1e1dYYRoJhtSc4znhfYZEaWwziw6k 302 dCSRZkiGTxzJMFN7e7lZovXEYWjaDNdKY7VXwhth4Hg7tN7fii00HNcWQRrd 303 OnJKv3iuO9Wq69gZ5EmC7+8LjyTulC4rXBaNBWazKOCq0rhGKdmhIwc8FLZp 304 V/yGFzIwM4s+9HdCwwDD9ZL5ZqYhxVRkyIR+czGLD5BV4A2GbisQRL4uHstF 305 P2AQpa1a6yPQSd8+waOV80hh16JQ0hCB8CwhKbkjNT/YMXZFuK1CpME9zw+5 306 opDGih+uNFyXohKOLTMYYbix54eu4xm7B3WDtEXgcdcwPXUd6VgyjY8Yeq0n 307 wtqLN6/xgNcFBTLcLl2+UZvXoMq6jZKOjzHGsPJ+L5zGxHlxU224xnwQ8CNC 308 71CJ0N6j1ccMY+0yb461AbMwUNYxhbsM1dK7FH+7N4466xMdk5hhuNomgoqF 309 W3QZOXreOEvvJN6m2bLoUhWp4UuGjtFmV+deFn5c9j21uAiWRchtHnI6kVY/ 310 SNBHhynTqQyoPfYIP3TUrEyeTVn67ey4pGsDmq7lz451LaOcTHMkUEH5nhjO 311 0XTg7HhaK7N7rHuh48XvKS2vVUfyqaFUOb2ulWmtkM8M6YVUhhUoqtx5i2wU 312 plcz+a4hrZxd0tZz+QR5yZ9e/JJTa8RKUEcLpI43zdSh195/ixXfsEwv3Mo2 313 tUc5TlZ8WzBcqdGmlUZ9WwQP+bZLSKHmW9zd5IGj5jFYXKeHcerC9A4c6RA0 314 /6qLGUZbV1/25IWwrOnRO1dcLqU6l77hNwJLLDpKYDCm2LxEj7tULUl6Yo1+ 315 c+iPvL5oTFI66T+CbI1mhqoIGjvGT5H5MwpbJpuKwDRWyGabAeiETmNB1WK8 316 uUpkGo3Dz5B7dIorhZ4T9I7/hcG58WLy578xWDzB9RN8+EcLb+E13uGY91fy 317 biIR8Zqkpnh7JwqjTzH+DJOPxicmnj/F9Ck+vUiWQm9E1tfcEJMpbwSf0fpq 318 HHeLxjV1Jdac5AfxOb5ok4R7F/lZSxJmI/4EfiCrEzZJsVX0YD3a9T02aPyR 319 8K8o9v4WEia+NvGNiXkskIuKiW/x3RaYxCIebCEnoUssSaQk5iKnT2JYwpQY 320 iaY3Jboip/o/WrVkd0EIAAA= 321 """, 322 """ 323 androidx/constraintlayout/compose/MotionSceneScopeKt.class: 324 H4sIAAAAAAAA/2WQz04iQRDGvxoUEVdEFBXc7GG9M2C8eTIrJhNhdiO7xoSD 325 aYYOaRi6zUwP0RvZR9nH2IMhHvehNlYbjQle6s+vv1R91f/+/30EcILPhBOh 326 h4lRw3s/Mjq1iVDaxuLBZJbB9M6k0u8aq4zuRVLLXmTu5KVdAxHKYzETfiz0 327 yP8+GMuIaY5Q/RWety+CsH1+G55127c/rri7IVQ67/KeTZQenRJqb8sby8sL 328 WCMcdUwy8sfSDtxL6gutjRXOTOqHxoZZHPOQ7c7E2FhpvyutGAormHnTWY4v 329 JBfWXQCBJq7w+PFeuarJ1bBF+LKY54uLedErl76Wyot53WvSzdPvn09/8h5z 330 pzomN2Bn+SMaE0vY/OasC22vRZxJwuFVpq2aykDPVKoGsTx7d00o9kyWRPJC 331 xSytvUqvPwjRgoeVF9t1rCLP3YEzjwJqnPPM191VTOovcR+HnFvMi6zf6CMX 332 4FOAzQAlbAUoYztABTt9UIpdVPvwUqym2HsG4yzy1wsCAAA= 333 """ 334 ) 335 336 @Test 337 fun createRefsForArgumentTest() { 338 lint() 339 .files( 340 kotlin( 341 """ 342 package example 343 344 import androidx.constraintlayout.compose.* 345 346 fun Test() { 347 val scopeApplier: ConstraintSetScope.() -> Unit = { 348 val (box, text) = createRefsFor("box", "text") 349 val (box1, text1, image1) = createRefsFor("box", "text") 350 val (box2, text2) = createRefsFor("box", "text", "image") 351 352 val ids = arrayOf("box", "text") 353 val (box3, text3, image3) = createRefsFor(*ids) 354 } 355 } 356 357 fun Test2() { 358 val scopeApplier: MotionSceneScope.() -> Unit = { 359 val (box, text) = createRefsFor("box", "text") 360 val (box1, text1, image1) = createRefsFor("box", "text") 361 val (box2, text2) = createRefsFor("box", "text", "image") 362 363 val ids = arrayOf("box", "text") 364 val (box3, text3, image3) = createRefsFor(*ids) 365 } 366 } 367 """ 368 ) 369 .indented(), 370 ConstraintSetScopeStub, 371 MotionSceneScopeStub 372 ) 373 .run() 374 .expect( 375 """src/example/test.kt:8: Error: Arguments of createRefsFor (2) do not match assigned variables (3) [IncorrectReferencesDeclaration] 376 val (box1, text1, image1) = createRefsFor("box", "text") 377 ~~~~~~~~~~~~~ 378 src/example/test.kt:9: Error: Arguments of createRefsFor (3) do not match assigned variables (2) [IncorrectReferencesDeclaration] 379 val (box2, text2) = createRefsFor("box", "text", "image") 380 ~~~~~~~~~~~~~ 381 src/example/test.kt:19: Error: Arguments of createRefsFor (2) do not match assigned variables (3) [IncorrectReferencesDeclaration] 382 val (box1, text1, image1) = createRefsFor("box", "text") 383 ~~~~~~~~~~~~~ 384 src/example/test.kt:20: Error: Arguments of createRefsFor (3) do not match assigned variables (2) [IncorrectReferencesDeclaration] 385 val (box2, text2) = createRefsFor("box", "text", "image") 386 ~~~~~~~~~~~~~ 387 4 errors, 0 warnings""" 388 ) 389 } 390 } 391