Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

TryCatch.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.comando;
00002 
00003 import plp.orientadaObjetos1.excecao.comando.TryCatchException;
00004 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00006 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
00007 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00008 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException;
00009 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException;
00010 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException;
00011 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException;
00012 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException;
00013 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00014 import plp.orientadaObjetos1.expressao.valor.Valor;
00015 import plp.orientadaObjetos1.expressao.valor.ValorString;
00016 import plp.orientadaObjetos1.memoria.AmbienteCompilacao;
00017 import plp.orientadaObjetos1.memoria.AmbienteExecucao;
00018 import plp.orientadaObjetos1.util.Tipo;
00019 import plp.orientadaObjetos1.util.TipoPrimitivo;
00020 
00024 public class TryCatch implements Comando{
00025 
00029     private Comando comandoTry;
00030 
00034     private Comando comandoCatch;
00035 
00036     private Id mensagem;
00037     
00041     public TryCatch(Comando comandoTry, Comando comandoCatch, Id id){
00042         this.comandoTry = comandoTry;
00043         this.comandoCatch = comandoCatch;
00044         this.mensagem = id;
00045     }
00046 
00053     public AmbienteExecucao executar(AmbienteExecucao ambiente)
00054         throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00055                ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException,
00056                 ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException,
00057                 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, EntradaInvalidaException, TryCatchException{
00058         
00059         try {
00060             //Criar escopo Try
00061             ambiente.incrementa();
00062             ambiente = comandoTry.executar(ambiente);
00063 
00064         } catch (TryCatchException e) {
00065             
00066             //Destruir escopo try se houver excecao!
00067             ambiente.restaura(); 
00068             
00069             //Criar e destruir escopo do catch
00070             ambiente.incrementa();
00071             ambiente.mapValor(this.mensagem.getId(), new ValorString(e.getMessage()));
00072             ambiente = comandoCatch.executar(ambiente);
00073         }
00074         finally {
00075             ambiente.restaura();            
00076         }
00077         return ambiente;
00078     }
00079 
00087     public boolean checaTipo(AmbienteCompilacao ambiente)
00088         throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00089         ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException,
00090         ClasseNaoDeclaradaException, ClasseJaDeclaradaException {
00091         
00092         boolean validaTry = this.comandoTry.checaTipo( ambiente);
00093         
00094         ambiente.incrementa();
00095         ambiente.mapTipo(this.mensagem.getId(), TipoPrimitivo.TIPO_STRING);
00096         boolean validaCatch = this.comandoCatch.checaTipo( ambiente);
00097         ambiente.restaura();
00098         
00099         return validaTry && validaCatch;                
00100     }
00101 
00102 }

Generated on Mon Aug 8 20:20:46 2005 for Linguagem OO1 - Generics by  doxygen 1.4.4