// ino.module.Interface.8582.package package mycompiler.myinterface; // ino.end // ino.module.Interface.8582.import import java.util.Vector; import mycompiler.AClassOrInterface; import mycompiler.mybytecode.ClassFile; import mycompiler.myclass.ClassHelper; import mycompiler.myclass.Constant; import mycompiler.myclass.FormalParameter; import mycompiler.myclass.Method; import mycompiler.myclass.ParameterList; import mycompiler.myexception.JVMCodeException; import mycompiler.mymodifier.Modifiers; import mycompiler.mytype.GenericTypeVar; import mycompiler.mytype.RefType; import mycompiler.mytype.Type; import mycompiler.mytypereconstruction.CIntersectionType; import mycompiler.mytypereconstruction.CTypeReconstructionResult; import mycompiler.mytypereconstruction.set.CTypeAssumptionSet; import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption; import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption; import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption; import mycompiler.SourceFile; // ino.end // ino.class.Interface.23932.description type=javadoc /** * Die Klasse stellt die Definition eines Interfaces dar. * @author SCJU * */ // ino.end // ino.class.Interface.23932.declaration public class Interface extends AClassOrInterface // ino.end // ino.class.Interface.23932.body { // ino.attribute.ib.23936.declaration private InterfaceBody ib; // ino.end // ino.attribute.paralist.23939.decldescription type=line // HOTI 29. Apr 06 // ino.end // ino.attribute.paralist.23939.declaration private Vector paralist = new Vector(); // Parameterliste 'interface xy{}' wird gespeichert // ino.end // ino.attribute.containedTypes.23942.declaration private Vector containedTypes; // ino.end // ino.method.Interface.23945.defdescription type=line // Konstruktoren // ino.end // ino.method.Interface.23945.definition public Interface() // ino.end // ino.method.Interface.23945.body { super(); } // ino.end // ino.method.Interface.23948.definition public Interface(String name) // ino.end // ino.method.Interface.23948.body { super(name); } // ino.end // ino.method.Interface.23951.definition public Interface(String name, Modifiers mod) // ino.end // ino.method.Interface.23951.body { super(name, mod); } // ino.end // ino.method.getParaList.23954.defdescription type=block /*public Vector complete_paralist(boolean ext) { Diese Funktion vervollt�ndigt die Parameterliste f�r vererbte Klassen Vector child = paralist; paralist = (Vector)superclassid.get_ParaList(); for(Enumeration e = child.elements();e.hasMoreElements();){ paralist.addElement(e.nextElement()); } return this.paralist; }*/ // ino.end // ino.method.getParaList.23954.definition public Vector getParaList() // ino.end // ino.method.getParaList.23954.body { return this.paralist; } // ino.end // ino.method.setParaList.23957.definition public void setParaList(Vector paralist) // ino.end // ino.method.setParaList.23957.body { this.paralist=paralist; } // ino.end // ino.method.setContainedTypes.23960.definition public void setContainedTypes(Vector containedTypes) // ino.end // ino.method.setContainedTypes.23960.body { this.containedTypes = containedTypes; } // ino.end // ino.method.getContainedTypes.23963.definition public Vector getContainedTypes() // ino.end // ino.method.getContainedTypes.23963.body { return containedTypes; } // ino.end // ino.method.codegen.23966.definition public void codegen(SourceFile sf) throws JVMCodeException // ino.end // ino.method.codegen.23966.body { codegenlog.info("Definierte Superinterfaces: " + getSuperInterfaces().size()); codegenlog.debug("Liste der Interfaces: " + getSuperInterfaces().toString()); codegenlog.info("Definierte Konstanten: " + ib.getConstantVektor().size()); codegenlog.info("Definierte Methoden: " + ib.getMethodVektor().size()); // Erzeugen einer Classfile auf Basis des Interfaces ClassFile classfile = new ClassFile(this, sf); // Handling fuer Generics classfile.addGenerics(paralist, null, getSuperInterfaces()); // Handling fuer Superinterfaces classfile.addSuperInterfaces(getSuperInterfaces()); // Codegen fuer Interface-Body Vector paralist = new Vector(); if(ib != null) ib.codegen(classfile, paralist); classfile.codegen(); codegenlog.info("Compilierung erfolgreich abgeschlossen, "+ getName() + ".class erstellt."); } // ino.end // ino.method.getInterfaceBody.23969.definition public InterfaceBody getInterfaceBody() // ino.end // ino.method.getInterfaceBody.23969.body { return ib; } // ino.end // ino.method.setInterfaceBody.23972.definition public void setInterfaceBody(InterfaceBody ib) // ino.end // ino.method.setInterfaceBody.23972.body { this.ib = ib; } // ino.end // ino.method.addThisToAssumptions.23975.definition public void addThisToAssumptions(CTypeReconstructionResult assumption) // ino.end // ino.method.addThisToAssumptions.23975.body { assumption.addClassName(getName()); InterfaceBody body = getInterfaceBody(); if(body!=null){ Vector genericsList = new Vector(); if(getParaList()!=null){ for(int ii =0; ii()); // Typannahme bauen... assumption.addFieldOrLocalVarAssumption(assum); } } CTypeAssumptionSet V_fields_methods = new CTypeAssumptionSet(); // Methoden in V_fields_methods laden if(body.getMethodVektor()!=null){ Vector methodAssumptions=new Vector(); for(int mID=0;mID(),method.getGenericMethodParameters()); // Typannahme bauen... V_fields_methods.addElement(methodAssum); method.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID()); // Parameter hinzufuegen ParameterList parameterList = method.getParameterList(); if(parameterList!=null){ for(int i=0; i()); // FIXME HOTI Mit Thomas abklären, was hier getan werden muss! //Class.addOffsetsToAssumption(paraAssum,method.get_Block(),paraAssum.getIdentifier(),true); methodAssum.addParaAssumption(paraAssum); } } methodAssumptions.add(methodAssum); } // Aus den V_fields_methods die Methoden in die BasicAssumption legen for(int i=0;i methods=ib.MethodVektor; // Alle Methoden durchgehen for(int i=0;i