in model/src/main/java/jetbrains/jetpad/model/transform/BaseTransformer.java [20:59]
public <ParameterTargetT> Transformer<SourceT, ParameterTargetT> andThen(
final Transformer<TargetT, ParameterTargetT> transformer) {
final Transformer<SourceT, TargetT> firstTransformer = this;
return new BaseTransformer<SourceT, ParameterTargetT>() {
@Override
public Transformation<SourceT, ParameterTargetT> transform(SourceT source) {
Transformation<SourceT, TargetT> tn1 = firstTransformer.transform(source);
Transformation<TargetT, ParameterTargetT> tn2 = transformer.transform(tn1.getTarget());
return createTransformation(tn1, tn2);
}
@Override
public Transformation<SourceT, ParameterTargetT> transform(SourceT source, ParameterTargetT to) {
Transformation<SourceT, TargetT> tn1 = firstTransformer.transform(source);
Transformation<TargetT, ParameterTargetT> tn2 = transformer.transform(tn1.getTarget(), to);
return createTransformation(tn1, tn2);
}
private Transformation<SourceT, ParameterTargetT> createTransformation(
final Transformation<SourceT, TargetT> tn1, final Transformation<TargetT, ParameterTargetT> tn2) {
return new Transformation<SourceT, ParameterTargetT>() {
@Override
public SourceT getSource() {
return tn1.getSource();
}
@Override
public ParameterTargetT getTarget() {
return tn2.getTarget();
}
@Override
protected void doDispose() {
tn1.dispose();
tn2.dispose();
}
};
}
};
}