package org.glassfish.pfl.dynamic.codegen.impl;
import java.util.Map ;
import java.util.LinkedHashMap ;
import org.glassfish.pfl.dynamic.codegen.spi.Type ;
import org.glassfish.pfl.dynamic.codegen.spi.Variable ;
import org.glassfish.pfl.dynamic.codegen.impl.StatementBase ;
import org.glassfish.pfl.basic.contain.Pair;
public final class TryStatement extends StatementBase {
private BlockStatement bodyPart ;
private BlockStatement finalPart ;
private Map<Type,Pair<Variable,BlockStatement>> catches ;
TryStatement( Node parent ) {
super( parent ) ;
bodyPart = new BlockStatement( this ) ;
finalPart = new BlockStatement( this ) ;
catches = new LinkedHashMap<Type,Pair<Variable,BlockStatement>>() ;
}
public BlockStatement bodyPart() {
return this.bodyPart ;
}
public BlockStatement finalPart() {
return this.finalPart ;
}
public Map<Type,Pair<Variable,BlockStatement>> catches() {
return this.catches ;
}
public Pair<Variable,BlockStatement> addCatch( Type type, String ident ) {
if (type.isPrimitive())
throw new IllegalArgumentException( "Primitive type " + type +
" not allowed in catch block" ) ;
if (type.isArray())
throw new IllegalArgumentException( "Array type " + type +
" not allowed in catch block" ) ;
if (catches.containsKey( type ))
throw new IllegalArgumentException( "Type " + type +
" is already used as a catch block in this try statement" ) ;
BlockStatement stmt = new BlockStatement( this ) ;
Variable var = stmt.exprFactory().variable( type, ident ) ;
Pair<Variable,BlockStatement> result = new Pair<Variable,BlockStatement>(
var, stmt ) ;
catches.put( type, result ) ;
return result ;
}
public void accept( Visitor visitor ) {
visitor.visitTryStatement( this ) ;
}
}