diff --git a/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/FileDescriptorEncoding.kt b/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/FileDescriptorEncoding.kt index edd46adc1..fa40527f2 100644 --- a/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/FileDescriptorEncoding.kt +++ b/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/FileDescriptorEncoding.kt @@ -43,14 +43,14 @@ private const val BYTES_PER_PART = BYTES_PER_LINE * LINES_PER_PART // This makes huge bytecode files and can easily hit the compiler's internal // code size limits (error "code to large"). String literals are apparently // embedded raw, which is what we want. -fun encodeFileDescriptor(fileDescriptorProto: FileDescriptorProto): List> { - val parts = mutableListOf>() +fun encodeFileDescriptor(fileDescriptorProto: FileDescriptorProto): List { + val parts = mutableListOf() val bytes = fileDescriptorProto.toByteArray() for (i in bytes.indices step BYTES_PER_LINE) { if (i % BYTES_PER_PART == 0) { - parts.add(mutableListOf()) + parts.add("") } - parts.last().add(escape(bytes.asSequence().drop(i).take(BYTES_PER_LINE))) + parts[parts.size - 1] += escape(bytes.asSequence().drop(i).take(BYTES_PER_LINE)) } return parts } diff --git a/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/FileDescriptorResolver.kt b/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/FileDescriptorResolver.kt index 33261ab68..3355ad5c5 100644 --- a/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/FileDescriptorResolver.kt +++ b/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/FileDescriptorResolver.kt @@ -78,14 +78,11 @@ private constructor( return FileDescriptorInfo(type, properties) } - private fun descriptorLines() = - fileDescriptorParts() - .map { arrayParts -> - arrayParts - .map { CodeBlock.of("\"%L\"", it) } - .joinToCode(" +\n") - } - .joinToCode(",\n") + private fun descriptorLines(): CodeBlock { + val sb = StringBuilder() + fileDescriptorParts().forEach(sb::append) + return CodeBlock.of("\"%L\"", sb.toString().bindSpaces()) + } private fun fileDescriptorParts() = encodeFileDescriptor( diff --git a/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/MessageGenerator.kt b/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/MessageGenerator.kt index 625319cc7..7a89412fe 100644 --- a/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/MessageGenerator.kt +++ b/protokt-codegen/src/main/kotlin/protokt/v1/codegen/generate/MessageGenerator.kt @@ -207,7 +207,11 @@ private class MessageGenerator( } else { buildCodeBlock { add("return \"%L(\" +\n", msg.className.simpleName) - toStringLines(properties).forEach(::add) + if (properties.size < 100) { + toStringLines(properties).forEach(::add) + } else { + add(toStringLine(properties)) + } add(unknownFieldsToString(prefix = ", ")) } } @@ -226,6 +230,12 @@ private class MessageGenerator( prop.name ) } + + private fun toStringLine(properties: List): CodeBlock { + val string = "\"" + properties.joinToString(", ") { "%N=\$%N" } + "\" +\n" + val names = properties.flatMap { listOf(it, it) } + return CodeBlock.of(string.bindSpaces(), *names.map { it.name }.toTypedArray()) + } } fun formatDoc(lines: List) = diff --git a/testing/interop/src/main/proto/protokt/v1/testing/very_large.proto b/testing/interop/src/main/proto/protokt/v1/testing/very_large.proto new file mode 100644 index 000000000..2e967c519 --- /dev/null +++ b/testing/interop/src/main/proto/protokt/v1/testing/very_large.proto @@ -0,0 +1,624 @@ +/* + * Copyright (c) 2024 Toast, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +package protokt.v1.testing; + +option java_package = "com.toasttab.protokt.v1.testing"; + +message VeryLarge { + string val1 = 1; + string val2 = 2; + string val3 = 3; + string val4 = 4; + string val5 = 5; + string val6 = 6; + string val7 = 7; + string val8 = 8; + string val9 = 9; + string val10 = 10; + string val11 = 11; + string val12 = 12; + string val13 = 13; + string val14 = 14; + string val15 = 15; + string val16 = 16; + string val17 = 17; + string val18 = 18; + string val19 = 19; + string val20 = 20; + string val21 = 21; + string val22 = 22; + string val23 = 23; + string val24 = 24; + string val25 = 25; + string val26 = 26; + string val27 = 27; + string val28 = 28; + string val29 = 29; + string val30 = 30; + string val31 = 31; + string val32 = 32; + string val33 = 33; + string val34 = 34; + string val35 = 35; + string val36 = 36; + string val37 = 37; + string val38 = 38; + string val39 = 39; + string val40 = 40; + string val41 = 41; + string val42 = 42; + string val43 = 43; + string val44 = 44; + string val45 = 45; + string val46 = 46; + string val47 = 47; + string val48 = 48; + string val49 = 49; + string val50 = 50; + string val51 = 51; + string val52 = 52; + string val53 = 53; + string val54 = 54; + string val55 = 55; + string val56 = 56; + string val57 = 57; + string val58 = 58; + string val59 = 59; + string val60 = 60; + string val61 = 61; + string val62 = 62; + string val63 = 63; + string val64 = 64; + string val65 = 65; + string val66 = 66; + string val67 = 67; + string val68 = 68; + string val69 = 69; + string val70 = 70; + string val71 = 71; + string val72 = 72; + string val73 = 73; + string val74 = 74; + string val75 = 75; + string val76 = 76; + string val77 = 77; + string val78 = 78; + string val79 = 79; + string val80 = 80; + string val81 = 81; + string val82 = 82; + string val83 = 83; + string val84 = 84; + string val85 = 85; + string val86 = 86; + string val87 = 87; + string val88 = 88; + string val89 = 89; + string val90 = 90; + string val91 = 91; + string val92 = 92; + string val93 = 93; + string val94 = 94; + string val95 = 95; + string val96 = 96; + string val97 = 97; + string val98 = 98; + string val99 = 99; + string val100 = 100; + string val101 = 101; + string val102 = 102; + string val103 = 103; + string val104 = 104; + string val105 = 105; + string val106 = 106; + string val107 = 107; + string val108 = 108; + string val109 = 109; + string val110 = 110; + string val111 = 111; + string val112 = 112; + string val113 = 113; + string val114 = 114; + string val115 = 115; + string val116 = 116; + string val117 = 117; + string val118 = 118; + string val119 = 119; + string val120 = 120; + string val121 = 121; + string val122 = 122; + string val123 = 123; + string val124 = 124; + string val125 = 125; + string val126 = 126; + string val127 = 127; + string val128 = 128; + string val129 = 129; + string val130 = 130; + string val131 = 131; + string val132 = 132; + string val133 = 133; + string val134 = 134; + string val135 = 135; + string val136 = 136; + string val137 = 137; + string val138 = 138; + string val139 = 139; + string val140 = 140; + string val141 = 141; + string val142 = 142; + string val143 = 143; + string val144 = 144; + string val145 = 145; + string val146 = 146; + string val147 = 147; + string val148 = 148; + string val149 = 149; + string val150 = 150; + string val151 = 151; + string val152 = 152; + string val153 = 153; + string val154 = 154; + string val155 = 155; + string val156 = 156; + string val157 = 157; + string val158 = 158; + string val159 = 159; + string val160 = 160; + string val161 = 161; + string val162 = 162; + string val163 = 163; + string val164 = 164; + string val165 = 165; + string val166 = 166; + string val167 = 167; + string val168 = 168; + string val169 = 169; + string val170 = 170; + string val171 = 171; + string val172 = 172; + string val173 = 173; + string val174 = 174; + string val175 = 175; + string val176 = 176; + string val177 = 177; + string val178 = 178; + string val179 = 179; + string val180 = 180; + string val181 = 181; + string val182 = 182; + string val183 = 183; + string val184 = 184; + string val185 = 185; + string val186 = 186; + string val187 = 187; + string val188 = 188; + string val189 = 189; + string val190 = 190; + string val191 = 191; + string val192 = 192; + string val193 = 193; + string val194 = 194; + string val195 = 195; + string val196 = 196; + string val197 = 197; + string val198 = 198; + string val199 = 199; + string val200 = 200; + string val201 = 201; + string val202 = 202; + string val203 = 203; + string val204 = 204; + string val205 = 205; + string val206 = 206; + string val207 = 207; + string val208 = 208; + string val209 = 209; + string val210 = 210; + string val211 = 211; + string val212 = 212; + string val213 = 213; + string val214 = 214; + string val215 = 215; + string val216 = 216; + string val217 = 217; + string val218 = 218; + string val219 = 219; + string val220 = 220; + string val221 = 221; + string val222 = 222; + string val223 = 223; + string val224 = 224; + string val225 = 225; + string val226 = 226; + string val227 = 227; + string val228 = 228; + string val229 = 229; + string val230 = 230; + string val231 = 231; + string val232 = 232; + string val233 = 233; + string val234 = 234; + string val235 = 235; + string val236 = 236; + string val237 = 237; + string val238 = 238; + string val239 = 239; + string val240 = 240; + string val241 = 241; + string val242 = 242; + string val243 = 243; + string val244 = 244; + string val245 = 245; + string val246 = 246; + string val247 = 247; + string val248 = 248; + string val249 = 249; + string val250 = 250; + string val251 = 251; + string val252 = 252; + string val253 = 253; + string val254 = 254; + string val255 = 255; + string val256 = 256; + string val257 = 257; + string val258 = 258; + string val259 = 259; + string val260 = 260; + string val261 = 261; + string val262 = 262; + string val263 = 263; + string val264 = 264; + string val265 = 265; + string val266 = 266; + string val267 = 267; + string val268 = 268; + string val269 = 269; + string val270 = 270; + string val271 = 271; + string val272 = 272; + string val273 = 273; + string val274 = 274; + string val275 = 275; + string val276 = 276; + string val277 = 277; + string val278 = 278; + string val279 = 279; + string val280 = 280; + string val281 = 281; + string val282 = 282; + string val283 = 283; + string val284 = 284; + string val285 = 285; + string val286 = 286; + string val287 = 287; + string val288 = 288; + string val289 = 289; + string val290 = 290; + string val291 = 291; + string val292 = 292; + string val293 = 293; + string val294 = 294; + string val295 = 295; + string val296 = 296; + string val297 = 297; + string val298 = 298; + string val299 = 299; + string val300 = 300; + string val301 = 301; + string val302 = 302; + string val303 = 303; + string val304 = 304; + string val305 = 305; + string val306 = 306; + string val307 = 307; + string val308 = 308; + string val309 = 309; + string val310 = 310; + string val311 = 311; + string val312 = 312; + string val313 = 313; + string val314 = 314; + string val315 = 315; + string val316 = 316; + string val317 = 317; + string val318 = 318; + string val319 = 319; + string val320 = 320; + string val321 = 321; + string val322 = 322; + string val323 = 323; + string val324 = 324; + string val325 = 325; + string val326 = 326; + string val327 = 327; + string val328 = 328; + string val329 = 329; + string val330 = 330; + string val331 = 331; + string val332 = 332; + string val333 = 333; + string val334 = 334; + string val335 = 335; + string val336 = 336; + string val337 = 337; + string val338 = 338; + string val339 = 339; + string val340 = 340; + string val341 = 341; + string val342 = 342; + string val343 = 343; + string val344 = 344; + string val345 = 345; + string val346 = 346; + string val347 = 347; + string val348 = 348; + string val349 = 349; + string val350 = 350; + string val351 = 351; + string val352 = 352; + string val353 = 353; + string val354 = 354; + string val355 = 355; + string val356 = 356; + string val357 = 357; + string val358 = 358; + string val359 = 359; + string val360 = 360; + string val361 = 361; + string val362 = 362; + string val363 = 363; + string val364 = 364; + string val365 = 365; + string val366 = 366; + string val367 = 367; + string val368 = 368; + string val369 = 369; + string val370 = 370; + string val371 = 371; + string val372 = 372; + string val373 = 373; + string val374 = 374; + string val375 = 375; + string val376 = 376; + string val377 = 377; + string val378 = 378; + string val379 = 379; + string val380 = 380; + string val381 = 381; + string val382 = 382; + string val383 = 383; + string val384 = 384; + string val385 = 385; + string val386 = 386; + string val387 = 387; + string val388 = 388; + string val389 = 389; + string val390 = 390; + string val391 = 391; + string val392 = 392; + string val393 = 393; + string val394 = 394; + string val395 = 395; + string val396 = 396; + string val397 = 397; + string val398 = 398; + string val399 = 399; + string val400 = 400; + string val401 = 401; + string val402 = 402; + string val403 = 403; + string val404 = 404; + string val405 = 405; + string val406 = 406; + string val407 = 407; + string val408 = 408; + string val409 = 409; + string val410 = 410; + string val411 = 411; + string val412 = 412; + string val413 = 413; + string val414 = 414; + string val415 = 415; + string val416 = 416; + string val417 = 417; + string val418 = 418; + string val419 = 419; + string val420 = 420; + string val421 = 421; + string val422 = 422; + string val423 = 423; + string val424 = 424; + string val425 = 425; + string val426 = 426; + string val427 = 427; + string val428 = 428; + string val429 = 429; + string val430 = 430; + string val431 = 431; + string val432 = 432; + string val433 = 433; + string val434 = 434; + string val435 = 435; + string val436 = 436; + string val437 = 437; + string val438 = 438; + string val439 = 439; + string val440 = 440; + string val441 = 441; + string val442 = 442; + string val443 = 443; + string val444 = 444; + string val445 = 445; + string val446 = 446; + string val447 = 447; + string val448 = 448; + string val449 = 449; + string val450 = 450; + string val451 = 451; + string val452 = 452; + string val453 = 453; + string val454 = 454; + string val455 = 455; + string val456 = 456; + string val457 = 457; + string val458 = 458; + string val459 = 459; + string val460 = 460; + string val461 = 461; + string val462 = 462; + string val463 = 463; + string val464 = 464; + string val465 = 465; + string val466 = 466; + string val467 = 467; + string val468 = 468; + string val469 = 469; + string val470 = 470; + string val471 = 471; + string val472 = 472; + string val473 = 473; + string val474 = 474; + string val475 = 475; + string val476 = 476; + string val477 = 477; + string val478 = 478; + string val479 = 479; + string val480 = 480; + string val481 = 481; + string val482 = 482; + string val483 = 483; + string val484 = 484; + string val485 = 485; + string val486 = 486; + string val487 = 487; + string val488 = 488; + string val489 = 489; + string val490 = 490; + string val491 = 491; + string val492 = 492; + string val493 = 493; + string val494 = 494; + string val495 = 495; + string val496 = 496; + string val497 = 497; + string val498 = 498; + string val499 = 499; + string val500 = 500; + string val501 = 501; + string val502 = 502; + string val503 = 503; + string val504 = 504; + string val505 = 505; + string val506 = 506; + string val507 = 507; + string val508 = 508; + string val509 = 509; + string val510 = 510; + string val511 = 511; + string val512 = 512; + string val513 = 513; + string val514 = 514; + string val515 = 515; + string val516 = 516; + string val517 = 517; + string val518 = 518; + string val519 = 519; + string val520 = 520; + string val521 = 521; + string val522 = 522; + string val523 = 523; + string val524 = 524; + string val525 = 525; + string val526 = 526; + string val527 = 527; + string val528 = 528; + string val529 = 529; + string val530 = 530; + string val531 = 531; + string val532 = 532; + string val533 = 533; + string val534 = 534; + string val535 = 535; + string val536 = 536; + string val537 = 537; + string val538 = 538; + string val539 = 539; + string val540 = 540; + string val541 = 541; + string val542 = 542; + string val543 = 543; + string val544 = 544; + string val545 = 545; + string val546 = 546; + string val547 = 547; + string val548 = 548; + string val549 = 549; + string val550 = 550; + string val551 = 551; + string val552 = 552; + string val553 = 553; + string val554 = 554; + string val555 = 555; + string val556 = 556; + string val557 = 557; + string val558 = 558; + string val559 = 559; + string val560 = 560; + string val561 = 561; + string val562 = 562; + string val563 = 563; + string val564 = 564; + string val565 = 565; + string val566 = 566; + string val567 = 567; + string val568 = 568; + string val569 = 569; + string val570 = 570; + string val571 = 571; + string val572 = 572; + string val573 = 573; + string val574 = 574; + string val575 = 575; + string val576 = 576; + string val577 = 577; + string val578 = 578; + string val579 = 579; + string val580 = 580; + string val581 = 581; + string val582 = 582; + string val583 = 583; + string val584 = 584; + string val585 = 585; + string val586 = 586; + string val587 = 587; + string val588 = 588; + string val589 = 589; + string val590 = 590; + string val591 = 591; + string val592 = 592; + string val593 = 593; + string val594 = 594; + string val595 = 595; + string val596 = 596; + string val597 = 597; + string val598 = 598; + string val599 = 599; + string val600 = 600; +} +