00001 package plp.orientadaObjetos1.declaracao.classe;
00002
00003 import plp.orientadaObjetos1.declaracao.procedimento.DecProcedimento;
00004 import plp.orientadaObjetos1.declaracao.variavel.DecVariavel;
00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
00006 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00007 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException;
00008 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException;
00009 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException;
00010 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException;
00011 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00012 import plp.orientadaObjetos1.memoria.AmbienteCompilacao;
00013 import plp.orientadaObjetos1.memoria.AmbienteExecucao;
00014 import plp.orientadaObjetos1.memoria.DefClasseGenerica;
00015 import plp.orientadaObjetos1.util.Tipo;
00016 import plp.orientadaObjetos1.util.TipoClasseGeneric;
00017
00018
00019 public class DecClasseGeneric extends DecClasseSimples {
00020
00021 private Tipo tipoGenerico;
00022
00023 public DecClasseGeneric(Id nomeClasse, DecVariavel atributos, DecProcedimento metodos, Tipo tipoGenerico) {
00024 super(nomeClasse, atributos, metodos);
00025 this.tipoGenerico = tipoGenerico;
00026 }
00027
00033 public AmbienteExecucao elabora(AmbienteExecucao ambiente)
00034 throws ClasseJaDeclaradaException, ClasseNaoDeclaradaException {
00035
00036 ambiente.mapDefClasse( nomeClasse, new DefClasseGenerica(atributos,metodos,tipoGenerico));
00037 return ambiente;
00038 }
00039
00047 public boolean checaTipo(AmbienteCompilacao ambiente)
00048 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00049 ClasseJaDeclaradaException, ClasseNaoDeclaradaException,
00050 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException {
00051
00052
00053 ambiente.mapDefClasse(nomeClasse, new DefClasseGenerica(atributos,metodos,tipoGenerico));
00054 boolean resposta = false;
00055
00056
00057 ambiente.incrementa();
00058 Id idGenerico = this.tipoGenerico.getTipo();
00059 ambiente.mapGeneric(idGenerico, this.tipoGenerico);
00060
00061 if (atributos.checaTipo(ambiente)){
00062 ambiente.mapTipo(new Id("this"), new TipoClasseGeneric(nomeClasse, this.tipoGenerico));
00063 resposta = metodos.checaTipo(ambiente);
00064 }
00065 ambiente.restaura();
00066 return resposta;
00067
00068 }
00069
00070
00071 }