void (final PsiBuilder builder) { PsiBuilder.Marker recordStructure = builder.mark(); boolean hasLparen = expect(builder, JavaTokenType.LPARENTH); assert hasLparen; boolean isFirst = true; while (builder.getTokenType() != JavaTokenType.RPARENTH) { if (!isFirst) { expectOrError(builder, JavaTokenType.COMMA, "expected.comma"); } if (builder.getTokenType() == null) { break; } if (isPattern(builder)) { parsePattern(builder, true); isFirst = false; } else if (parseUnnamedPattern(builder)) { isFirst = false; } else { int flags = BasicReferenceParser.EAT_LAST_DOT | BasicReferenceParser.WILDCARD | BasicReferenceParser.VAR_TYPE; myParser.getReferenceParser().parseType(builder, flags); error(builder, JavaPsiBundle.message("expected.pattern")); if (builder.getTokenType() == JavaTokenType.RPARENTH) { break; } builder.advanceLexer(); } } if (!expect(builder, JavaTokenType.RPARENTH)) { builder.error(JavaPsiBundle.message("expected.rparen")); } recordStructure.done(myJavaElementTypeContainer.DECONSTRUCTION_LIST); }