currentConstructorTotalMatchConstantMethod.returns(returnType);
} else {
DataConstructor firstNextConstructor = nextConstructors.get(0);
ParameterizedTypeName returnType = ParameterizedTypeName.get(
adt.deriveConfig().targetClass().className().nestedClass(totalMatchBuilderClassName(firstNextConstructor)),
<BUG>PatternMatchingDerivator.matcherVariables(adt).map(TypeName::get).toArray(TypeName[]::new));
currentConstructorTotalMatchMethod.returns(returnType)
.addStatement("return new $L<>($L)", totalMatchBuilderClassName(firstNextConstructor),

Stream.concat(previousConstructors.stream().map(dc -> "super." + mapperFieldName(dc)),
Stream.of(mapperFieldName(currentConstructor))).reduce((s1, s2) -> s1 + ", " + s2).orElse(""));</BUG>
currentConstructorTotalMatchConstantMethod.returns(returnType);

currentConstructorTotalMatchConstantMethod.returns(returnType);
} else {
DataConstructor firstNextConstructor = nextConstructors.get(0);
ParameterizedTypeName returnType = ParameterizedTypeName.get(
adt.deriveConfig().targetClass().className().nestedClass(totalMatchBuilderClassName(firstNextConstructor)),
PatternMatchingDerivator.matcherVariables(adt).map(TypeName::get).toArray(TypeName[]::new));
ParameterizedTypeName otherwiseMatcherTypeName = otherwiseMatcherTypeName(adt);
currentConstructorTotalMatchMethod.returns(returnType)
.addStatement("return new $L<>($L)", totalMatchBuilderClassName(firstNextConstructor), Stream.concat(
previousConstructors.stream()
.map(dc -> "((" + otherwiseMatcherTypeName.toString() + ") this)." + mapperFieldName(dc)),
Stream.of(mapperFieldName(currentConstructor))).reduce((s1, s2) -> s1 + ", " + s2).orElse(""));
currentConstructorTotalMatchConstantMethod.returns(returnType);
