JavaPatternMatching/src/mycompiler/myinterface/Interface.java

270 lines
7.5 KiB
Java
Raw Normal View History

2013-10-18 11:33:46 +00:00
// ino.module.Interface.8582.package
package mycompiler.myinterface;
// ino.end
// ino.module.Interface.8582.import
import java.util.Vector;
2014-02-12 01:12:12 +00:00
2014-09-02 08:33:54 +00:00
import de.dhbwstuttgart.core.AClassOrInterface;
import de.dhbwstuttgart.core.SourceFile;
import de.dhbwstuttgart.syntaxtree.Class;
import de.dhbwstuttgart.syntaxtree.ClassHelper;
import de.dhbwstuttgart.syntaxtree.Constant;
import de.dhbwstuttgart.syntaxtree.FormalParameter;
import de.dhbwstuttgart.syntaxtree.Method;
import de.dhbwstuttgart.syntaxtree.ParameterList;
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
2013-10-18 11:33:46 +00:00
import mycompiler.mybytecode.ClassFile;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mymodifier.Modifiers;
import mycompiler.mytypereconstruction.CIntersectionType;
import mycompiler.mytypereconstruction.set.CTypeAssumptionSet;
import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption;
/**
* Ein Interface ist eine abstrakte Klasse, erbt daher von Class
* @author janulrich
*
*/
public class Interface extends Class {
public Interface(String name, int offset){
super(name, offset);
}
public Interface(String name, Modifiers modifiers, int offset) {
super(name,modifiers, offset);
}
public Vector getParaList() {
// TODO Auto-generated method stub
return null;
}
public void setInterfaceBody(InterfaceBody interfaceBody) {
// TODO Auto-generated method stub
}
public void setParaList(Vector<Type> paraVector) {
// TODO Auto-generated method stub
}
}
2013-10-18 11:33:46 +00:00
// ino.class.Interface.23932.description type=javadoc
/**
* Die Klasse stellt die Definition eines Interfaces dar.
* @author SCJU
*
*/
/*
2013-10-18 11:33:46 +00:00
// ino.end
// ino.class.Interface.23932.declaration
2014-02-12 01:12:12 +00:00
public class Interface implements AClassOrInterface
2013-10-18 11:33:46 +00:00
// 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<Type> paralist = new Vector<Type>(); // Parameterliste 'interface xy<para1, para2,...>{}' wird gespeichert
// ino.end
// ino.attribute.containedTypes.23942.declaration
private Vector<Type> 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
2013-10-18 11:33:46 +00:00
// ino.method.getParaList.23954.definition
public Vector<Type> getParaList()
// ino.end
// ino.method.getParaList.23954.body
{
return this.paralist;
}
// ino.end
// ino.method.setParaList.23957.definition
public void setParaList(Vector<Type> paralist)
// ino.end
// ino.method.setParaList.23957.body
{
this.paralist=paralist;
}
// ino.end
// ino.method.setContainedTypes.23960.definition
public void setContainedTypes(Vector<Type> containedTypes)
// ino.end
// ino.method.setContainedTypes.23960.body
{
this.containedTypes = containedTypes;
}
// ino.end
// ino.method.getContainedTypes.23963.definition
public Vector<Type> 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<Type> paralist = new Vector<Type>();
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.end
// ino.method.isAGenericType.23978.definition
public boolean isAGenericType(RefType type)
// ino.end
// ino.method.isAGenericType.23978.body
{
if(paralist==null)
return false;
for(int i=0;i<paralist.size();i++){
if(paralist.get(i) instanceof GenericTypeVar){
GenericTypeVar gtv=(GenericTypeVar)paralist.get(i);
if(gtv.getName().equals(type.getName())){
return true;
}
}
}
return(false);
}
// ino.end
// ino.method.wandleRefTypeAttributes2GenericAttributes.23981.defdescription type=javadoc
// ino.end
// ino.method.wandleRefTypeAttributes2GenericAttributes.23981.definition
public void wandleRefTypeAttributes2GenericAttributes()
// ino.end
// ino.method.wandleRefTypeAttributes2GenericAttributes.23981.body
{
if(ib==null)
return;
Vector<Method> methods=ib.MethodVektor;
// Alle Methoden durchgehen
for(int i=0;i<methods.size();i++){
Method method=methods.get(i);
method.wandleRefTypeAttributes2GenericAttributes(paralist);
}
for(int i=0;i<ib.ConstantVektor.size();i++){
Constant instVar=(Constant)ib.ConstantVektor.get(i);
Type type=instVar.getType();
// Nur wenn es sich um ein RefType-Field handelt
if(type instanceof RefType){
GenericTypeVar pendant=ClassHelper.findGenericType(type,paralist,null);
if(pendant!=null){ //Wenn generisch, dann modifizieren
instVar.setType(pendant);
}
}
}
}
// ino.end
2014-02-12 01:12:12 +00:00
2013-10-18 11:33:46 +00:00
}
// ino.end
*/