private static MethodSpec matcherFieldSetterBuilder(SpecModel specModel, PropModel prop) { final String propMatcherName = getPropMatcherName(prop); final String propName = prop.getName(); return getMethodSpecBuilder( specModel, ImmutableList.of(ParameterSpec.builder(getPropMatcherType(prop), "matcher").build()), CodeBlock.builder() .addStatement( "$L = ($L) matcher", propMatcherName, getPropMatcherType(prop).toString()) .build(), propName) .build(); }
Stream<MethodSpec.Builder> partialMatchMethodBuilder(AlgebraicDataType adt, List<DataConstructor> previousConstructors, int nbSkipConstructors, DataConstructor currentConstructor, ParameterizedTypeName returnType) { ParameterizedTypeName otherwiseMatcherTypeName = OtherwiseMatchingStepDerivator.otherwiseMatcherTypeName(adt); String args = (matchingKind == PatternMatchingDerivator.MatchingKind.CaseOf ? (previousConstructors.isEmpty() ? "this." : "((" + otherwiseMatcherTypeName.toString() + ") this).") + PatternMatchingDerivator.asFieldSpec(adt).name + ", " : "") + Stream.concat( Stream.concat( previousConstructors.stream() .map(dc -> "((" + otherwiseMatcherTypeName + ") this)." + MapperDerivator.mapperFieldName(dc)), IntStream.range(0, nbSkipConstructors).mapToObj(__ -> "null")), Stream.of(MapperDerivator.mapperFieldName(currentConstructor))).reduce((s1, s2) -> s1 + ", " + s2).orElse( ""); return Stream.of( MethodSpec.methodBuilder(currentConstructor.name()) .addModifiers(Modifier.PUBLIC, Modifier.FINAL) .returns(returnType) .addParameter(mapperDerivator.mapperTypeName(adt, currentConstructor), MapperDerivator.mapperFieldName(currentConstructor)) .addStatement("return new $L<>($L)", returnType.rawType.simpleName(), args), PatternMatchingDerivator.constantMatchMethodBuilder(adt, currentConstructor).returns(returnType)); }
Stream<MethodSpec.Builder> partialMatchMethodBuilder(AlgebraicDataType adt, List<DataConstructor> previousConstructors, int nbSkipConstructors, DataConstructor currentConstructor, ParameterizedTypeName returnType) { ParameterizedTypeName otherwiseMatcherTypeName = OtherwiseMatchingStepDerivator.otherwiseMatcherTypeName(adt); String args = (matchingKind == PatternMatchingDerivator.MatchingKind.CaseOf ? (previousConstructors.isEmpty() ? "this." : "((" + otherwiseMatcherTypeName.toString() + ") this).") + PatternMatchingDerivator.asFieldSpec(adt).name + ", " : "") + Stream.concat( Stream.concat( previousConstructors.stream() .map(dc -> "((" + otherwiseMatcherTypeName + ") this)." + MapperDerivator.mapperFieldName(dc)), IntStream.range(0, nbSkipConstructors).mapToObj(__ -> "null")), Stream.of(MapperDerivator.mapperFieldName(currentConstructor))).reduce((s1, s2) -> s1 + ", " + s2).orElse( ""); return Stream.of( MethodSpec.methodBuilder(currentConstructor.name()) .addModifiers(Modifier.PUBLIC, Modifier.FINAL) .returns(returnType) .addParameter(mapperDerivator.mapperTypeName(adt, currentConstructor), MapperDerivator.mapperFieldName(currentConstructor)) .addStatement("return new $L<>($L)", returnType.rawType.simpleName(), args), PatternMatchingDerivator.constantMatchMethodBuilder(adt, currentConstructor).returns(returnType)); }
public static void main(String[] args){ //generateSharedProperties(); //generateSharedProperties2(); // testGenerateProxy(); testToStringBuilder(); //com.heaven.TestOutter.TestInner /* ClassName className = ClassName.get("com.heaven","TestOutter.TestInner"); System.out.println(className.toString());*/ final ParameterizedTypeName name = ParameterizedTypeName.get( ClassName.get("xx", "heaven7"), ClassName.get("","T") ); System.out.println(name.toString()); }
public static void main(String[] args){ //generateSharedProperties(); //generateSharedProperties2(); // testGenerateProxy(); testToStringBuilder(); //com.heaven.TestOutter.TestInner /* ClassName className = ClassName.get("com.heaven","TestOutter.TestInner"); System.out.println(className.toString());*/ final ParameterizedTypeName name = ParameterizedTypeName.get( ClassName.get("xx", "heaven7"), ClassName.get("","T") ); System.out.println(name.toString()); }
"packageToIndexMap", Modifier.FINAL, Modifier.PRIVATE).initializer("new " + hashMapOfStringToInteger.toString() + "( " + generatedStagFactoryWrappers.size() + ")"); adapterFactoryBuilder.addField(packageToIndexMapField.build());
? (previousConstructors.isEmpty() ? "this." : "((" + otherwiseMatcherTypeName.toString() + ") this).") + adtFieldSpec.name + ", " : "") .concat( previousConstructors.stream() .map(dc -> "((" + otherwiseMatcherTypeName.toString() + ") this)." + MapperDerivator.mapperFieldName(dc)), Stream.of(MapperDerivator.mapperFieldName(currentConstructor)))
? (previousConstructors.isEmpty() ? "this." : "((" + otherwiseMatcherTypeName.toString() + ") this).") + adtFieldSpec.name + ", " : "") .concat( previousConstructors.stream() .map(dc -> "((" + otherwiseMatcherTypeName.toString() + ") this)." + MapperDerivator.mapperFieldName(dc)), Stream.of(MapperDerivator.mapperFieldName(currentConstructor)))
private CodeBlock vistorDispatchImpl(AlgebraicDataType adt, DeclaredType visitorType, VariableElement visitorParam, List<DataConstructor> previousConstructors, DataConstructor currentConstructor) { String visitorVarName = visitorParam.getSimpleName().toString(); String adtLambdaParam = uncapitalize(adt.typeConstructor().declaredType().asElement().getSimpleName()); NameAllocator nameAllocator = new NameAllocator(); nameAllocator.newName(MapperDerivator.mapperFieldName(currentConstructor), "case arg"); nameAllocator.newName(adtLambdaParam, "adt var"); nameAllocator.newName(visitorVarName, "visitor var"); ParameterizedTypeName otherwiseMatcherTypeName = OtherwiseMatchingStepDerivator.otherwiseMatcherTypeName(adt); CodeBlock.Builder implBuilder = CodeBlock.builder() .addStatement("$T $L = $T.$L($L)", TypeName.get(visitorType), nameAllocator.get("visitor var"), adt.deriveConfig().targetClass().className(), MapperDerivator.visitorLambdaFactoryName(adt), joinStringsAsArguments(Stream.concat( previousConstructors.stream() .map(dc -> "((" + otherwiseMatcherTypeName.toString() + ") this)." + MapperDerivator.mapperFieldName(dc)), Stream.of(MapperDerivator.mapperFieldName(currentConstructor))))); if (matchingKind == PatternMatchingDerivator.MatchingKind.Cases) { implBuilder.addStatement("return $1L -> $1L.$2L($3L)", nameAllocator.get("adt var"), adt.matchMethod().element().getSimpleName(), nameAllocator.get("visitor var")); } else { implBuilder.addStatement( "return ((" + OtherwiseMatchingStepDerivator.otherwiseMatcherTypeName(adt).toString() + ") this).$1N.$2L($3L)", PatternMatchingDerivator .asFieldSpec(adt), adt.matchMethod().element().getSimpleName(), nameAllocator.get("visitor var")); } return implBuilder.build(); }
private CodeBlock vistorDispatchImpl(AlgebraicDataType adt, DeclaredType visitorType, VariableElement visitorParam, List<DataConstructor> previousConstructors, DataConstructor currentConstructor) { String visitorVarName = visitorParam.getSimpleName().toString(); String adtLambdaParam = uncapitalize(adt.typeConstructor().declaredType().asElement().getSimpleName()); NameAllocator nameAllocator = new NameAllocator(); nameAllocator.newName(MapperDerivator.mapperFieldName(currentConstructor), "case arg"); nameAllocator.newName(adtLambdaParam, "adt var"); nameAllocator.newName(visitorVarName, "visitor var"); ParameterizedTypeName otherwiseMatcherTypeName = OtherwiseMatchingStepDerivator.otherwiseMatcherTypeName(adt); CodeBlock.Builder implBuilder = CodeBlock.builder() .addStatement("$T $L = $T.$L($L)", TypeName.get(visitorType), nameAllocator.get("visitor var"), adt.deriveConfig().targetClass().className(), MapperDerivator.visitorLambdaFactoryName(adt), joinStringsAsArguments(Stream.concat( previousConstructors.stream() .map(dc -> "((" + otherwiseMatcherTypeName.toString() + ") this)." + MapperDerivator.mapperFieldName(dc)), Stream.of(MapperDerivator.mapperFieldName(currentConstructor))))); if (matchingKind == PatternMatchingDerivator.MatchingKind.Cases) { implBuilder.addStatement("return $1L -> $1L.$2L($3L)", nameAllocator.get("adt var"), adt.matchMethod().element().getSimpleName(), nameAllocator.get("visitor var")); } else { implBuilder.addStatement( "return ((" + OtherwiseMatchingStepDerivator.otherwiseMatcherTypeName(adt).toString() + ") this).$1N.$2L($3L)", PatternMatchingDerivator .asFieldSpec(adt), adt.matchMethod().element().getSimpleName(), nameAllocator.get("visitor var")); } return implBuilder.build(); }
private CodeBlock functionDispatchImpl(AlgebraicDataType adt, List<DataConstructor> previousConstructors, DataConstructor currentConstructor) { CodeBlock.Builder codeBlock = CodeBlock.builder(); NameAllocator nameAllocator = new NameAllocator(); nameAllocator.newName(MapperDerivator.mapperFieldName(currentConstructor), MapperDerivator.mapperFieldName(currentConstructor)); for (DataConstructor dc : previousConstructors) { nameAllocator.newName(MapperDerivator.mapperFieldName(dc), MapperDerivator.mapperFieldName(dc)); codeBlock.addStatement("$1T $2L = super.$2L", mapperDerivator.mapperTypeName(adt, dc), MapperDerivator.mapperFieldName(dc)); } String adtLambdaParam = uncapitalize(adt.typeConstructor().declaredType().asElement().getSimpleName()); nameAllocator.newName(adtLambdaParam, "adt var"); String template; Object templateArg; if (matchingKind == PatternMatchingDerivator.MatchingKind.Cases) { template = "$1L -> $1L"; templateArg = nameAllocator.get("adt var"); } else { template = "((" + OtherwiseMatchingStepDerivator.otherwiseMatcherTypeName(adt).toString() + ") this).$1N"; templateArg = PatternMatchingDerivator.asFieldSpec(adt); } return codeBlock .addStatement("return " + template + ".$2L($3L)", templateArg, adt.matchMethod().element().getSimpleName(), joinStringsAsArguments(Stream.concat(previousConstructors.stream().map(MapperDerivator::mapperFieldName), Stream.of(MapperDerivator.mapperFieldName(currentConstructor))))) .build(); }
private CodeBlock functionDispatchImpl(AlgebraicDataType adt, List<DataConstructor> previousConstructors, DataConstructor currentConstructor) { CodeBlock.Builder codeBlock = CodeBlock.builder(); NameAllocator nameAllocator = new NameAllocator(); nameAllocator.newName(MapperDerivator.mapperFieldName(currentConstructor), MapperDerivator.mapperFieldName(currentConstructor)); for (DataConstructor dc : previousConstructors) { nameAllocator.newName(MapperDerivator.mapperFieldName(dc), MapperDerivator.mapperFieldName(dc)); codeBlock.addStatement("$1T $2L = super.$2L", mapperDerivator.mapperTypeName(adt, dc), MapperDerivator.mapperFieldName(dc)); } String adtLambdaParam = uncapitalize(adt.typeConstructor().declaredType().asElement().getSimpleName()); nameAllocator.newName(adtLambdaParam, "adt var"); String template; Object templateArg; if (matchingKind == PatternMatchingDerivator.MatchingKind.Cases) { template = "$1L -> $1L"; templateArg = nameAllocator.get("adt var"); } else { template = "((" + OtherwiseMatchingStepDerivator.otherwiseMatcherTypeName(adt).toString() + ") this).$1N"; templateArg = PatternMatchingDerivator.asFieldSpec(adt); } return codeBlock .addStatement("return " + template + ".$2L($3L)", templateArg, adt.matchMethod().element().getSimpleName(), joinStringsAsArguments(Stream.concat(previousConstructors.stream().map(MapperDerivator::mapperFieldName), Stream.of(MapperDerivator.mapperFieldName(currentConstructor))))) .build(); }