2016-11-20 2 views
5

私はJavaで書かれた注釈プロセッサを使っています。私はコードのいくつかの行を生成するためにJavaPoetを使用しています。私は 'スイッチ'ステートメントを生成する必要があります。JavaPoetによるswitch文の生成

switch(eventType) { 
    case XMLEvent.START_ELEMENT: 
    break; 
    case XMLEvent.END_ELEMENT: 
    break; 
    case XMLEvent.CDATA: 
    case XMLEvent.CHARACTERS: 
    break; 
    default: 
    break; 
} 

それはjavapoetでswitch文を生成するための唯一の方法であるかbeginControlFlowを使用してより良い方法は、(そこにある次のコードを生成するために

MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder("parseOnXml") 
    .addAnnotation(Override.class) 
    .addModifiers(Modifier.PUBLIC) 
    .addParameter(typeName(XmlBinderContext.class), "context") 
    .addParameter(typeName(XmlWrapperParser.class), "wrapper") 
    .addParameter(typeName(Integer.TYPE), "currentEventType") 
    .addJavadoc("create new object instance\n") 
    .returns(typeName(item.getElement())); 

... 

methodBuilder.beginControlFlow("switch(eventType)"); 
methodBuilder.addCode("case $T.START_ELEMENT:\n", XMLEvent.class); 
methodBuilder.addStatement("break"); 
methodBuilder.addCode("case $T.END_ELEMENT:\n", XMLEvent.class); 
methodBuilder.addStatement("break"); 
methodBuilder.addCode("case $T.CDATA:\n", XMLEvent.class); 
methodBuilder.addCode("case $T.CHARACTERS:\n", XMLEvent.class); 
methodBuilder.addStatement("break"); 
methodBuilder.addCode("default:\n"); 
methodBuilder.addStatement("break"); 
methodBuilder.endControlFlow(); 

:今、私は次のコードを使用しています)同じコードを生成するには?

答えて

4

JavaPoetにはswitch文があまりないので、あなたが持っているものはおそらくあなたができることです。必要に応じて、$>$<を使用して、インデントを調整することができます。