
io.protostuff.compiler.parser.ProtoWalker Maven / Gradle / Ivy
package io.protostuff.compiler.parser;
import java.util.ArrayList;
import java.util.List;
import io.protostuff.compiler.model.Message;
import io.protostuff.compiler.model.Proto;
import io.protostuff.compiler.model.UserTypeContainer;
/**
* @author Kostiantyn Shchepanovskyi
*/
public class ProtoWalker {
private final ProtoContext context;
private final Proto proto;
private final List> protoProcessors = new ArrayList<>();
private final List> messageProcessors = new ArrayList<>();
public ProtoWalker(ProtoContext protoContext) {
this.context = protoContext;
this.proto = protoContext.getProto();
}
public static ProtoWalker newInstance(ProtoContext proto) {
return new ProtoWalker(proto);
}
public ProtoWalker onProto(Processor processor) {
protoProcessors.add(processor);
return this;
}
public ProtoWalker onMessage(Processor processor) {
messageProcessors.add(processor);
return this;
}
public void walk() {
for (Processor protoProcessor : protoProcessors) {
protoProcessor.run(context, proto);
}
walk(proto);
}
private void walk(UserTypeContainer container) {
for (Processor messageProcessor : messageProcessors) {
List messages = container.getMessages();
for (Message message : messages) {
messageProcessor.run(context, message);
}
}
}
public interface Processor {
void run(ProtoContext context, T t);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy