JavaPatternMatching/src/mycompiler/mymodifier/Modifiers.java
2013-10-18 13:33:46 +02:00

143 lines
3.7 KiB
Java
Executable File

// ino.module.Modifiers.8588.package
package mycompiler.mymodifier;
// ino.end
// ino.module.Modifiers.8588.import
import java.util.Vector;
import typinferenz.JavaCodeResult;
import typinferenz.ResultSet;
// ino.end
import mycompiler.mytype.BaseType;
// ino.class.Modifiers.24035.description type=javadoc
/**
* Die Klasse beinhaltet die Liste der Access-Modifier fuer eine Klasse,
* Methode usw.
*/
// ino.end
// ino.class.Modifiers.24035.declaration
public class Modifiers
// ino.end
// ino.class.Modifiers.24035.body
{
// ino.attribute.modifier.24038.declaration
protected Vector<Modifier> modifier = new Vector<Modifier>();
// ino.end
// ino.method.getModifiers.24041.definition
public Vector<Modifier> getModifiers()
// ino.end
// ino.method.getModifiers.24041.body
{
return this.modifier;
}
// ino.end
// ino.method.setModifier.24044.definition
public void setModifier(Vector<Modifier> modifier)
// ino.end
// ino.method.setModifier.24044.body
{
if (modifier != null) this.modifier = modifier;
}
// ino.end
// ino.method.addModifier.24047.defdescription type=javadoc
/**
* Fuegt den angegebenen Modifier zur Auflistung hinzu.
*/
// ino.end
// ino.method.addModifier.24047.definition
public void addModifier(Modifier mod)
// ino.end
// ino.method.addModifier.24047.body
{
modifier.addElement(mod);
}
// ino.end
// ino.method.includesModifier.24050.defdescription type=javadoc
/**
* Gibt zurueck, ob der angegebene Modifier enthalten ist.
*/
// ino.end
// ino.method.includesModifier.24050.definition
public boolean includesModifier(Modifier mod)
// ino.end
// ino.method.includesModifier.24050.body
{
String class1 = mod.getClass().toString();
String class2;
for (int i=0; i<modifier.size(); i++) {
// Anmerkung: Vergleich mit instanceof nicht moeglich
class2 = modifier.elementAt(i).getClass().toString();
if (class2.equals(class1)) return true;
}
return false;
}
// ino.end
// ino.method.ensureAbstract.24053.defdescription type=javadoc
/**
* Stellt sicher, dass ABSTRACT in der Modifierliste
* vorkommt. Wird u.a. bei Interfaces benoetigt.
*
*/
// ino.end
// ino.method.ensureAbstract.24053.definition
public void ensureAbstract()
// ino.end
// ino.method.ensureAbstract.24053.body
{
if (!includesModifier(new Abstract()))
modifier.addElement(new Abstract());
}
// ino.end
public void ensurePublic()
{
if (!includesModifier(new Public()))
modifier.addElement(new Public());
}
// ino.method.calculate_access_flags.24056.defdescription type=javadoc
/**
* Gibt den Bitmaskenwert fuer die enthaltenen Access-Modifier
* zurueck.
*/
// ino.end
// ino.method.calculate_access_flags.24056.definition
public short calculate_access_flags()
// ino.end
// ino.method.calculate_access_flags.24056.body
{
short ret = 0;
for (int i = 0; i < modifier.size(); i++) {
ret += modifier.elementAt(i).getBitmask();
}
// Falls nichts angegeben, auf Public setzen
if (ret == 0) {
Public p = new Public();
ret = p.getBitmask();
}
return ret;
}
// ino.end
public JavaCodeResult printJavaCode(ResultSet resultSet) {
JavaCodeResult ret = new JavaCodeResult();
for(Modifier mod : this.modifier){
ret.attach(mod.printJavaCode(resultSet)).attach( " ");
}
return ret;
}
}
// ino.end