Encoding auf UTF-8 geändert

This commit is contained in:
JanUlrich 2015-05-12 14:57:12 +02:00
parent 76ee7bb549
commit ae40372a8b
100 changed files with 806 additions and 806 deletions

View File

@ -48,7 +48,7 @@ public class ClassFile
// ino.end
// ino.class.ClassFile.21492.body
{
public boolean hamaAload0 = false; //hama: f<EFBFBD>gt in Konstruktor und set Methode ein aload_0 ein wird f<EFBFBD>r StoreSomethingParmCon ben<EFBFBD>tigt
public boolean hamaAload0 = false; //hama: f�gt in Konstruktor und set Methode ein aload_0 ein wird f�r StoreSomethingParmCon ben�tigt
// ino.attribute.codegenlog.21495.decldescription type=line
// Logger fuer Code-Gen
@ -391,15 +391,15 @@ public class ClassFile
//aload_0 zuwening im Konstruktor erzeugt. Deshalb schreibe ich
//es hier hard rein.
//Test Workaround: Das eigentliche Problem: "Warum fehlt das aload_0" ist
//noch nicht behoben. Au<EFBFBD>erdem stimmt das hier nur f<EFBFBD>r den einen Use Case
//in allen anderen F<EFBFBD>llen wird f<EFBFBD>lschlicher Weise das aload_0 einef<EFBFBD>gt.
//noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case
//in allen anderen F�llen wird ¿½lschlicher Weise das aload_0 einef�gt.
if(this.hamaAload0 == true)
{
byte b2 = 42;
Byte b1 = new Byte(b2);
code.add_code(b1);
codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in Konstrukor eingef<EFBFBD>gt!!!");
codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in Konstrukor eingef�gt!!!");
}
//hama: bis hier experimentell
if(block != null)
@ -418,9 +418,9 @@ public class ClassFile
//aload_0 zuwening in der set Methode erzeugt. Deshalb schreibe ich
//es hier hard rein.
//Test Workaround: Das eigentliche Problem: "Warum fehlt das aload_0" ist
//noch nicht behoben. Au<EFBFBD>erdem stimmt das hier nur f<EFBFBD>r den einen Use Case
//in allen anderen F<EFBFBD>llen einer Set Methode wird f<EFBFBD>lschlicher Weise das
//aload_0 einef<EFBFBD>gt.
//noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case
//in allen anderen F�llen einer Set Methode wird f�lschlicher Weise das
//aload_0 einef�gt.
if(this.hamaAload0 == true)
{
if(name.equals("set"))
@ -429,7 +429,7 @@ public class ClassFile
Byte b1 = new Byte(b2);
code.add_code(b1);
codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in die set Methode eingef<EFBFBD>gt!!!");
codegenlog.warn("hama: Class ClassFile: !!!!!!!!!!!!!!!!!!!!ACHTUNG experimentell aload_0 in die set Methode eingef�gt!!!");
}
}
//hama: bis hier experimentell.

View File

@ -1,5 +1,5 @@
//PL 14-03-21: calculate_max_stack() duerfte nicht stimmen
//vorübergehend max_stack und set_max_stack eingeführt
//vorübergehend max_stack und set_max_stack eingeführt
//in codegen "short max_stack = calculate_max_stack();" auskommentiert
//muss wieder einkommentiert werden

View File

@ -1083,7 +1083,7 @@ public class JVMCode
String type_neu = ((GenericTypeVar)paralist.elementAt(i)).getName();
if(type_neu.equals(type))
{
codegenlog.debug("Typ wurde auf java.lang.Object geändert! (da Typparameter)");
codegenlog.debug("Typ wurde auf java.lang.Object geändert! (da Typparameter)");
type = "Object";
}
}

View File

@ -20,7 +20,7 @@ public class ConsoleInterface {
for(String file : args){
filenames.add(file);
}
Logger.setStandardConfiguration(new LoggerConfiguration()); // sämtliches Logging unterdrücken
Logger.setStandardConfiguration(new LoggerConfiguration()); // sämtliches Logging unterdrücken
run(filenames);
}
@ -47,7 +47,7 @@ public class ConsoleInterface {
///////////////////////
// Ausgabe:
///////////////////////
if(resultSet == null)System.out.println("Keine Lösung!");
if(resultSet == null)System.out.println("Keine Lösung!");
ArrayList<String> resultJavaCodes = new ArrayList<String>();
for(TypeinferenceResultSet result : resultSet){
String javaCode = result.getInterferedClass().printJavaCode(result);
@ -55,7 +55,7 @@ public class ConsoleInterface {
}
for(String out : resultJavaCodes){
System.out.println("\nMögliche Typisierung:\n\n");
System.out.println("\nMögliche Typisierung:\n\n");
System.out.println(out);
}
}catch(Exception e){

View File

@ -83,7 +83,7 @@ public class MyCompiler implements MyCompilerAPI
// ino.attribute.m_AbstractSyntaxTree.21280.decldescription type=javadoc
/**
* Der abstrake Syntaxbaum
* <br/>Autor: ¿½rg ¿½uerle
* <br/>Autor: ¿½rg ¿½uerle
*/
// ino.end
// ino.attribute.m_AbstractSyntaxTree.21280.declaration
@ -92,10 +92,10 @@ public class MyCompiler implements MyCompilerAPI
// ino.method.MyCompiler.21283.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden
* ¿½nnen, sondern nur eine API zur Verf�gung gestellt werden.
* @param logger Konfiguration für Debug Ausgabe TODO
* Author: ¿½rg ¿½uerle<br/>
* Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden
* ¿½nnen, sondern nur eine API zur Verf�gung gestellt werden.
* @param logger Konfiguration für Debug Ausgabe TODO
*/
// ino.end
// ino.method.MyCompiler.21283.definition
@ -109,8 +109,8 @@ public class MyCompiler implements MyCompilerAPI
// ino.method.getAPI.21286.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
* Author: ¿½rg ¿½uerle<br/>
* Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
* Diese Methode sollte von der IDE aus aufgerufen werden,
* um eine Quellcode-Datei zu kompilieren.
* @return Die Compiler-API
@ -132,8 +132,8 @@ public class MyCompiler implements MyCompilerAPI
/**
* Author: Thomas Ott<br/>
* Ersetzt in der Superklassenparameterliste einer Klasse, diejenigen
* <code>GenericTypeVars</code>, zu denen es eine Klasse gibt, die gleich hei�t.
* Beim Parsen werden ¿½mlich vom Jay nur GenericTypeVars erzeugt und keine
* <code>GenericTypeVars</code>, zu denen es eine Klasse gibt, die gleich hei�t.
* Beim Parsen werden ¿½mlich vom Jay nur GenericTypeVars erzeugt und keine
* RefTypes. Dies wird durch diese Methode nachgeholt.<br/>
* Bsp.: class JoergsTolleKlasse<A> extends MartinsSuperklasse<Integer, B>
* <br/>Wie man an diesem Beispiel sieht, kann nur eine Superklasse instantiierte
@ -153,7 +153,7 @@ public class MyCompiler implements MyCompilerAPI
//wandleGeneric2RefType SOLLTE NICHT NUR FUER LISTEN
//VON TYPEN FUNKTIONIEREN PL 05-01-19
// otth: GenericTypeVar in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln,
// falls: ¿½r GenericTypeVar existiert eine gleichnamige Klasse
// falls: ¿½r GenericTypeVar existiert eine gleichnamige Klasse
if(Parameter == null) return;
for( int i = 0; i < Parameter.size(); i++)
@ -165,7 +165,7 @@ public class MyCompiler implements MyCompilerAPI
if ( TempParameter instanceof GenericTypeVar)
{
inferencelog.debug("Generic, WANDLE: " + TempParameter.getName());
// existiert ¿½r GenericTypeVar eine deklarierte Klasse
// existiert ¿½r GenericTypeVar eine deklarierte Klasse
for( int k = 0; k < KlassenVektor.size(); k++)
{
if( KlassenVektor.elementAt(k).getSimpleName().equals(TempParameter.getSimpleName()) )
@ -228,9 +228,9 @@ public class MyCompiler implements MyCompilerAPI
/**
* Parst den Quellcode und baut den abstrakten Syntaxbaum auf. Danach wird
* automatisch der von Thomas Ott implementierte Algorithmus
* <code>NewTVar(jclass)</code> (siehe Algorithmus 5.17 TRProg, Martin Pl�micke)
* <code>NewTVar(jclass)</code> (siehe Algorithmus 5.17 TRProg, Martin Pl�micke)
* aufgerufen.
* <br/>Author: ¿½rg ¿½uerle
* <br/>Author: ¿½rg ¿½uerle
* @param reader
* @throws IOException
* @throws JavaParser.yyException
@ -248,7 +248,7 @@ public class MyCompiler implements MyCompilerAPI
parserlog.info("#########################################\n");
//////////////////////////////////////
// Alte Daten ¿½schen:
// Alte Daten ¿½schen:
//////////////////////////////////////
m_AbstractSyntaxTree = null;
@ -268,7 +268,7 @@ public class MyCompiler implements MyCompilerAPI
//PL 05-07-31 verschoben nach SourceFile.java in Methode typeReconstruction
// otth: TypePlaceholders in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln,
// falls: ¿½r TypePlaceholder existiert eine gleichnamige Klasse
// falls: ¿½r TypePlaceholder existiert eine gleichnamige Klasse
// Superklasse suchen
//for( int i = 0; i < srcFile.KlassenVektor.size(); i++ )
//{
@ -309,10 +309,10 @@ public class MyCompiler implements MyCompilerAPI
if ( tempKlassBody != null )
{
strKlasse = tempKlasse.getName();
parserlog.debug("T->Felddeklarationen f�r die Klasse:" + strKlasse);
parserlog.debug("T->Felddeklarationen f�r die Klasse:" + strKlasse);
parserlog.debug( "------------------------------------");
// Schleife �ber alle fielddeclarations
// Schleife �ber alle fielddeclarations
tempMengeFieldDecl = tempKlassBody.getFields();
for( int k = 0; k < tempMengeFieldDecl.size(); k++ )
{
@ -321,7 +321,7 @@ public class MyCompiler implements MyCompilerAPI
{
//parserlog.debug("T->Konstruktor: " + ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name() + " - ReturnType: " + tempFieldDecl.getTypeName());
// pr�fen, ob Construktorname == Klassenname - falls nein: Construktor in Methode umwandeln !!!
// pr�fen, ob Construktorname == Klassenname - falls nein: Construktor in Methode umwandeln !!!
String strConstName = ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name(); // Konstruktorname
if ( !strConstName.equals( strKlasse ) )
{
@ -336,9 +336,9 @@ public class MyCompiler implements MyCompilerAPI
Methode.set_ExceptionList( Konstruktor.get_ExceptionList() );
Methode.setReturnType( Konstruktor.getReturnType() );
Methode.setDeclIdMenge( Konstruktor.getDeclIdMenge() );
// types_in_parameterlist wird wohl erst sp�ter und intern gef�llt
// types_in_parameterlist wird wohl erst sp�ter und intern gef�llt
// ¿½ckgabetyp = Objekt der Klasse 'TypePlaceholder'
// ¿½ckgabetyp = Objekt der Klasse 'TypePlaceholder'
// #JB# 31.03.2005
// ###########################################################
@ -359,7 +359,7 @@ public class MyCompiler implements MyCompilerAPI
// Debugg-Infos
parserlog.debug("");
parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse);
parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse);
parserlog.debug( "-----------------------------------------");
for( int k = 0; k < tempMengeFieldDecl.size(); k++ )
{
@ -389,14 +389,14 @@ public class MyCompiler implements MyCompilerAPI
tempMethod = (Method)tempFieldDecl;
tempReturn = tempMethod.getReturnType();
// Funktionen ohne definierten ¿½ckgabetyp suchen!!!
// Funktionen ohne definierten ¿½ckgabetyp suchen!!!
if( tempReturn instanceof TypePlaceholder )
{
// Methode mit nicht-definiertem ¿½ckgabetyp gefunden!
// Methode mit nicht-definiertem ¿½ckgabetyp gefunden!
// #JB# 31.03.2005
// ###########################################################
// Wird bereits �ber fresh() gemacht!!
// Wird bereits �ber fresh() gemacht!!
//tempReturn.setName( TypePlaceholder.makeNewName() );
// ###########################################################
parserlog.debug("");
@ -425,7 +425,7 @@ public class MyCompiler implements MyCompilerAPI
// #JB# 31.03.2005
// ###########################################################
// Wird bereits �ber fresh() gemacht!!
// Wird bereits �ber fresh() gemacht!!
//tempType.setName( TypePlaceholder.makeNewName() );
// ###########################################################
}
@ -458,7 +458,7 @@ public class MyCompiler implements MyCompilerAPI
/////////////////////////////////////////////////////////////////////////////////////////////////
// ino.method.init.21295.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Author: ¿½rg ¿½uerle<br/>
* Initialisiert den Compiler
*/
// ino.end
@ -476,11 +476,11 @@ public class MyCompiler implements MyCompilerAPI
// ino.method.parse.21298.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Author: ¿½rg ¿½uerle<br/>
* Ruft die Parse-Methode.
* @param file Die Quellcode-Datei
* @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert.
* @throws IOException Wenn was schief ¿½uft.
* @throws IOException Wenn was schief ¿½uft.
* @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt.
*/
// ino.end
@ -500,9 +500,9 @@ public class MyCompiler implements MyCompilerAPI
// ino.method.typeReconstruction.21304.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Author: ¿½rg ¿½uerle<br/>
* Ruft den Typrekonstruktionsalgorithmus auf.
* @return Die Menge aller ¿½glichen Typkombinationen
* @return Die Menge aller ¿½glichen Typkombinationen
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
* ist. @throws CTypeReconstructionException Wenn ein Fehler bei der
* Typrekonstruktion auftritt.
@ -538,13 +538,13 @@ public class MyCompiler implements MyCompilerAPI
/**
* Erstellt die FunN-Assumptions
* Fun0-FunN (momentan für N = 6)
* Fun0-FunN (momentan für N = 6)
* @return
*/
private TypeAssumptions makeFunNAssumptions(){
TypeAssumptions ret = new TypeAssumptions();
//Basic Assumptions für die FunN Interfaces:
//Basic Assumptions für die FunN Interfaces:
//TODO: Hier mehr als Fun1-Fun5 implementieren
for(int i = 0; i<6; i++){
FunNInterface funN = new FunNInterface(i);
@ -556,8 +556,8 @@ public class MyCompiler implements MyCompilerAPI
}
/**
* Author: ¿½rg ¿½uerle<br/>
* Generiert den Bytecode und das Class-File ¿½r den Syntaxbaum.
* Author: ¿½rg ¿½uerle<br/>
* Generiert den Bytecode und das Class-File ¿½r den Syntaxbaum.
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
* ist.
@ -583,7 +583,7 @@ public class MyCompiler implements MyCompilerAPI
// ino.method.main.21313.defdescription type=javadoc
/**
* Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet
* Die Main-Funktion, �ber die der Compiler auch per Konsole gestartet
* werden kann.
* @param args Klassendatei
*/
@ -696,7 +696,7 @@ public class MyCompiler implements MyCompilerAPI
for( int i = 0; i < containedTypes.size(); i++)
{
Type tempParameter = (Type)(containedTypes.elementAt(i));
// Nat�rlich nur RefTypes updaten
// Nat�rlich nur RefTypes updaten
if(tempParameter instanceof RefType){
RefType typ=(RefType)tempParameter;
UsedId fullyQualifiedName=UsedId.createFromQualifiedName(typ.getTypeName(),typ.getOffset());
@ -717,9 +717,9 @@ public class MyCompiler implements MyCompilerAPI
// ino.end
*/
/**
* @author Arne Lüdtke
* @author Arne Lüdtke
* Ersetzt alle GTVs durch TPHs mit gleichem Namen. Arbeitet Rekursiv.
* ACHTUNG: BACKDOOR CREATE!!! Nur für Testzwecke verwenden.
* ACHTUNG: BACKDOOR CREATE!!! Nur für Testzwecke verwenden.
* @param T - Typ, bei welchem die GTVs ersetzt werden sollen.
*/
public static Type makeGenericTypeVars2TypePlaceHolders(Type T)
@ -811,12 +811,12 @@ public class MyCompiler implements MyCompilerAPI
StringReader srcreader = new StringReader(fileData.toString());
//Den aus der Datei ausgelesenen Quellcode zu einem Syntaxbaum parsen:
this.m_AbstractSyntaxTree.add(parse2SyntaxTree(srcreader)); // Alle Dateien nacheinander hintereinander anhängen...
this.m_AbstractSyntaxTree.add(parse2SyntaxTree(srcreader)); // Alle Dateien nacheinander hintereinander anhängen...
}
/*
String gesamterSrc = "";
//Hier werden alle übergebenen Dateinamen abgearbeitet:
//Hier werden alle übergebenen Dateinamen abgearbeitet:
for(String filename : filenames){
try {
StringBuffer fileData = new StringBuffer();
@ -829,15 +829,15 @@ public class MyCompiler implements MyCompilerAPI
fileData.append(readData);
}
reader.close();
gesamterSrc += fileData.toString() + "\n"; // Alle Dateien nacheinander hintereinander anhängen...
gesamterSrc += fileData.toString() + "\n"; // Alle Dateien nacheinander hintereinander anhängen...
} catch (Exception e) {
e.printStackTrace();
throw new TypinferenzException("Die übergebenen Dateien konnten nicht zum Parsen eingelesen werden.");
throw new TypinferenzException("Die übergebenen Dateien konnten nicht zum Parsen eingelesen werden.");
}
}
try {
// und anschließend zum Parsen übergeben.
// und anschließend zum Parsen übergeben.
this.parse(gesamterSrc.toString());
} catch (Exception e) {
e.printStackTrace();

View File

@ -24,7 +24,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
* IDE als Compiler-API zum Kompilieren einer Quellcode-Datei
* dienen und stellt somit die Schnittstelle zur Studienarbeit
* von Markus Melzer (Eclipse-Plugin) dar.
* @author Jörg Bäuerle
* @author Jörg Bäuerle
* @version $Date: 2013/09/09 11:04:24 $
*/
// ino.end
@ -36,7 +36,7 @@ public interface MyCompilerAPI
// ino.method.init.21331.decldescription type=javadoc
/**
* Author: Jörg Bäuerle<br/>
* Author: Jörg Bäuerle<br/>
* Initialisiert den Compiler
*/
// ino.end
@ -46,11 +46,11 @@ public interface MyCompilerAPI
// ino.method.parse.21334.decldescription type=javadoc
/**
* Author: Jörg Bäuerle<br/>
* Author: Jörg Bäuerle<br/>
* Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
* @param file Die Quellcode-Datei
* @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert.
* @throws IOException Wenn was schief läuft.
* @throws IOException Wenn was schief läuft.
* @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt.
*/
// ino.end
@ -61,10 +61,10 @@ public interface MyCompilerAPI
// ino.method.parse.21337.decldescription type=javadoc
/**
* Author: Jörg Bäuerle<br/>
* Author: Jörg Bäuerle<br/>
* Parst einen String und baut den abstrakten Syntaxbaum auf.
* @param srcCode Der zu parsende Quellcode
* @throws IOException Wenn was schief läuft.
* @throws IOException Wenn was schief läuft.
* @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt.
// ino.end
@ -76,9 +76,9 @@ public interface MyCompilerAPI
// ino.method.typeReconstruction.21340.decldescription type=javadoc
/**
* Author: Jörg Bäuerle<br/>
* Author: Jörg Bäuerle<br/>
* Ruft den Typrekonstruktionsalgorithmus auf.
* @return Die Menge aller möglichen Typkombinationen
* @return Die Menge aller möglichen Typkombinationen
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
* ist. @throws CTypeReconstructionException Wenn ein Fehler bei der
* Typrekonstruktion auftritt.
@ -91,8 +91,8 @@ public interface MyCompilerAPI
// ino.method.codeGeneration.21346.decldescription type=javadoc
/**
* Author: Jörg Bäuerle<br/>
* Generiert den Bytecode und das Class-File für den Syntaxbaum.
* Author: Jörg Bäuerle<br/>
* Generiert den Bytecode und das Class-File für den Syntaxbaum.
* @param syntaxTree Der Syntaxbaum
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
* ist. @throws JVMCodeException
@ -124,7 +124,7 @@ public interface MyCompilerAPI
// ino.end
/**
* Parst zusammenhängende JavaKlassen in verschiedenen Dateien.
* Parst zusammenhängende JavaKlassen in verschiedenen Dateien.
* @param filenames - Eine Liste von Quellcodedateien, welche gseparst werden sollen
*/
public void parse(Menge<String> filenames) throws ParserError;

View File

@ -34,8 +34,8 @@ public class Logger {
*/
/**
* Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird.
* Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten.
* Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird.
* Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten.
* @param message
* @param section
*/
@ -45,7 +45,7 @@ public class Logger {
/**
* Liefert den Logger mit dem angegebenen Namen.
* Üblicherweise wird diese Methode mit dem Namen der Klasse aufgerufen, in welcher der Logger tätig ist.
* Üblicherweise wird diese Methode mit dem Namen der Klasse aufgerufen, in welcher der Logger tätig ist.
* @param name - Name der Klasse ( Ermittelbar mittels <Klasse>.class.getName() )
* @return
*/
@ -94,7 +94,7 @@ public class Logger {
}
/**
* wird hier null übergeben, so wird sämtliches Logging unterdrückt.
* wird hier null übergeben, so wird sämtliches Logging unterdrückt.
*/
public static void setStandardConfiguration(LoggerConfiguration config) {
Logger.standardConfiguration = config;

View File

@ -12,7 +12,7 @@ public class LoggerConfiguration{
public LoggerConfiguration setOutput(Section forSection, PrintStream output){
if(outputs.containsKey(forSection)){
//throw new DebugException("Eine outputStream für Section "+forSection+" ist bereits vorhanden");
//throw new DebugException("Eine outputStream für Section "+forSection+" ist bereits vorhanden");
if(outputs.get(forSection).equals(output)){
//do nothing
}else{

View File

@ -3,7 +3,7 @@ package de.dhbwstuttgart.logger;
import java.util.logging.Level;
/**
* Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt
* Sämtliche Logging Ausgaben werden in die bei der Erstellung des Loggers übergebene Section eingeteilt
* @author janulrich
*
*/

View File

@ -9,7 +9,7 @@ import de.dhbwstuttgart.core.IItemWithOffset;
// ino.class.CTypeReconstructionException.23746.description type=javadoc
/**
* @author J<EFBFBD>rg B<EFBFBD>uerle
* @author J�rg ¿½uerle
* @version $Date: 2006/06/13 10:37:31 $
*/
// ino.end

View File

@ -66,7 +66,7 @@ public class JavaClassName {
return false;
if (packageName != null && other.packageName != null) {
if (!packageName.equals(other.packageName))
return false;//Spezialfall, nicht beide Typen müssen eindeutig mit Packagenamen angegeben werden
return false;//Spezialfall, nicht beide Typen müssen eindeutig mit Packagenamen angegeben werden
}
return true;
}

View File

@ -1,7 +1,7 @@
/********************************************
* file: JavaLexer.lex *
* *
* enth<EFBFBD>lt die JLex-Spezifikation f<EFBFBD>r die *
* enth�lt die JLex-Spezifikation ¿½r die *
* Generierung des lexical analyzers *
* *
********************************************/

View File

@ -46,7 +46,7 @@ void initUsedIdsToCheck() {
}
//PL 05-07-30 eingefuegt. ENDE
//LUAR 07-05-29 Anfang für Wildcard Test
//LUAR 07-05-29 Anfang für Wildcard Test
public Menge<Pair> testPair = new Menge<Pair>();
//LUAR 07-05-29 Ende
// line 53 "-"
@ -817,7 +817,7 @@ case 19:
{
UsedId UI = new UsedId(((Token)yyVals[0+yyTop]).getOffset());
UI.set_Name( ((Token)yyVals[0+yyTop]).getLexem() );
UI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/
UI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/
yyVal = UI;
}
break;
@ -980,7 +980,7 @@ case 36:
pl.getParalist().addElement(new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(),null, ((Token)yyVals[0+yyTop]).getOffset()));
/*pl.getParalist().addElement( new TypePlaceholder($1.getLexem()) );*/
/* ########################################################### */
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + " TV", Section.PARSER);
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + " TV", Section.PARSER);
yyVal = pl;
}
break;
@ -991,7 +991,7 @@ case 37:
RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null,((Token)yyVals[-3+yyTop]).getOffset() );
t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() );
pl.getParalist().addElement(t);
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER);
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER);
yyVal = pl;
}
break;
@ -1012,7 +1012,7 @@ case 39:
((ParaList)yyVals[-2+yyTop]).getParalist().addElement(new GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(), null,((Token)yyVals[0+yyTop]).getOffset()));
/*$1.getParalist().addElement(new TypePlaceholder($3.getLexem()));*/
/* ########################################################### */
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + ": TV", Section.PARSER);
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + ((Token)yyVals[0+yyTop]).getLexem() + ": TV", Section.PARSER);
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist: " + ((ParaList)yyVals[-2+yyTop]).getParalist(), Section.PARSER);
yyVal=((ParaList)yyVals[-2+yyTop]);
}
@ -1023,7 +1023,7 @@ case 40:
RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null ,((Token)yyVals[-3+yyTop]).getOffset() );
t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() );
((ParaList)yyVals[-5+yyTop]).getParalist().addElement(t);
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER);
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER '<' paralist '>' --> Paralist f�r " + ((Token)yyVals[-3+yyTop]).getLexem() + ": RefType", Section.PARSER);
yyVal=((ParaList)yyVals[-5+yyTop]);
}
break;
@ -1252,7 +1252,7 @@ case 71:
{
if (((Menge)yyVals[0+yyTop]) != null) {
/*$1.set_ParaList($2.get_ParaList());*/
((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/
((UsedId)yyVals[-1+yyTop]).set_ParaList(((Menge)yyVals[0+yyTop]));/*Änderung von Andreas Stadelmeier. Type statt GenericVarType*/
/* otth: originale (also diese) Parameterliste retten */
/*((UsedId)$1).vParaOrg = new Menge<Type>( $2.get_ParaList() );*/
}
@ -1410,7 +1410,7 @@ case 91:
break;
case 92:
// line 863 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
{/*angefügt von Andreas Stadelmeier*/
{/*angefügt von Andreas Stadelmeier*/
((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop]));
((FieldDeclaration)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop]));
yyVal=((FieldDeclaration)yyVals[-1+yyTop]);
@ -1906,7 +1906,7 @@ case 153:
/* #JB# 10.04.2005 */
/* ########################################################### */
met.setLineNumber(((Token)yyVals[-2+yyTop]).getLineNumber());
met.setOffset(((Token)yyVals[-2+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/
met.setOffset(((Token)yyVals[-2+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/
/* ########################################################### */
DeclId DImethod = new DeclId();
DImethod.set_Name(((Token)yyVals[-2+yyTop]).getLexem());
@ -1921,7 +1921,7 @@ case 154:
/* #JB# 10.04.2005 */
/* ########################################################### */
met_para.setLineNumber(((Token)yyVals[-3+yyTop]).getLineNumber());
met_para.setOffset(((Token)yyVals[-3+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/
met_para.setOffset(((Token)yyVals[-3+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/
/* ########################################################### */
DeclId Dimet_para = new DeclId();
Dimet_para.set_Name(((Token)yyVals[-3+yyTop]).getLexem());
@ -1990,7 +1990,7 @@ case 161:
{
FormalParameter FP = new FormalParameter(((DeclId)yyVals[0+yyTop]));
FP.setType(((Type)yyVals[-1+yyTop]));
/*FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben.*/
/*FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben.*/
yyVal=FP;
}
break;
@ -2042,7 +2042,7 @@ case 166:
/* #JB# 10.04.2005 */
/* ########################################################### */
DI.setLineNumber(((Token)yyVals[0+yyTop]).getLineNumber());
DI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/
DI.setOffset(((Token)yyVals[0+yyTop]).getOffset());/*hinzugef�gt hoth: 07.04.2006*/
/* ########################################################### */
DI.set_Name(((Token)yyVals[0+yyTop]).getLexem());
yyVal=DI;

View File

@ -16,7 +16,7 @@ public class Token
private int m_LineNumber;
// ino.end
// ino.attribute.m_Offset.24871.declaration
private int m_Offset;//hinzugefügt hoth: 14.04.2006
private int m_Offset;//hinzugefügt hoth: 14.04.2006
// ino.end
@ -54,7 +54,7 @@ public class Token
// ino.end
// ino.method.Token.24883.defdescription type=line
// hinzugefügt hoth: 14.04.2006
// hinzugefügt hoth: 14.04.2006
// ino.end
// ino.method.Token.24883.definition
Token (int tok, String s, int lineNumber, int charOffset)
@ -69,7 +69,7 @@ public class Token
// ino.end
// ino.method.Token.24886.defdescription type=line
// hinzugefügt hoth: 14.04.2006
// hinzugefügt hoth: 14.04.2006
// ino.end
// ino.method.Token.24886.definition
Token (int tok, char c, int lineNumber, int charOffset)

View File

@ -125,7 +125,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
// ino.attribute.containedTypes.23032.decldescription type=line
// PL 05-07-30 eingefuegt. Vektor aller Typdeklarationen, die in der Klasse
// vorkommen. Wird in der Studienarbeit von Andreas Stadelmeier nur für Verifizierung der Tests eingesetzt.
// vorkommen. Wird in der Studienarbeit von Andreas Stadelmeier nur für Verifizierung der Tests eingesetzt.
// ino.end
// ino.attribute.containedTypes.23032.declaration
private Menge<Type> containedTypes = new Menge<Type>();
@ -134,7 +134,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
private Menge<UsedId> usedIdsToCheck = new Menge<UsedId>();
// ino.end
private TypeAssumptions typeAssumptions = null;//muss mit null Initialisiert werden. Darf nur über getTypeAssumptions abgerufen werden.
private TypeAssumptions typeAssumptions = null;//muss mit null Initialisiert werden. Darf nur über getTypeAssumptions abgerufen werden.
// ino.attribute.parserlog.23038.declaration
//protected Logger parselog = Logger.getLogger("parser");
@ -157,14 +157,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
superclassid=null;
}
this.offset = offset;
if(!name.equals("Object"))//Alle Klassen außer Object erben von Object:
if(!name.equals("Object"))//Alle Klassen außer Object erben von Object:
this.superClass = new Class("Object", -1).getType();
}
// ino.end
/**
* Erstellt eine Klasse, welche nur für die Assumptions verwendet wird.
* Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody.
* Erstellt eine Klasse, welche nur für die Assumptions verwendet wird.
* Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody.
* @param name
* @param superClass
* @param modifiers
@ -285,8 +285,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
/**
* @author Andreas Stadelmeier, a10023
* Fügt der Klasse eine Feld hinzu.
* Prüft dabei, ob es sich um einen Constructor handelt und wandelt diesen direkt um.
* Fügt der Klasse eine Feld hinzu.
* Prüft dabei, ob es sich um einen Constructor handelt und wandelt diesen direkt um.
* @param feld
*/
public void addField(Field i)
@ -328,7 +328,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
// ino.method.complete_paralist.23062.body
{
//Diese Funktion vervollt�ndigt die Parameterliste ¿½r vererbte Klassen
//Diese Funktion vervollt�ndigt die Parameterliste ¿½r vererbte Klassen
Menge<Type> child = paralist;
paralist = (Menge<Type>)superclassid.get_ParaList();
@ -344,7 +344,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
/**
* Generiert die ClassFile für diese Klasse.
* Generiert die ClassFile für diese Klasse.
* @param typeinferenceResult - Das ResultSet einer Typinferierung oder null, falls alle Typen eindeutig feststehen.
* @return
* @throws JVMCodeException
@ -371,7 +371,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
// pkgName = sf.getPackageName().get_codegen_UsedId() + "/";
//}
//geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen:
//geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen:
String packageName = "";
if(pkgName != null) packageName = pkgName.get_Name_1Element();
classfile.add_class(getName(), superClass, getAccessFlags());
@ -409,36 +409,36 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
// ino.end
/**
* Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt.
* Der ClassBody enthält sämtliche Felder dieser Klasse.
* Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen.
* (Nur einmal während des Parsens aufrufen!)
* Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt.
* Der ClassBody enthält sämtliche Felder dieser Klasse.
* Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen.
* (Nur einmal während des Parsens aufrufen!)
*/
public void set_ClassBody(ClassBody body)
{
Menge<Field> tempFields=body.getFields();
for(Field f : this.getFields()){
if(f instanceof Method){ //Wenn es sich um eine Methode handelt ist eine zusätzliche Prüfung erfoderlich: (Ist es ein Konstruktor?)
if(f instanceof Method){ //Wenn es sich um eine Methode handelt ist eine zusätzliche Prüfung erfoderlich: (Ist es ein Konstruktor?)
Method m = (Method)f;
/*
* Ermitteln ob es sich bei der Methode um einen Konstruktor handelt:
* (Parser kann nicht zwischen Methode und Konstruktor unterscheiden.
* Denn für einen Konstruktor gelten besondere Regeln:
* Denn für einen Konstruktor gelten besondere Regeln:
* -Typ des Blocks eines Konstruktor ist void (kein Return-Statement)
* -Rückgabetyp der Methode/Konstruktors ist der Typ der Klasse
* -Rückgabetyp der Methode/Konstruktors ist der Typ der Klasse
* -Ein Konstruktor kann nicht aufgerufen werden (nur mit new)
*/
if(m.get_Method_Name().equals("<init>"))throw new TypeinferenceException("<init> ist kein gültiger Methodenname", m);
if(m.get_Method_Name().equals("<init>"))throw new TypeinferenceException("<init> ist kein gültiger Methodenname", m);
if((m.get_Method_Name().equals(this.getName()))) {
Constructor constructor = new Constructor(m);
tempFields.add(constructor); //Den Konstruktor anstatt der Methode anfügen
tempFields.add(constructor); //Den Konstruktor anstatt der Methode anfügen
}else{
//Handelt es sich um keinen Konstruktor, dann die Methode unverändert den Feldern hinzufügen:
//Handelt es sich um keinen Konstruktor, dann die Methode unverändert den Feldern hinzufügen:
tempFields.add(m);
}
}else{
tempFields.add(f); //Ansonsten das Feld anfügen...
tempFields.add(f); //Ansonsten das Feld anfügen...
}
}
@ -640,14 +640,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
/////////////////////////////////////////////////////////////////////////
// ino.method.TRProg.23110.defdescription type=javadoc
/**
* Ausgangspunkt ¿½r den Typrekonstruktionsalgorithmus. Hier werden zun�chst
* Ausgangspunkt ¿½r den Typrekonstruktionsalgorithmus. Hier werden zun�chst
* die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe
* ¿½r den Algorithmus dienen.<br/>
* (siehe Algorithmus 5.17 TRProg, Martin Pl�micke)
* <br/>Author: ¿½rg ¿½uerle
* ¿½r den Algorithmus dienen.<br/>
* (siehe Algorithmus 5.17 TRProg, Martin Pl�micke)
* <br/>Author: ¿½rg ¿½uerle
* @param supportData
* @param globalAssumptions
* @return Liste aller bisher berechneten, ¿½glichen Typkombinationen
* @return Liste aller bisher berechneten, ¿½glichen Typkombinationen
* @throws CTypeReconstructionException
*/
// ino.end
@ -671,16 +671,16 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
//////////////////////////////
//Erzeuge Assumptions:
TypeAssumptions assumptions = this.getPrivateFieldAssumptions();
//Globale Assumptions anfügen:
//Globale Assumptions anfügen:
assumptions.add(globalAssumptions);
ConstraintsSet oderConstraints = new ConstraintsSet();
for(Type gparam : this.get_ParaList()){
if(gparam instanceof GenericTypeVar)assumptions.add(((GenericTypeVar)gparam).createAssumptions()); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen
if(gparam instanceof GenericTypeVar)assumptions.add(((GenericTypeVar)gparam).createAssumptions()); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen
}
for(Type gparam : this.get_ParaList()){
if(gparam instanceof GenericTypeVar)oderConstraints.add(((GenericTypeVar)gparam).TYPE(assumptions)); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen
if(gparam instanceof GenericTypeVar)oderConstraints.add(((GenericTypeVar)gparam).TYPE(assumptions)); //Constraints für die Generischen Variablen erstellen und diese dem AssumptionsSet hinzufügen
}
typinferenzLog.debug("Erstellte Assumptions: "+assumptions, Section.TYPEINFERENCE);
@ -709,7 +709,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
/*
CReconstructionTupleSet retTupleSet = this.TRStart(methodList, V, V_fields_methods, supportData);
inferencelog.debug("Bin aus TRStart() zur�ck in TRProg().");
inferencelog.debug("Bin aus TRStart() zur�ck in TRProg().");
//////////////////////////////
// Neu Ergebnismenge A aller
// Typannahmen erzeugen:
@ -717,12 +717,12 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
inferencelog.debug("Erstelle Ergebnismenge...");
Menge<CTypeReconstructionResult> newA = new Menge<CTypeReconstructionResult>();
// Alle bisherigen ¿½glichkeiten an Typkombinationen durchgehen:
// Alle bisherigen ¿½glichkeiten an Typkombinationen durchgehen:
Menge<CTypeReconstructionResult> oldA = supportData.getA();
for(int i=0; i<oldA.size(); i++){
CTypeReconstructionResult oneReconResult = oldA.elementAt(i);
// Und mit den neuen ¿½glichen Typkombinationen vereinigen:
// Und mit den neuen ¿½glichen Typkombinationen vereinigen:
Iterator<CReconstructionTuple> retTupleIt = retTupleSet.getIterator();
while(retTupleIt.hasNext()){
CReconstructionTuple possibleTuple = retTupleIt.next();
@ -745,7 +745,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
}
newReconResult.addGenericTypeVars(this.getName(), genericsList);
//Hinzuf�gen:
//Hinzuf�gen:
newA.addElement(newReconResult);
}
}
@ -761,7 +761,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
if(this.methodList != null) return this.methodList;
//TODO: Unnötige Berechnungen im folgenden Code rauskürzen:
//TODO: Unnötige Berechnungen im folgenden Code rauskürzen:
//////////////////////////////
// Die Eingabedaten bauen:
//////////////////////////////
@ -774,7 +774,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
//////////////////////////////
// Alle Felder durchgehen:
// Zuerst alle Attribute, dann Methoden
// ge�ndert: hoth 06.04.2006
// ge�ndert: hoth 06.04.2006
//////////////////////////////
for(Field field : this.getFields())
@ -813,7 +813,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
methodList.addElement(method);
// ¿½r V_fields_methods:
// ¿½r V_fields_methods:
CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(this.getType(), method.get_Method_Name(), method.getReturnType(), method.getParameterCount(),method.getLineNumber(),method.getOffset(),new Menge<Integer>(),method.getGenericMethodParameters()); // Typannahme bauen...
@ -826,7 +826,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
method.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID());
// ¿½r die V_i:
// ¿½r die V_i:
CTypeAssumptionSet localAssum = new CTypeAssumptionSet();
// Bauen...
@ -834,7 +834,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
if(parameterList!=null){
for(int i=0; i<parameterList.sc_get_Formalparalist().size(); i++){
FormalParameter para = parameterList.sc_get_Formalparalist().elementAt(i);
// ¿½r V_fields_methods:
// ¿½r V_fields_methods:
CParaTypeAssumption paraAssum = new CParaTypeAssumption(this.getName(), method.get_Method_Name(), method.getParameterCount(), method.getOverloadedID(),para.getIdentifier(), para.getType(), para.getLineNumber(),para.getOffset(),new Menge<Integer>());
//fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006
Class.isFirstLocalVarDecl=false;
@ -847,13 +847,13 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
// ¿½r die V_i:
// ¿½r die V_i:
CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(this.getName(), method.get_Method_Name(), method.getParameterCount(), method.getOverloadedID(),"1", para.getIdentifier(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge<Integer>());
localAssum.addElement(varAssum);
rememberLocals.addElement(varAssum);
}
}
// ...und hinzuf�gen:
// ...und hinzuf�gen:
V.addElement(localAssum);
}
@ -866,15 +866,15 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
*/
/**
* Ermittelt alle privaten Felder und Methoden der Klasse und Erstellt eine Assumption für diese.
* Bemerkung: Momentan werden noch alle Felder dieser Klasse zurückgegeben.
* Ermittelt alle privaten Felder und Methoden der Klasse und Erstellt eine Assumption für diese.
* Bemerkung: Momentan werden noch alle Felder dieser Klasse zurückgegeben.
* @return Die erstellten TypeAssumptions
*/
private TypeAssumptions getPrivateFieldAssumptions() {
if(this.typeAssumptions != null)return this.typeAssumptions; //Das sorgt dafür, dass die Assumptions nur einmalig generiert werden.
if(this.typeAssumptions != null)return this.typeAssumptions; //Das sorgt dafür, dass die Assumptions nur einmalig generiert werden.
TypeAssumptions assumptions = new TypeAssumptions(this.getName());
//this.getMethodList(); //Diese Funktion muss zuerst ausgeführt werden.
//Assumption für this, also die aktuelle Klasse: (ist nicht mehr nötig, da jedes AssumptionSet einer Klasse (dem namen einer Klasse) zugewiesen ist.
//this.getMethodList(); //Diese Funktion muss zuerst ausgeführt werden.
//Assumption für this, also die aktuelle Klasse: (ist nicht mehr nötig, da jedes AssumptionSet einer Klasse (dem namen einer Klasse) zugewiesen ist.
//CLocalVarTypeAssumption thisAssumption = new CLocalVarTypeAssumption(this.name, name, 0, 0, name, "this", new RefType(name,0), 0, 0, null);
//assumptions.setThisV(thisAssumption);
@ -882,20 +882,20 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
if(!field.isPublic())assumptions.add(field.createTypeAssumptions(this));
}
//Eine Assumption für den Standardkonstruktor:
// (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt)
//auskommentiert, da der Standardkonstruktor beim Parser-Postprocessing angefügt wird.
//if(assumptions.getMethodAssumptions(this.getName(), "<init>").size()==0){ //Falls kein Konstruktor für diese Klasse definiert wurde:
//Eine Assumption für den Standardkonstruktor:
// (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt)
//auskommentiert, da der Standardkonstruktor beim Parser-Postprocessing angefügt wird.
//if(assumptions.getMethodAssumptions(this.getName(), "<init>").size()==0){ //Falls kein Konstruktor für diese Klasse definiert wurde:
// assumptions.addMethodAssumption(new RefType(this.getName(),0), "<init>", new RefType(this.getName(),0), new Menge<CParaTypeAssumption>());
//}
this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden.
this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden.
return assumptions;
}
/*
public ConstraintsSet TYPE(Menge<Method> methodList, Menge<Expr> fielddeclarationList, TypeAssumptions assumptions){
ConstraintsSet ret = new ConstraintsSet();
// Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode.
// Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode.
//TypeAssumptions assumptionsPlusFieldAssumptions = new TypeAssumptions(assumptions);
for(Expr expr : fielddeclarationList){
//ret.add(expr.TYPEStmt(assumptionsPlusFieldAssumptions));
@ -912,9 +912,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
// ino.method.RetType.23119.defdescription type=javadoc
/**
* Liefert den berechneten ¿½ckgabetyp ¿½r die �bergebene Methode zur�ck.<br/>
* (siehe Algorithmus RetType, Martin Pl�micke)
* <br/>Author: ¿½rg ¿½uerle
* Liefert den berechneten ¿½ckgabetyp ¿½r die �bergebene Methode zur�ck.<br/>
* (siehe Algorithmus RetType, Martin Pl�micke)
* <br/>Author: ¿½rg ¿½uerle
* @param me
* @param V
* @return
@ -936,7 +936,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
*/
// ino.method.toString.23125.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
@ -954,7 +954,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
// ino.method.wandleRefTypeAttributes2GenericAttributes.23128.defdescription type=javadoc
/**
* Alle Methoden der Klassen überprüfen, ob sie als
* Alle Methoden der Klassen überprüfen, ob sie als
* RefType deklarierte Attribute haben, die aber GenericTypeVars sind
* und ggf. ersetzen
*
@ -1043,7 +1043,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
/**
* Generiert den JavaCode dieser Klasse im Falle für das übergebene resultSet.
* Generiert den JavaCode dieser Klasse im Falle für das übergebene resultSet.
* Dem ResultSet entsprechend werden in diesem Java-Code die TypePlaceholder durch die in ResultSet stehenden Typen ersetzt.
* @return Java-Sourcefile
*/
@ -1073,7 +1073,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
classBodyCode.attach(bodyString);
//Zuerst die generischen Parameter für diese Klasse berechnen:
//Zuerst die generischen Parameter für diese Klasse berechnen:
//this.createGenericTypeVars(classBodyCode.getUnresolvedTPH());
if(this.genericClassParameters != null && this.genericClassParameters.size()>0){
@ -1094,9 +1094,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
}
/**
* Errechnet die Generischen Parameter der Klasse für diese Klasse.
* Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben.
* @param tphs : Alle übriggebliebenen TypePLaceholder
* Errechnet die Generischen Parameter der Klasse für diese Klasse.
* Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben.
* @param tphs : Alle übriggebliebenen TypePLaceholder
private void createGenericTypeVars(Menge<TypePlaceholder> tphs){
this.genericClassParameters = new GenericDeclarationList(new Menge<GenericTypeVar>());
@ -1107,8 +1107,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
}
*/
/**
* Errechnet die Generischen Parameter der Klasse für diese Klasse.
* Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben.
* Errechnet die Generischen Parameter der Klasse für diese Klasse.
* Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben.
* @param reconstructionResult
public void createGenericTypeVars(TypeinferenceResultSet reconstructionResult){
@ -1193,7 +1193,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
}
this.fielddecl = tempFields;
//Prüfen ob ein Konstruktor vorhanden ist:
//Prüfen ob ein Konstruktor vorhanden ist:
boolean constructorVorhanden = false;
for(Field f : this.getFields()){
if(f instanceof Constructor){
@ -1201,7 +1201,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
break;
}
}
if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden:
if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden:
Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName().toString(), this));
this.addField(standardKonstruktor);
}
@ -1289,7 +1289,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
@Override
public int getGenericVarDeclarationOffset(){
// Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn
// Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn
if(this.genericClassParameters != null){
return this.genericClassParameters.getEndOffset();
}else{
@ -1299,7 +1299,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
/**
* Die Super Klasse dieser Klasse.
* @return null für Klasse Object
* @return null für Klasse Object
*/
public Type getSuperClass(){
return this.superClass;

View File

@ -103,7 +103,7 @@ Paratyp gesetzt."); }
/**
* @author Andreas Stadelmeier, a10023
* Fügt der Klasse eine Feld hinzu.
* Fügt der Klasse eine Feld hinzu.
* @param feld
*/
public void addField(Field i)
@ -305,7 +305,7 @@ public void istParameterOK( Menge Parameter, Menge<Class> KlassenVektor )
{
if( ((RefType)TempParameter).get_ParaList().size() != KlassenVektor.elementAt(k).get_ParaList().size() )
{
parserlog.error( "SEMANTIK-CHECK-FEHLER: Parameteranzahl von\n" + TempParameter.getName() + " stimmt mit der Klassendefinition\n" + KlassenVektor.elementAt(k).getName() + " nicht �berein.", Section.OLD );
parserlog.error( "SEMANTIK-CHECK-FEHLER: Parameteranzahl von\n" + TempParameter.getName() + " stimmt mit der Klassendefinition\n" + KlassenVektor.elementAt(k).getName() + " nicht �berein.", Section.OLD );
System.exit( 1 );
}
else
@ -332,7 +332,7 @@ public void istParameterOK( Menge Parameter, Menge<Class> KlassenVektor )
}
else
{
// Tylose Variablen ¿½rfen nicht deklariert sein
// Tylose Variablen ¿½rfen nicht deklariert sein
for( int k = 0; k < KlassenVektor.size(); k++)
{
if( KlassenVektor.elementAt(k).getName().equals(TempParameter.getName()) )
@ -350,7 +350,7 @@ public void istParameterOK( Menge Parameter, Menge<Class> KlassenVektor )
// ino.method.toString.23203.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -18,8 +18,8 @@ public class ClassHelper
/**
* HOTI
* Diese Methode sucht in der Klassendefinition nach einen GTV, die
* so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden
* hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls
* so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden
* hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls
* angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert
* die Methode <b>null</b>.
* @param type

View File

@ -79,7 +79,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta
public Menge<DeclId> getDeclIdMenge()
{
// otth: ganzer Vektor zur�ckgeben, um ihn zu kopieren (vgl. MyCompiler - Konstruktor in Methode umwandeln)
// otth: ganzer Vektor zur�ckgeben, um ihn zu kopieren (vgl. MyCompiler - Konstruktor in Methode umwandeln)
return declid;
}
@ -95,7 +95,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta
public abstract JavaCodeResult printJavaCode(ResultSet resultSet);
/**
* Diese Methode generiert die Assumptions für dieses Feld der Klasse classmember
* Diese Methode generiert die Assumptions für dieses Feld der Klasse classmember
* @param classmember
* @return
*/
@ -150,7 +150,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta
@Override
public int getGenericVarDeclarationOffset(){
// Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn
// Falls Generische Parameterliste vorhanden, hier Wert der Liste zurückgegebn
if(this.genericParameters != null){
return this.genericParameters.getEndOffset();
}else{

View File

@ -21,7 +21,7 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
/**
* Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung
* Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung
* Beispiel: 'public Feld FeldVar = FeldWert;'
* @author janulrich
*
@ -33,8 +33,8 @@ public class FieldDeclaration extends Field{
//private Menge<GenericTypeVar> parameter;
/**
* Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig.
* Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig.
* Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig.
* Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig.
*/
public FieldDeclaration(String name, Type typ){
super(0);//Dieser Deklarator wird nicht vom Parser aufgerufen. Dadurch gibt es auch keinen Offset
@ -88,7 +88,7 @@ public class FieldDeclaration extends Field{
//////////////////////////////
TypeAssumptions assumptions = new TypeAssumptions();
/*
* Der Feld-Assumption muss ein TPH als Typ hinzugefügt werden, falls er Typlos initialisiert wurde. Dies kann auch der Type-Algorithmus der Inst/FieldVar - Klasse machen.
* Der Feld-Assumption muss ein TPH als Typ hinzugefügt werden, falls er Typlos initialisiert wurde. Dies kann auch der Type-Algorithmus der Inst/FieldVar - Klasse machen.
* Wird das Feld mit einem Typ initialisiert so muss dieser auch in die Assumptions.
*/
if(this.getType() == null)throw new TypeinferenceException("Der Typ eines Feldes darf nicht null sein", this);
@ -117,7 +117,7 @@ public class FieldDeclaration extends Field{
@Override
public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) {
if(this.wert == null && (this.getType() == null || this.getType() instanceof TypePlaceholder))
throw new TypeinferenceException("Typlose Felder müssen mit Wert initialisiert werden", this);
throw new TypeinferenceException("Typlose Felder müssen mit Wert initialisiert werden", this);
ConstraintsSet ret = new ConstraintsSet();
TypeAssumptions localAssumptions = publicAssumptions.clone();
@ -151,7 +151,7 @@ public class FieldDeclaration extends Field{
ret.add(c1); //Damit die TypVariable des Felds in den Constraints auftaucht
if(this.wert!=null){
//Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement:
//Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement:
ret.add(this.wert.TYPEExpr(localAssumptions));
ret.add(new SingleConstraint(this.wert.getType().TYPE(localAssumptions,this), thisType));
}
@ -161,7 +161,7 @@ public class FieldDeclaration extends Field{
@Override
public void wandleRefTypeAttributes2GenericAttributes(Menge<Type> paralist){
super.wandleRefTypeAttributes2GenericAttributes(paralist);
if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge<GenericTypeVar>()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben
if(this.getWert()!=null)this.getWert().wandleRefTypeAttributes2GenericAttributes(paralist, new Menge<GenericTypeVar>()); //FieldDeclaration hat keine Generischen Variablen, daher leere Liste übergeben
}
}

View File

@ -43,7 +43,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns
@Override
public boolean equals(Object object) {
//if(!super.equals(object))return false; //Nicht die Position im SyntaxBaum prüfen.
//if(!super.equals(object))return false; //Nicht die Position im SyntaxBaum prüfen.
if(!(object instanceof FormalParameter))return false;
FormalParameter equals = (FormalParameter)object;
if((this.type==null)!=(equals.type == null))return false;
@ -56,7 +56,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns
// ino.method.setType.23404.defdescription type=javadoc
/**
* <br/>Author: ¿½rg ¿½uerle
* <br/>Author: ¿½rg ¿½uerle
* @param t
*/
// ino.end
@ -142,7 +142,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns
// ino.method.getLineNumber.23425.defdescription type=javadoc
/**
* <br/>Author: ¿½rg ¿½uerle
* <br/>Author: ¿½rg ¿½uerle
* @return
*/
// ino.end
@ -158,7 +158,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns
// ino.method.getTypeLineNumber.23431.defdescription type=javadoc
/**
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @return
*/
// ino.end

View File

@ -6,7 +6,7 @@ import de.dhbwstuttgart.typeinference.Menge;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
/**
* Wird von allen Klassen implementiert, welche generische Parameter halten können. (Class, Method und Field)
* Wird von allen Klassen implementiert, welche generische Parameter halten können. (Class, Method und Field)
* @author janulrich
*
*/

View File

@ -14,7 +14,7 @@ import de.dhbwstuttgart.syntaxtree.misc.UsedId;
* HOTI 4.5.06
* Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-)
* Der Parser kann keine Generischen Typen darstellen, damit trotzdem
* an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung...
* an amap Stellen die Typsicherheit gewährleistet ist, hier eine Kapselung...
*/
// ino.end
// ino.class.ImportDeclarations.23434.declaration

View File

@ -86,7 +86,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
// ino.attribute.m_LineNumber.23512.declaration
private int m_LineNumber = MyCompiler.NO_LINENUMBER;
// ino.end
private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006
private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006
// ino.attribute.inferencelog.23515.declaration
protected static Logger inferencelog = Logger.getLogger("inference");
// ino.end
@ -389,7 +389,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
// ino.end
// ino.method.getOffset.23590.defdescription type=line
// hinzugef�gt hoth: 07.04.2006
// hinzugef�gt hoth: 07.04.2006
// ino.end
// ino.method.getOffset.23590.definition
public int getOffset()
@ -410,7 +410,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
// ino.end
// ino.method.setOffset.23596.defdescription type=line
// hinzugef�gt hoth: 07.04.2006
// hinzugef�gt hoth: 07.04.2006
// ino.end
// ino.method.setOffset.23596.definition
public void setOffset(int Offset)
@ -439,7 +439,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
// ino.method.toString.23605.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
@ -529,8 +529,8 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
public ConstraintsSet TYPE(TypeAssumptions ass) {
ConstraintsSet ret = new ConstraintsSet();
TypeAssumptions localAss = new TypeAssumptions();
localAss.add(ass); //Die globalen Assumptions anhängen
//Generische Parameterdeklarationen den Assumptions anfügen:
localAss.add(ass); //Die globalen Assumptions anhängen
//Generische Parameterdeklarationen den Assumptions anfügen:
for(GenericTypeVar gtv : this.getGenericParameter()){
localAss.add(gtv.createAssumptions());
}
@ -549,7 +549,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
this.returntype = replaceType;
}
*/
//Die Parameter zu den Assumptions hinzufügen:
//Die Parameter zu den Assumptions hinzufügen:
if(this.parameterlist!=null)for(FormalParameter param : this.parameterlist){
param.setType(param.getType().checkTYPE(localAss, this));
@ -567,7 +567,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
localAss.addAssumption(new ParameterAssumption(param));
}
ret.add(this.block.TYPEStmt(localAss));
//eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode:
//eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode:
ret.add(new SingleConstraint(this.block.getType().TYPE(localAss, this), this.returntype.TYPE(localAss, this)));
return ret;
}
@ -629,7 +629,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
//methodList.addElement(method);
//¿½r V_fields_methods:
//¿½r V_fields_methods:
CMethodTypeAssumption methodAssum = new CMethodTypeAssumption(classmember.getType(), this.get_Method_Name(), this.getType(), this.getParameterCount(),this.getLineNumber(),this.getOffset(),new Menge<Integer>(),this.getGenericMethodParameters()); // Typannahme bauen...
@ -642,7 +642,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
this.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID());
//¿½r die V_i:
//¿½r die V_i:
CTypeAssumptionSet localAssum = new CTypeAssumptionSet();
//Bauen...
@ -650,7 +650,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
if(parameterList!=null){
for(int i=0; i<parameterList.sc_get_Formalparalist().size(); i++){
FormalParameter para = parameterList.sc_get_Formalparalist().elementAt(i);
// ¿½r V_fields_methods:
// ¿½r V_fields_methods:
CParaTypeAssumption paraAssum = new CParaTypeAssumption(classmember.getName(), this.get_Method_Name(), this.getParameterCount(), this.getOverloadedID(),para.get_Name(), para.getType(), para.getLineNumber(),para.getOffset(),new Menge<Integer>());
//fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006
Class.isFirstLocalVarDecl=false;
@ -660,15 +660,15 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
methodAssum.addParaAssumption(paraAssum);
// ¿½r die V_i:
// ¿½r die V_i:
CLocalVarTypeAssumption varAssum = new CLocalVarTypeAssumption(classmember.getName(), this.get_Method_Name(), this.getParameterCount(), this.getOverloadedID(),"1", para.get_Name(),para.getType(), para.getLineNumber(),para.getOffset(),new Menge<Integer>());
localAssum.addElement(varAssum);
//rememberLocals.addElement(varAssum);
}
}
//...und hinzuf�gen:
//...und hinzuf�gen:
assumptions.add(localAssum);//Assumptions für lokale Variablen den Assumptions hinzufügen
assumptions.add(localAssum);//Assumptions für lokale Variablen den Assumptions hinzufügen
//Hier wird der Typ der als Assumption eingetragen wird in die Variable assumedType dieser Klasse geschrieben:
if(this.assumedType == null) // Falls der Typ nicht schon gesetzt ist. Das ist der Fall, falls die Methode ein Konstruktor ist
@ -682,7 +682,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
@Override
public void parserPostProcessing(SyntaxTreeNode parent){
if(this.getType()==null)this.setType(TypePlaceholder.fresh(this));
//Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung:
//Bei dem Elterntyp der Methode darf es sich nur um eine Klasse handeln, daher Cast ohne Prüfung:
//Class parentClass = (Class)parent;
if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this);
super.parserPostProcessing(parent);
@ -714,7 +714,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
// Methode und Block teilen sich einen ReturnType:
//this.block.setType(t);
this.returntype = t;
this.returntype.parent = this; //TODO: Dieser Hack sollte nicht nötig sein. (Parser ändern)
this.returntype.parent = this; //TODO: Dieser Hack sollte nicht nötig sein. (Parser ändern)
}
/**

View File

@ -105,7 +105,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterable<FormalPara
// ino.method.getParameterCount.23641.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Author: ¿½rg ¿½uerle<br/>
* @return Die Anzahl der Parameter
*/
// ino.end
@ -132,7 +132,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterable<FormalPara
public String toString(){
if(formalparameter == null)return "[]"; //"Leere Parameterliste";
//String ret = "ParameterListe, "+formalparameter.size()+" Einträge [ ";
//String ret = "ParameterListe, "+formalparameter.size()+" Einträge [ ";
String ret = " [ ";
for(FormalParameter param : this.formalparameter){
ret += param.toString()+", ";

View File

@ -74,9 +74,9 @@ public class SourceFile
/**
* @autor HOTI
* Wenn dieses Flag auf <b>true</b> gesetzt ist, wird immer als Superklasse Object
* mit rein geladen. Dies hat natürlich zur Folge, dass man in der GUI jeden Typ
* auswählen muss, weil ALLES in Java von Object erbt. Sobald die GUI das über eine
* Checkbox o.ä. ausblendbar macht kann es aktiviert werden. Ebenso beeinflusst es
* mit rein geladen. Dies hat natürlich zur Folge, dass man in der GUI jeden Typ
* auswählen muss, weil ALLES in Java von Object erbt. Sobald die GUI das über eine
* Checkbox o.ä. ausblendbar macht kann es aktiviert werden. Ebenso beeinflusst es
* die superclass von allen Class-Objekten. (Wenn true ist jede Class automatisch
* wenn nicht anders eingegeben Subclass von Object (Wie es sein muss))
*/
@ -87,7 +87,7 @@ public class SourceFile
// ino.attribute.READ_BASE_TYPE_SUPERCLASSES_FROM_JRE.21364.decldescription type=javadoc
/**
* Wenn dieses Flag auf <b>false</b> ist, werden für alle Basisklassen (definiert
* Wenn dieses Flag auf <b>false</b> ist, werden für alle Basisklassen (definiert
* durch die Hashtable baseTypeTranslationTable) KEINE Superklassen geladen. D.h.
* Integer hat bspw. nicht die Superklasse Number sondern OBJECT.
* Dies verursacht bei den Int-Operationen ein Problem
@ -100,7 +100,7 @@ public class SourceFile
/**
* @autor PL
* Wenn dieses Flag auf <b>false</b> ist, werden für alle importierten Klassen
* Wenn dieses Flag auf <b>false</b> ist, werden für alle importierten Klassen
* KEINE Superklassen geladen.
*/
private static final boolean READ_IMPORTED_SUPERCLASSES_FROM_JRE = false;
@ -128,7 +128,7 @@ public class SourceFile
// ino.end
/**
* Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei.
* Die SourceFile repräsntiert eine zu einem Syntaxbaum eingelesene Java-Datei.
* SourceFile stellt dabei den Wurzelknoten des Syntaxbaumes dar.
*/
public SourceFile(){
@ -178,12 +178,12 @@ public class SourceFile
// ino.end
// ino.attribute.baseTypeTranslationTable.21385.decldescription type=javadoc
/**
* Table zum Übersetzen der nicht implementierten Base-Types:
* Überall im Compiler wird statt bspw. int Integer verwendet
* Table zum Übersetzen der nicht implementierten Base-Types:
* Überall im Compiler wird statt bspw. int Integer verwendet
* d.h. 1+2 liefert ein Integer
* Deshalb benötigen wir hier eine Tabelle, mit der man die von
* Deshalb benötigen wir hier eine Tabelle, mit der man die von
* der JRE gelieferten Base-Typen (int,char, etc) und die Objekt-
* Typen umwandeln können
* Typen umwandeln können
*/
// ino.end
// ino.attribute.baseTypeTranslationTable.21385.declaration
@ -295,7 +295,7 @@ public class SourceFile
// ino.method.makeFC.21403.defdescription type=javadoc
/**
* Erstellt die Finite Closure
* @return FC_TTO-Object, welches die Finite Closure repräsentiert
* @return FC_TTO-Object, welches die Finite Closure repräsentiert
*/
// ino.end
// ino.method.makeFC.21403.definition
@ -311,7 +311,7 @@ public class SourceFile
globalAssumptions.add(this.getPublicFieldAssumptions());
// 1. Menge <= in FC aufnehmen --> Iteration ueber alle Klassen
Menge<Type> ignoreTypes = new Menge<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen.
Menge<Type> ignoreTypes = new Menge<>(); //Enthält die Typen, welche nicht in der FC als Supertypen enthalten sein sollen.
ignoreTypes.add(new RefType("Long",null,-1).TYPE(globalAssumptions, parent).getType());
ignoreTypes.add(new RefType("Float",null,-1).TYPE(globalAssumptions, parent).getType());
ignoreTypes.add(new RefType("Double",null,-1).TYPE(globalAssumptions, parent).getType());
@ -327,10 +327,10 @@ public class SourceFile
//System.out.println("FCPair: "+p);
if(! t1.equals(t2)){//Um FC_TTO darf kein T <. T stehen.
Type superTypeFromAssumptions = ass.getTypeFor(t2, t2).getType(); //In den Assumptions den SuperTyp nachschlagen
if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt.
if(superTypeFromAssumptions != null && ! ignoreTypes.contains(superTypeFromAssumptions)){//Die Superklasse eines Typs nur anfügen, wenn er auch in den Assumptions vorkommt.
vFC.add(p);
}
basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen
basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen
}else{
//System.out.println("Wurde nicht aufgenommen");
}
@ -403,7 +403,7 @@ public class SourceFile
// konkret: rechte Seite von FC nach Typkonstruktoren in der Parameterliste durchsuchen
for( int n = 0; n < vFC.size(); n++ )
{
// Elemente in FC ¿½nnen nur Pair's sein --> Cast ohne Abfrage
// Elemente in FC ¿½nnen nur Pair's sein --> Cast ohne Abfrage
Pair PTypKonst = vFC.elementAt(n);
// Parameter des rechten Typausdrucks des betrachteten Paars extrahieren
@ -445,7 +445,7 @@ public class SourceFile
{
inferencelog.debug(" gefundener Typ links: " + ((RefType)(PSuchen.TA1)).getName(), Section.FINITECLOSURE );
inferencelog.debug(" gefundener Typ rechts: " + ((RefType)(PSuchen.TA2)).getName() , Section.FINITECLOSURE);
// Paar gefunden, das als linken Typ den gleichen Typen enth�lt, der als Parameter einen Typkonstruktor hat
// Paar gefunden, das als linken Typ den gleichen Typen enth�lt, der als Parameter einen Typkonstruktor hat
// Substitution
//Pair P = new Pair( PSuchen.getTA1Copy( ), PSuchen.getTA2Copy( ) );
//linker Typterm bleibt gleich
@ -498,7 +498,7 @@ public class SourceFile
// new RefType( (RefType)vPara.elementAt(u) ),
// false ); // rechte Seite substituieren
//Es genuegt die rechte Seite zu substituieren, da
//die linke Seite ein Typterm ausschlie�lich mit
//die linke Seite ein Typterm ausschlie�lich mit
//Typvariablen ist
}
//Unify.SubstHashtableGeneric(((RefType)P.TA1), hts); //funktioniert nicht
@ -597,7 +597,7 @@ public class SourceFile
}
} // end for: linke Seite suchen
} // end if: Element ist RefType
} // end for: Transitivit�ten berechnen
} // end for: Transitivit�ten berechnen
//PL HIER REFLEXIVE HUELLE EINFUEGEN
// 05-01-07
@ -658,13 +658,13 @@ public class SourceFile
/////////////////////////////////////////////////////////////////////////
// ino.method.typeReconstruction.21406.defdescription type=javadoc
/**
* Tyrekonstruktionsalgorithmus: ruft ¿½r jede Klasse den Algorithmus TRProg auf.
* Dessen Ergebnismenge A, die Menge aller Typannahmen, ¿½r eine Klasse dient als
* Eingabe ¿½r TRProg der ¿½chsten Klasse. Am Ende enth�lt A alle ¿½glichen
* Typkombinationen ¿½r alle Klassen zusammen.
* <br>Author: ¿½rg ¿½uerle
* @return Liste aller ¿½glichen Typkombinationen
* @throws CTypeReconstructionException Wenn was schief ¿½uft
* Tyrekonstruktionsalgorithmus: ruft ¿½r jede Klasse den Algorithmus TRProg auf.
* Dessen Ergebnismenge A, die Menge aller Typannahmen, ¿½r eine Klasse dient als
* Eingabe ¿½r TRProg der ¿½chsten Klasse. Am Ende enth�lt A alle ¿½glichen
* Typkombinationen ¿½r alle Klassen zusammen.
* <br>Author: ¿½rg ¿½uerle
* @return Liste aller ¿½glichen Typkombinationen
* @throws CTypeReconstructionException Wenn was schief ¿½uft
*/
// ino.end
// ino.method.typeReconstruction.21406.definition
@ -678,7 +678,7 @@ public class SourceFile
//Logger initialisieren:
Logger typinferenzLog = Logger.getLogger("Typeinference");
//Alle Assumptions für diese SourceFile sammeln:
//Alle Assumptions für diese SourceFile sammeln:
for(Class klasse : this.KlassenVektor){
globalAssumptions.add(klasse.getPublicFieldAssumptions());
}
@ -703,14 +703,14 @@ public class SourceFile
//Karthesisches Produkt bilden:
////////////////
//Unmögliche ConstraintsSets aussortieren durch Unifizierung
//Unmögliche ConstraintsSets aussortieren durch Unifizierung
Unifier unifier = (pairs)->{
Menge<Menge<Pair>> retValue = new Menge<>();
retValue = Unify.unify(pairs, finiteClosure);
return retValue;};
//oderConstraints.filterWrongConstraints(unifier);
oderConstraints.unifyUndConstraints(unifier);
typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE);
typinferenzLog.debug("Übriggebliebene Konstraints:\n"+oderConstraints+"\n", Section.TYPEINFERENCE);
//Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden):
Menge<Menge<Pair>> xConstraints = oderConstraints.cartesianProduct();
/*
@ -731,10 +731,10 @@ public class SourceFile
//////////////////////////////
boolean unifyFail = true;
for(Menge<Pair> constraints : xConstraints){
//Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen:
//Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen:
Menge<Menge<Pair>> result = new Menge<Menge<Pair>>();
//Alle FunN-Typen werden per clone-methode in RefTypes verwandelt. (Die clone Methode in FunN darf nicht überschrieben werden.
//Alle FunN-Typen werden per clone-methode in RefTypes verwandelt. (Die clone Methode in FunN darf nicht überschrieben werden.
for(Pair p : constraints){
if(p.TA1 instanceof FunN){
p.TA1 = p.TA1.clone();
@ -802,7 +802,7 @@ public class SourceFile
).collect(Menge::new, Menge::add, Menge::addAll);
//Schritt 2: Schnittmengen jedes Elements mit jedem Elememt von vars bilden und dann index zusammenfassen
//in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen
//in indexset sind dann die Mengen von Indizes enthalten, die gemeisam unifiziert wreden müssen
Menge<Menge<Integer>> indexeset = new Menge<>();
if (constraintsclonevars != null && constraintsclonevars.size()>0) {
indexeset = Unify.schnitt(constraintsclonevars);
@ -880,7 +880,7 @@ public class SourceFile
});
//Menge<Menge<Pair>> unifyResult = Unify.unify(constraintsClone, finiteClosure);
//Dann den Ergebnissen anfügen
//Dann den Ergebnissen anfügen
result.addAll(unifyResult);
// Debugoutput:Menge<Menge<Pair>>
@ -888,10 +888,10 @@ public class SourceFile
//typinferenzLog.debug("Unifiziertes Ergebnis: "+result, Section.TYPEINFERENCE);
/*
// Prüfe ob eindeutige Lösung:
// Prüfe ob eindeutige Lösung:
if(result.size()>1 && !Unify.hasSolvedForm(result.elementAt(0))){
typinferenzLog.debug("Keine eindeutige Lösung!");
typinferenzLog.debug("Keine eindeutige Lösung!");
}else if(result.size()>1){
@ -912,9 +912,9 @@ public class SourceFile
//typinferenzLog.debug(this.printJavaCode(new ResultSet(new Menge<Pair>())));
//Für jede Klasse in diesem SourceFile gilt das selbe ResultSet:
//Für jede Klasse in diesem SourceFile gilt das selbe ResultSet:
for(Class klasse : this.KlassenVektor){
//Der Unifikationsalgorithmus kann wiederum auch mehrere Lösungen errechnen, diese werden im folgenden durchlaufen:
//Der Unifikationsalgorithmus kann wiederum auch mehrere Lösungen errechnen, diese werden im folgenden durchlaufen:
for(Menge<Pair> resultSet : result){
unifyFail = false; //Ein Unifiziertes Ergebnis ist entstanden (es kann auch leer sein, das bedeutet nur, dass die Constraints mindestens in einem Fall Sinn ergaben)
//Add Result set as a new ReconstructionResult to ret:
@ -922,7 +922,7 @@ public class SourceFile
ret.add(reconstructionResult);
//ResultSet res = new ResultSet(resultSet);
typinferenzLog.debug("JavaFile für ResultSet "+reconstructionResult+"\n", Section.TYPEINFERENCE);
typinferenzLog.debug("JavaFile für ResultSet "+reconstructionResult+"\n", Section.TYPEINFERENCE);
typinferenzLog.debug(klasse.printJavaCode(reconstructionResult), Section.TYPEINFERENCE);
}
@ -934,8 +934,8 @@ public class SourceFile
return ret;
/*
// HOTI: Nur zur Info.Ich habe den Loglevel auf Info geschaltet, damit
// in der GUI (Eclipse-Plugin) die Console nicht zugemüllt wird.
// Wers braucht kanns natürlich ausschalten
// in der GUI (Eclipse-Plugin) die Console nicht zugemüllt wird.
// Wers braucht kanns natürlich ausschalten
// inferencelog.setLevel(Level.INFO);
@ -966,7 +966,7 @@ public class SourceFile
this.KlassenVektor);
}
// HOTI 04-13-06 Alle Methoden der Klassen überprüfen, ob sie als
// HOTI 04-13-06 Alle Methoden der Klassen überprüfen, ob sie als
// RefType deklarierte Attribute haben, die aber GenericTypeVars sind
// Bsp.:
// bei public E elementAt(i){...} wird E vorerst als RefType erkannt
@ -1014,10 +1014,10 @@ public class SourceFile
inferencelog.info("Rufe \"SourceFile.makeFC()\"...");
inferencelog.info("������������������������������������");
inferencelog.info("������������������������������������");
FC_TTO finiteClosure = this.makeFC();
inferencelog.info("������������������������������������");
inferencelog.info("Bin aus \"SourceFile.makeFC()\" zur�ck.");
inferencelog.info("������������������������������������");
inferencelog.info("Bin aus \"SourceFile.makeFC()\" zur�ck.");
this.removeBasicAssumptions();
// PL 05-08-02
@ -1031,19 +1031,19 @@ public class SourceFile
Interface intf = intf_it.next();
// HOTI In diesem Moment gibt es nur _eine_ potentielle CTypeReconstructionResult, d.h.
// dort nnen die Definitionen der Interfaces (Methodintersectiontypes, FieldDecls) abgelegt werden
// dort nnen die Definitionen der Interfaces (Methodintersectiontypes, FieldDecls) abgelegt werden
//intf.addThisToAssumptions(basics);
}
// Fuer jede Klasse die Assumptions der öffentlichen Felder zusammentragen:
// Fuer jede Klasse die Assumptions der öffentlichen Felder zusammentragen:
TypeAssumptions publicFieldsAssumptions = new TypeAssumptions();
for(Class cl : KlassenVektor){
publicFieldsAssumptions.add(cl.getPublicFieldAssumptions());
}
// Die BasicAssumptions anfügen:
// Die BasicAssumptions anfügen:
publicFieldsAssumptions.add(this.getBasicAssumptions());
// Fuer jede Klasse separat den TRA aufrufen
@ -1064,7 +1064,7 @@ public class SourceFile
* Erstellt die Basic Assumptions (siehe MakeBasicAssumptions) als AssumptionSet
* @return
@Deprecated //angefügt von Andreas Stadelmeier. Grund: Die Funktion wurde neu als makeBasicAssumptionsFromJRE angelegt
@Deprecated //angefügt von Andreas Stadelmeier. Grund: Die Funktion wurde neu als makeBasicAssumptionsFromJRE angelegt
private TypeAssumptions getBasicAssumptions() {
TypeAssumptions ret = new TypeAssumptions(null);
@ -1077,7 +1077,7 @@ public class SourceFile
mod.addModifier(new Public());
// Für jede einzelne Klasse
// Für jede einzelne Klasse
while (imports.size()>0) {
UsedId importDecl = imports.get(0);
@ -1209,9 +1209,9 @@ public class SourceFile
}*/
/**
* Erstellt die Assumptions der standardmäßig importierten Packages (java.lang.) sowie der von imports übergebenen Klassen zusammen.
* Erstellt die Assumptions der standardmäßig importierten Packages (java.lang.) sowie der von imports übergebenen Klassen zusammen.
* @param imports
* @param withSuptypes - Gibt an, ob auch die subklassen der Packages den Assumptions angefügt werden sollen.
* @param withSuptypes - Gibt an, ob auch die subklassen der Packages den Assumptions angefügt werden sollen.
* @return
*/
private TypeAssumptions makeBasicAssumptionsFromJRE(Menge<UsedId> imports, boolean withSubtypes)
@ -1228,10 +1228,10 @@ public class SourceFile
Modifiers mod = new Modifiers();
mod.addModifier(new Public());
//Für Object:
//Für Object:
imports.add(new UsedId("java.lang.Object",-1));
// Für jede einzelne Klasse
// Für jede einzelne Klasse
while (imports.size()>0) {
UsedId importDecl = imports.get(0);
@ -1394,7 +1394,7 @@ public class SourceFile
return new Class("java.lang.Object",new Modifiers(), 0);
}
Menge<String> supertypeGenPara = new Menge<>();//Die Generischen Parameter für die Superklasse berechnen:
Menge<String> supertypeGenPara = new Menge<>();//Die Generischen Parameter für die Superklasse berechnen:
java.lang.reflect.TypeVariable[] superclassTVS=s.getTypeParameters();
for(int tvi=0;tvi<superclassTVS.length;tvi++){
supertypeGenPara.addElement(superclassTVS[tvi].getName());
@ -1404,7 +1404,7 @@ public class SourceFile
ret = new Class(s.getName(),ss.getType(),new Modifiers(),supertypeGenPara);
ass.addClassAssumption(new ClassAssumption(ss)); //Die beiden SuperKlassen den Assumptions anfügen...
ass.addClassAssumption(new ClassAssumption(ss)); //Die beiden SuperKlassen den Assumptions anfügen...
ass.addClassAssumption(new ClassAssumption(ret));
return ret;
@ -1439,7 +1439,7 @@ public class SourceFile
// ino.end
// ino.method.createTypeFromJavaGenericType.21415.body
{
/* auskommentiert, da die Klassen von Sun in der Open JDK 1.8 nicht unterstützt werden.
/* auskommentiert, da die Klassen von Sun in der Open JDK 1.8 nicht unterstützt werden.
if(type instanceof TypeVariableImpl){
TypeVariableImpl tvi=((TypeVariableImpl)type);
return(new GenericTypeVar(jreSpiderRegistry.get(tvi.getName()).getName().toString(),parentClass,-1));
@ -1467,10 +1467,10 @@ public class SourceFile
// ino.method.makeBasicAssumptions.21418.defdescription type=javadoc
/**
* Erzeugt die Anfangsinformationen �ber bereits bekannte Klassen.
* <br/>Achtung Workaround: Die RefTypes ¿½ssen sp�ter noch durch BaseTypes
* Erzeugt die Anfangsinformationen �ber bereits bekannte Klassen.
* <br/>Achtung Workaround: Die RefTypes ¿½ssen sp�ter noch durch BaseTypes
* ersetzt werden. <br>
* Author: ¿½rg ¿½uerle
* Author: ¿½rg ¿½uerle
*
* @return A priori Typinformationen
* @throws ClassNotFoundException
@ -1599,7 +1599,7 @@ public class SourceFile
// Menge bauen:
//------------------------
foo.addClassName("java.lang.Menge"); //PL 05-08-01 eingefuegt
TypePlaceholder E = TypePlaceholder.fresh(); // Sp�ter ersetzen durch GenericTypeVar
TypePlaceholder E = TypePlaceholder.fresh(); // Sp�ter ersetzen durch GenericTypeVar
Menge<GenericTypeVar> typeGenPara = new Menge<GenericTypeVar>();
typeGenPara.addElement(new GenericTypeVar(E.getName(),-1));
foo.addGenericTypeVars("java.lang.Menge", typeGenPara);
@ -1641,7 +1641,7 @@ public class SourceFile
*/
TypeAssumptions ret = new TypeAssumptions();
//Basic Assumptions für die FunN Interfaces:
//Basic Assumptions für die FunN Interfaces:
//TODO: Hier mehr als Fun1-Fun5 implementieren
for(int i = 0; i<6; i++){
FunNInterface funN = new FunNInterface(i);
@ -1649,7 +1649,7 @@ public class SourceFile
}
return ret; //TODO: Diese TypeAssumptions mit basic-Assumptions füllen
return ret; //TODO: Diese TypeAssumptions mit basic-Assumptions füllen
}
// ino.end
@ -1666,8 +1666,8 @@ public class SourceFile
// ino.method.removeBasicAssumptions.21424.defdescription type=javadoc
/**
* ¿½scht die Anfangsinformation wieder aus dem Klassenvektor
* <br/>Author: ¿½rg ¿½uerle
* ¿½scht die Anfangsinformation wieder aus dem Klassenvektor
* <br/>Author: ¿½rg ¿½uerle
*/
// ino.end
// ino.method.removeBasicAssumptions.21424.definition
@ -1687,11 +1687,11 @@ public class SourceFile
// ino.method.getPackageName.21427.defdescription type=javadoc
/**
* Erzeugt ¿½r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars
* Erzeugt ¿½r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars
* dieser Klasse gespeichert werden. Diese Mengeen werden unter den Klassennamen
* in der
* Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert.
* <br/>Author: ¿½rg ¿½uerle
* Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert.
* <br/>Author: ¿½rg ¿½uerle
* @param res
* /
* /*private void addClassNamesAndGenericsToRR(CTypeReconstructionResult res){

View File

@ -21,11 +21,11 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
/**
* Wird nach dem Parsen aufgerufen.
* Erfüllt folgenden Aufgaben:
* 1. Füllt fehlende Typangaben mit TPHs auf.
* 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent)
* Erfüllt folgenden Aufgaben:
* 1. Füllt fehlende Typangaben mit TPHs auf.
* 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent)
* 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus.
* 4. Führt einen Teil des Syntaxckecks durch.
* 4. Führt einen Teil des Syntaxckecks durch.
*
*/
public void parserPostProcessing(SyntaxTreeNode parent) {
@ -63,13 +63,13 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
SyntaxTreeNode equal = (SyntaxTreeNode)object;
if(!equal.getDescription().equals(this.getDescription()))return false;
if(this.getParent()!=null)
if(!this.getParent().equals(equal.getParent()))return false; //auch das Elternelement überprüfen.
if(!this.getParent().equals(equal.getParent()))return false; //auch das Elternelement überprüfen.
return true;
}
/**
* Methode zur Generierung der TypeInsertPoints
* @param insertSet - Generierte InsertPoints werden dem insertSet angefügt
* @param insertSet - Generierte InsertPoints werden dem insertSet angefügt
* @param result - Das ResultSet auf dessen Basis die InsertPoints generiert werden
*/
public void addTypeInsertPoints(TypeInsertSet insertSet,ResultSet result) {
@ -77,7 +77,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
node.addTypeInsertPoints(insertSet, result);
}
TypeInsertPoint tip = null; //Der TypInsertPoint für diesen Knoten
TypeInsertPoint tip = null; //Der TypInsertPoint für diesen Knoten
//Fall der Knoten ein TypeInsertable ist, kann direkt der TypeInsertPoint generiert werden.
if(this instanceof TypeInsertable){
TypeInsertable that = (TypeInsertable)this;
@ -87,7 +87,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
insertSet.add(tip);//ret.addAll(((TypePlaceholder)t).getTypeInsertPoints(result));
}
/*
//Für den Fall, dass dieser Knoten Generische Variablen halten kann.
//Für den Fall, dass dieser Knoten Generische Variablen halten kann.
if(that instanceof Generic && that.getOffset()>=0){
//Alle unresolvedTPHs ermitteln und GenericTypeVarInsertPoints bilden:
Menge<TypePlaceholder> uTPHs = insertSet.getUnresolvedTPHs();

View File

@ -54,7 +54,7 @@ public class DeclId
// ino.attribute.m_LineNumber.23295.declaration
private int m_LineNumber = MyCompiler.NO_LINENUMBER;
// ino.end
private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006
private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006
// ino.attribute.codegenlog.23298.decldescription type=line
// Logger fuer Code-Gen
// ino.end
@ -199,7 +199,7 @@ public class DeclId
Constant ct = new Constant(name, modifiers);
ct.setType(type);
if (!(wert instanceof Expr))
throw new JVMCodeException("Das Generieren einer Konstante dieses Typs wird nicht unterstützt!");
throw new JVMCodeException("Das Generieren einer Konstante dieses Typs wird nicht unterstützt!");
ct.setValue((Expr) wert);
ct.codegen( classfile, paralist);
@ -277,7 +277,7 @@ public class DeclId
// ino.end
// ino.method.getOffset.23349.defdescription type=line
// hinzugef�gt hoth: 07.04.2006
// hinzugef�gt hoth: 07.04.2006
// ino.end
// ino.method.getOffset.23349.definition
public int getOffset()
@ -289,7 +289,7 @@ public class DeclId
// ino.end
// ino.method.setOffset.23352.defdescription type=line
// hinzugef�gt hoth: 07.04.2006
// hinzugef�gt hoth: 07.04.2006
// ino.end
// ino.method.setOffset.23352.definition
public void setOffset(int Offset)
@ -302,7 +302,7 @@ public class DeclId
// ino.method.toString.23355.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -31,7 +31,7 @@ public class UsedId implements IItemWithOffset
// ino.attribute.vParaOrg.23672.declaration
public Menge<Type> vParaOrg = null; // otth: originale Parameterliste
// ino.end
private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006
private int m_Offset = -1; //hinzugef�gt hoth: 07.04.2006
// ino.method.UsedId.23675.definition
public UsedId(int offset)
@ -49,7 +49,7 @@ public class UsedId implements IItemWithOffset
}
// ino.method.getOffset.23678.defdescription type=line
// hinzugef�gt hoth: 07.04.2006
// hinzugef�gt hoth: 07.04.2006
// ino.end
// ino.method.getOffset.23678.definition
public int getOffset()
@ -70,7 +70,7 @@ public class UsedId implements IItemWithOffset
// ino.end
// ino.method.setOffset.23684.defdescription type=line
// hinzugef�gt hoth: 07.04.2006
// hinzugef�gt hoth: 07.04.2006
// ino.end
// ino.method.setOffset.23684.definition
public void setOffset(int Offset)
@ -219,7 +219,7 @@ public class UsedId implements IItemWithOffset
// ino.method.toString.23723.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
@ -228,7 +228,7 @@ public class UsedId implements IItemWithOffset
// ino.end
// ino.method.toString.23723.body
{
return this.get_Name_1Element();//name.toString(); //geändert von Andreas Stadelmeier
return this.get_Name_1Element();//name.toString(); //geändert von Andreas Stadelmeier
/*String s = "";
for(int i = 0; i<name.size();i++)
{

View File

@ -210,7 +210,7 @@ public class Assign extends Expr
// ino.method.toString.24960.defdescription type=javadoc
/**
* <br/>Author: Martin Pl<EFBFBD>micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -251,8 +251,8 @@ public class Binary extends BinaryExpr
ret.add(this.expr1.TYPEExpr(assumptions));
ret.add(this.expr2.TYPEExpr(assumptions));
/**
* Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter
* Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints.
* Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter
* Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints.
* @param expr1
* @param expr2
* @return

View File

@ -128,7 +128,7 @@ public class Block extends Statement
// ino.method.toString.25083.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
@ -174,7 +174,7 @@ public class Block extends Statement
typinferenceLog.debug("Prozessing statement: "+stmt, Section.TYPEINFERENCE);
ret.add(stmt.TYPEStmt(assumptions));
/* if((stmt instanceof Return)){
ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen.
ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen.
}
*/
}
@ -188,7 +188,7 @@ public class Block extends Statement
if (!(stmt.getReturnType() instanceof Void))
if (this.getReturnType() instanceof Void) {
//this.setTypeVariable(stmt.getTypeVariable());
throw new TypeinferenceException("Block besitzt falschen Rückgabetyp (fehlendes return-stmt)", this);
throw new TypeinferenceException("Block besitzt falschen Rückgabetyp (fehlendes return-stmt)", this);
}
else {
TypePlaceholder tph = TypePlaceholder.fresh(this);
@ -212,7 +212,7 @@ public class Block extends Statement
typinferenceLog.debug("Prozessing statement: "+stmt);
ret.add(stmt.TYPEStmt(assumptions));
if((stmt instanceof Return)){
ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen.
ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen.
}
}
return ret;

View File

@ -79,7 +79,7 @@ public class DoubleLiteral extends Literal
// ino.end
// ino.method.sc_check.25466.body
{
parserlog.debug("SC -> Semantik-Check f<EFBFBD>r DoubleLiteral wurde aufgerufen --> nichts zu tun!");
parserlog.debug("SC -> Semantik-Check f�r DoubleLiteral wurde aufgerufen --> nichts zu tun!");
}
// ino.end
*/
@ -142,7 +142,7 @@ public class DoubleLiteral extends Literal
// ino.method.toString.25484.defdescription type=javadoc
/**
* <br/>Author: Martin Pl<EFBFBD>micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -95,15 +95,15 @@ public abstract class Expr extends ExprStmt
/**
* @author AI10023 - Andreas Stadelmeier
* Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke
* Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke
* Jede Expression wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen.
*/
public abstract ConstraintsSet TYPEExpr(TypeAssumptions assumptions);
/**
* @author AI10023 - Andreas Stadelmeier
* Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss.
* Denn Expressions müssen diese Funktion nicht implementieren.
* Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss.
* Denn Expressions müssen diese Funktion nicht implementieren.
*/
@Override
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions){

View File

@ -52,7 +52,7 @@ public abstract class ExprStmt extends Statement
// ino.method.getTypeLineNumber.25291.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br>Author: J�rg ¿½uerle
* @return
*/
// ino.end

View File

@ -74,7 +74,7 @@ public class FloatLiteral extends Literal
// ino.end
// ino.method.sc_check.25466.body
{
parserlog.debug("SC -> Semantik-Check f<EFBFBD>r FloatLiteral wurde aufgerufen --> nichts zu tun!");
parserlog.debug("SC -> Semantik-Check f�r FloatLiteral wurde aufgerufen --> nichts zu tun!");
}
// ino.end
*/
@ -138,7 +138,7 @@ public class FloatLiteral extends Literal
// ino.method.toString.25484.defdescription type=javadoc
/**
* <br/>Author: Martin Pl<EFBFBD>micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -197,18 +197,18 @@ public class IfStmt extends Statement
int breakpoint2 = code.get_code_length();
if(!(else_block==null || else_block instanceof EmptyStmt))
{
//hama: Die zwei folgenen if-Abfragen wurden eingef�gt und beheben den Bug,
//der zuerst im Use Case Toggle1 bemerkt wurde. Hier wird nun gepr�ft ob der
//hama: Die zwei folgenen if-Abfragen wurden eingef�gt und beheben den Bug,
//der zuerst im Use Case Toggle1 bemerkt wurde. Hier wird nun gepr�ft ob der
//letzte Befehl in einem if-Block ein return war. Trifft dieser Fall zu,
//so wird kein goto Befehl (¿½r das �berspringen des else-Blocks eingef�gt)
//-> das verlangt die vm ->der code ¿½re nicht erreichbar.
//Allerdings ¿½nnte das return-Statement nat�rlich auch an einer anderen
//Stelle (nicht als letzter Befehl) stehen, ¿½r diesen Fall ¿½rfte die
//so wird kein goto Befehl (¿½r das �berspringen des else-Blocks eingef�gt)
//-> das verlangt die vm ->der code ¿½re nicht erreichbar.
//Allerdings ¿½nnte das return-Statement nat�rlich auch an einer anderen
//Stelle (nicht als letzter Befehl) stehen, ¿½r diesen Fall ¿½rfte die
//Codegenerierung noch nicht funktionieren. Hab versucht diesen Fall mit
//Toggle3 zu erzeugen - wird aber richtig generiert.
//letztes Statement im Menge in s schreiben
//Statement s = (Statement)(((Block)this.then_block).statements.lastElement());
//Instanz von Return zum pr�fen anlegen
//Instanz von Return zum pr�fen anlegen
Return r = new Return(getOffset(),getVariableLength());
if( !(((Block)this.then_block).statements.lastElement()).getClass().equals(r.getClass()) )
@ -252,7 +252,7 @@ public class IfStmt extends Statement
ConstraintsSet ret = new ConstraintsSet();
this.setType(TypePlaceholder.fresh(this));
ret.add(expr.TYPEExpr(assumptions)); // die Constraints für (expressionDesIfStmt)
ret.add(expr.TYPEExpr(assumptions)); // die Constraints für (expressionDesIfStmt)
ret.add(this.then_block.TYPEStmt(assumptions));
if(else_block!=null){
ret.add(this.else_block.TYPEStmt(assumptions));

View File

@ -80,7 +80,7 @@ public class InstVar extends Expr
// ino.method.InstVar.25414.defdescription type=javadoc
/**
* macht aus einem UsedId mit einem Menge von Strings eine InstVar
* <br/>Author: Martin Pl<EFBFBD>micke PL 05-08-17
* <br/>Author: Martin Pl�micke PL 05-08-17
* @param ui
* @return
*/
@ -180,7 +180,7 @@ public class InstVar extends Expr
// ino.method.toString.25441.defdescription type=javadoc
/**
* <br/>Author: Martin Pl<EFBFBD>micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -77,7 +77,7 @@ public class IntLiteral extends Literal
// ino.end
// ino.method.sc_check.25466.body
{
parserlog.debug("SC -> Semantik-Check f<EFBFBD>r IntLiteral wurde aufgerufen --> nichts zu tun!");
parserlog.debug("SC -> Semantik-Check f�r IntLiteral wurde aufgerufen --> nichts zu tun!");
}
// ino.end
*/
@ -138,7 +138,7 @@ public class IntLiteral extends Literal
// ino.method.toString.25484.defdescription type=javadoc
/**
* <br/>Author: Martin Pl<EFBFBD>micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -129,32 +129,32 @@ public class LambdaExpression extends Expr{
* TYPEExpr( Ass, Lambda( (x1 , . . . , xN ), expr|stmt ) ) =
* let
* AssArgs = { xi : ai | ai fresh type variables }
* (exprt : rty, ConS) = TYPEExpr( Ass AssArgs, expr )
* (exprt : rty, ConS) = TYPEExpr( Ass ∪ AssArgs, expr )
* | (stmtt : rty, ConS) = TYPEStmt( Ass u AssArgs, stmt )
* in
* (Lambda( (x1 : a1 , . . . , xN : aN ), exprt : rty|stmtt : rty ) : a,
* ConS { (FunN<rty, a1 , . . . , aN > a) }),
* ConS ∪ { (FunN<rty, a1 , . . . , aN > a) }),
* where a is a fresh type variable
*/
@Override
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
ConstraintsSet ret = new ConstraintsSet();
//Die Assumptions für die Parameter der LambdaExpression
//Die Assumptions für die Parameter der LambdaExpression
TypeAssumptions ArgumentAssumptions = new TypeAssumptions(this.getParentClass().getName());
Menge<Type> paramTypes = new Menge<Type>();
for(FormalParameter param : params.formalparameter){
if(param.getType()==null)param.setType(TypePlaceholder.fresh(this));
int offset = 0;
//Jeder Parameter der LambdaExpression wird als CParaTypeAssumption der Assumption liste hinzugefügt:
//Jeder Parameter der LambdaExpression wird als CParaTypeAssumption der Assumption liste hinzugefügt:
ArgumentAssumptions.addAssumption(new ParameterAssumption(param));
paramTypes.add(param.getType());
}
this.setType(TypePlaceholder.fresh(this));
//ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys:
//ArgumentAssumptions + assumptions ergeben die Assumptions für die Statements innerhalb des Lambda-Bodys:
ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression
//Die Constraints für ParameterTypen und Ret Typ erstellen:
//Die Constraints für ParameterTypen und Ret Typ erstellen:
Menge<Type> modifiedParamTypes = new Menge<>();
for(Type pT : paramTypes){
if(pT instanceof WildcardType){
@ -175,7 +175,7 @@ public class LambdaExpression extends Expr{
if(retType instanceof SuperWildcardType){
throw new TypeinferenceException("Typfehler von Parametertyp "+retType,this);
}else{
//retType bleibt unverändert
//retType bleibt unverändert
}
}else{
retType = new ExtendsWildcardType((ObjectType) retType);

View File

@ -148,7 +148,7 @@ public class LocalOrFieldVar extends Expr
// ino.method.toString.25534.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
@ -174,7 +174,7 @@ public class LocalOrFieldVar extends Expr
@Override
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
ConstraintsSet ret = new ConstraintsSet();
//gibt es eine Assumption für den die LocalOrFieldVar-Variablen, dann folgendes ausführen:
//gibt es eine Assumption für den die LocalOrFieldVar-Variablen, dann folgendes ausführen:
Type thisTypeAssumption = assumptions.getVarType(this.get_Name(), this.getParentClass());
if(thisTypeAssumption == null)throw new TypeinferenceException("Eine Variable "+this.get_Name()+" ist in den Assumptions nicht vorhanden",this);
Type thisType = thisTypeAssumption.checkTYPE(assumptions, this);

View File

@ -214,7 +214,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable
parserlog.debug(c.getName()+" "+c.get_ParaList().size());
SCStatementException ex = new SCStatementException();
SCExcept e = new SCExcept();
e.set_error("Klasse "+c.getName()+" �berhaupt garnicht parametrisiert!");
e.set_error("Klasse "+c.getName()+" �berhaupt garnicht parametrisiert!");
e.set_function("complete_parahashtable() --> check_anz()");
e.set_statement(type.getName().toString());
ex.addException(e);
@ -279,7 +279,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable
// ino.method.getLineNumber.25602.defdescription type=javadoc
/**
* <br/>Author: ¿½rg ¿½uerle
* <br/>Author: ¿½rg ¿½uerle
* @return
*/
// ino.end
@ -319,7 +319,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable
// ino.method.getTypeLineNumber.25611.defdescription type=javadoc
/**
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @return
*/
// ino.end
@ -335,7 +335,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable
// ino.method.toString.25617.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
@ -371,8 +371,8 @@ public class LocalVarDecl extends Statement implements TypeInsertable
/**
* @author Andreas Stadelmeier, a10023
* Der Typ der Variablendeklaration wird den Assumptions angefügt.
* Bei einer Deklaration ohne Typangabe wird ein TypePlaceholder den Assumptions hinzugefügt.
* Der Typ der Variablendeklaration wird den Assumptions angefügt.
* Bei einer Deklaration ohne Typangabe wird ein TypePlaceholder den Assumptions hinzugefügt.
*/
@Override
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) {

View File

@ -78,7 +78,7 @@ public class LongLiteral extends Literal
// ino.end
// ino.method.sc_check.25466.body
{
parserlog.debug("SC -> Semantik-Check f<EFBFBD>r LongLiteral wurde aufgerufen --> nichts zu tun!");
parserlog.debug("SC -> Semantik-Check f�r LongLiteral wurde aufgerufen --> nichts zu tun!");
}
// ino.end
*/
@ -140,7 +140,7 @@ public class LongLiteral extends Literal
// ino.method.toString.25484.defdescription type=javadoc
/**
* <br/>Author: Martin Pl<EFBFBD>micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -149,7 +149,7 @@ public class MethodCall extends Expr
// ino.method.toString.25738.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
@ -182,16 +182,16 @@ public class MethodCall extends Expr
/**
* @author AI10023 - Andreas Stadelmeier
*
* Mögliche Probleme:
* Mögliche Probleme:
* Wenn die Methode ohne Angabe eines Receivers im Quelltext steht:
* methodCall(param); -> (bedeutet:) this.methodCall(param);
* Parser möglicherweise anpassen (siehe JavaParser.jay Zeile 1858 ff)
* Parser möglicherweise anpassen (siehe JavaParser.jay Zeile 1858 ff)
*/
@Override
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
//Hier der Ablauf für einen Methodenaufruf:
//Hier der Ablauf für einen Methodenaufruf:
ConstraintsSet ret = new ConstraintsSet();
//Der Return-Type des MEthodenaufrufs ist zunächst unbekannt:
//Der Return-Type des MEthodenaufrufs ist zunächst unbekannt:
this.setType(TypePlaceholder.fresh(this));
//Berechne die Constraints des Receivers
if(receiver == null){
@ -199,19 +199,19 @@ public class MethodCall extends Expr
}
ret.add(receiver.get_Expr().TYPEExpr(assumptions));
//Berechne die Constraints der Argumente aus der Argumentlist (also der Parameter, welche der Funktion übergeben wurden)
//Berechne die Constraints der Argumente aus der Argumentlist (also der Parameter, welche der Funktion übergeben wurden)
if(this.arglist != null)for(Expr arg : this.arglist.expr){
ret.add(arg.TYPEExpr(assumptions));
}
//Noch das Overloading-Constraint anhängen:
//Noch das Overloading-Constraint anhängen:
ret.add(overloading(assumptions));
return ret;
}
/**
* Erstellt die Constraints für den eigentlichen Methodenaufruf.
* Erstellt die Constraints für den eigentlichen Methodenaufruf.
* Sucht in den Assumptions nach passenden Methoden und erstellt ein OderConstraintSet.
* @param assumptions
* @return
@ -222,9 +222,9 @@ public class MethodCall extends Expr
OderConstraint oCons = new OderConstraint();
Menge<MethodAssumption> methodAssumptions = assumptions.getMethodAssumptions(this.getName(), this.getArgumentList().size());
if(methodAssumptions.size()==0)throw new TypeinferenceException("Eine Methode "+this.get_Name()+" ist in den Assumptions nicht vorhanden", this);
//Alle möglichen Methoden durchgehen:
//Alle möglichen Methoden durchgehen:
for(MethodAssumption methodAssumption : methodAssumptions){
//Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt:
//Constraint nicht erstellen, falls Rückgabetyp von vorne herein nicht übereinstimmt:
if(!(this.type instanceof TypePlaceholder) && !this.type.equals(methodAssumption.getAssumedType()))break;
oCons.addConstraint(constraintsFromMethodAssumption(methodAssumption, assumptions));
}
@ -244,22 +244,22 @@ public class MethodCall extends Expr
* method, where the argument types are supertypes of a minimal type
* assumption.
*
* @TODO: wenn es sich um eine Methode einer anderen Klasse handelt, müssen neue TPH vergeben werden und nicht die der Assumption verwendet werden.
* @TODO: wenn es sich um eine Methode einer anderen Klasse handelt, müssen neue TPH vergeben werden und nicht die der Assumption verwendet werden.
*
* @return
*/
public UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){
UndConstraint methodConstraint = new UndConstraint();
//Ein Constraint für den ReturnType der Methode...
//Ein Constraint für den ReturnType der Methode...
methodConstraint.addConstraint(methodAssumption.getAssumedType().TYPE(assumptions, this), this.getType().TYPE(assumptions, this));
//Ein Constraint für die Parameter der Methode...
//Ein Constraint für die Parameter der Methode...
for(int i=0; i<methodAssumption.getParaCount();i++){
//Type der Argument Expressions <. AssumedType der Parameter
ConstraintType ct1 = this.getArgumentList().argumentAt(i).getType().TYPE(assumptions, this);
ConstraintType ct2 = methodAssumption.getParameterType(i).TYPE(assumptions, this);
methodConstraint.addConstraint(ct1 , ct2);
}
//Ein Constraint für den Receiver der Methode (falls vorhanden)...
//Ein Constraint für den Receiver der Methode (falls vorhanden)...
if(this.get_Receiver() != null && this.get_Receiver().get_Expr() != null){
//TODO: FunN-MethodAssumption darf keine Klasse (Class) als ParentClass besitzen. Denn der Typ der Klasse steht noch nicht fest (bisher ist es immer "FunN").
methodConstraint.addConstraint(this.get_Receiver().get_Expr().getType().TYPE(assumptions, this), methodAssumption.getParentClassType().TYPE(assumptions, this));

View File

@ -51,7 +51,7 @@ public class NewArray extends Expr
// ino.method.getType.25803.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @return Returns the type.
*/
// ino.end
@ -66,7 +66,7 @@ public class NewArray extends Expr
// ino.method.setType.25806.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param type The type to set.
*/
// ino.end

View File

@ -131,7 +131,7 @@ public class NewClass extends Expr
// ino.method.toString.25867.defdescription type=javadoc
/**
* <br/>Author: Martin Pl�micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end
@ -158,10 +158,10 @@ public class NewClass extends Expr
@Override
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
//TODO: Das hier noch vervollständigen
//TODO: Das hier noch vervollständigen
ConstraintsSet ret = new ConstraintsSet();
UndConstraint callConstraints = new UndConstraint();
//Die Auskommentierten Zeilen gehören zu MethodRefNew
//Die Auskommentierten Zeilen gehören zu MethodRefNew
//Menge<Type> argumentTypeList = new Menge<Type>();
//for(Expr expr : this.arglist.expr){
// argumentTypeList.add(expr.getTypeVariable());

View File

@ -34,7 +34,7 @@ public class Receiver
// ino.method.Receiver.26132.defdescription type=javadoc
/**
* Autor: J<EFBFBD>rg B<EFBFBD>uerle
* Autor: J�rg ¿½uerle
* @param expr
*/
// ino.end
@ -76,7 +76,7 @@ public class Receiver
// ino.method.toString.26147.defdescription type=javadoc
/**
* <br/>Author: Martin Pl<EFBFBD>micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -83,7 +83,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
/**
* @author AI10023 - Andreas Stadelmeier
* Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke
* Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke
* Jedes Statement wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen.
*/
public abstract ConstraintsSet TYPEStmt(TypeAssumptions assumptions);
@ -96,7 +96,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
/**
* @author Andreas Stadelmeier, a10023
* Sollte von jedem Statement überschrieben werden.
* Sollte von jedem Statement überschrieben werden.
* Liefert Informationen zum Statment und dessen Typ.
* @return
*/
@ -108,7 +108,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
/**
* @author AI10023 - Andreas Stadelmeier
* Jedem Statement und jeder Expression wird im Zuge des Typinferenzalgorithmus eine Typvariable zugewiesen.
* Daher müssen alle Statements und Expressions die Methoden setTypeVariable und getTypeVariable implementieren.
* Daher müssen alle Statements und Expressions die Methoden setTypeVariable und getTypeVariable implementieren.
*/
public void setType(Type t)
{

View File

@ -67,7 +67,7 @@ public class SuperCall extends ThisCall
return ret;
}else{
//Ansonsten Fehler ausgeben:
throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this);
throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this);
}
}

View File

@ -124,7 +124,7 @@ public class This extends Expr
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
ConstraintsSet ret = new ConstraintsSet();
//this.set_Type(new);
//this.setType(assumptions.getThisValue());//Die Assumption für this als TypeVariable setzen.
//this.setType(assumptions.getThisValue());//Die Assumption für this als TypeVariable setzen.
this.setType(this.getParentClass().getType());
return ret;
}

View File

@ -87,7 +87,7 @@ public class ThisCall extends MethodCall
return ret;
}else{
//Ansonsten Fehler ausgeben:
throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this);
throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this);
}
}

View File

@ -136,7 +136,7 @@ public class WhileStmt extends Statement
// ino.method.toString.26360.defdescription type=javadoc
/**
* <br/>Author: Martin Pl<EFBFBD>micke
* <br/>Author: Martin Pl�micke
* @return
*/
// ino.end

View File

@ -40,7 +40,7 @@ public abstract class BaseType extends Type
// ino.method.equals.26445.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Author: ¿½rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -85,7 +85,7 @@ public abstract class BaseType extends Type
@Override
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) {
return super.TYPE(ass, parent); //Die Base-Types müssen nicht nachgeschlagen werden.
return super.TYPE(ass, parent); //Die Base-Types müssen nicht nachgeschlagen werden.
}

View File

@ -22,7 +22,7 @@ public class BooleanType extends BaseType
// ino.method.equals.26458.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -43,7 +43,7 @@ public class BooleanType extends BaseType
// ino.method.clone.26461.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br>Author: J�rg ¿½uerle
* @return
*/
// ino.end

View File

@ -87,7 +87,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar
public ConstraintsSet TYPE(TypeAssumptions ass) {
ConstraintsSet ret = super.TYPE(ass);
//ass.addGenericVarAssumption(this);
//Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds
//Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds
Menge<ObjectType> tempBounds = new Menge<>();
if(this.bounds != null){
for(ObjectType ev : this.bounds){

View File

@ -22,7 +22,7 @@ public class CharacterType extends BaseType
// ino.method.equals.26499.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -43,7 +43,7 @@ public class CharacterType extends BaseType
// ino.method.clone.26502.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br>Author: J�rg ¿½uerle
* @return
*/
// ino.end

View File

@ -22,7 +22,7 @@ public class DoubleType extends BaseType
// ino.method.equals.26534.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -43,7 +43,7 @@ public class DoubleType extends BaseType
// ino.method.clone.26537.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br>Author: J�rg ¿½uerle
* @return
*/
// ino.end

View File

@ -21,8 +21,8 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
public class ExtendsWildcardType extends WildcardType implements ITypeContainer, IMatchable{
/**
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine ExtendsWildcard
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine ExtendsWildcard
*/
public ExtendsWildcardType (int offset, ObjectType extendsType)
{
@ -35,10 +35,10 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Typen in der Wildcard zurück.
* Author: Arne Lüdtke<br/>
* Gibt den Typen in der Wildcard zurück.
* Beispiel: ? extends Integer.
* Integer wird zurückgegeben.
* Integer wird zurückgegeben.
*/
public ObjectType get_ExtendsType()
{
@ -46,8 +46,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
*/
public String toString()
{
@ -55,8 +55,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Der Innere Typ wird auch geklont
*/
public ExtendsWildcardType clone()
@ -66,7 +66,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Vergleicht mit einem anderen Objekt.
* @param obj - Object to compare.
*/
@ -83,9 +83,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Gibt die passende FreshWildcardType Klasse zurück.
* Wird für CaptureConversion verwendet
* Author: Arne Lüdtke<br/>
* Gibt die passende FreshWildcardType Klasse zurück.
* Wird für CaptureConversion verwendet
*/
public FreshExtendsWildcardType GetFreshWildcardType()
{
@ -93,9 +93,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Das gleiche wie get_ExtendsType().
* Überschreibt die Methode der Superklasse.
* Überschreibt die Methode der Superklasse.
*/
public Type GetWildcardType()
{
@ -103,7 +103,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Setzt den Typ in der Wildcard
* @param T - Type to be set
*/
@ -114,7 +114,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Das gleiche wie get_ExtendsType().
* Implementiert ITypeContainer
*/
@ -124,9 +124,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
*/
public ObjectType getMatchType()
{
@ -153,7 +153,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
@Override
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) {
//Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten.
//Folgender TypeCast ist sicher. Wird ein ObjectType in einen ConstraintType umgewandelt und wieder zurück, kann kein Fehler auftreten.
this.innerType = (ObjectType) this.innerType.TYPE(ass, parent).getType();
return super.TYPE(ass, parent);
}

View File

@ -22,7 +22,7 @@ public class FloatType extends BaseType
// ino.method.equals.26534.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -43,7 +43,7 @@ public class FloatType extends BaseType
// ino.method.clone.26537.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br>Author: J�rg ¿½uerle
* @return
*/
// ino.end

View File

@ -7,8 +7,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
private ObjectType extendsBoundType;
/**
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine FreshExtendsWildcard
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine FreshExtendsWildcard
*/
public FreshExtendsWildcardType(ObjectType extendsBound,SyntaxTreeNode parent ,int offset)
{
@ -17,8 +17,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
}
/**
* Author: Arne Lüdtke<br/>
* Privater Konstruktor für clone
* Author: Arne Lüdtke<br/>
* Privater Konstruktor für clone
*/
private FreshExtendsWildcardType(ObjectType extendsBound ,SyntaxTreeNode parent,int offset, String name)
{
@ -27,8 +27,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
}
/**
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
*/
public String toString()
{
@ -40,8 +40,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
}
/**
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Der Innere Typ wird auch geklont
*/
public FreshExtendsWildcardType clone()
@ -50,8 +50,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
}
/**
* Author: Arne Lüdtke<br/>
* Gibt die Grenze der Wildcard zurück
* Author: Arne Lüdtke<br/>
* Gibt die Grenze der Wildcard zurück
*/
public ObjectType get_ExtendsBound()
{
@ -59,8 +59,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
}
/**
* Author: Arne Lüdtke<br/>
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
* Author: Arne Lüdtke<br/>
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
*/
public boolean equals(Object obj)
{
@ -74,9 +74,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
}
/**
* Author: Arne Lüdtke<br/>
* Gibt die passende ExtendsWildcardType Klasse zurück.
* Wird für smaller4 verwendet
* Author: Arne Lüdtke<br/>
* Gibt die passende ExtendsWildcardType Klasse zurück.
* Wird für smaller4 verwendet
*/
public ExtendsWildcardType get_WildcardType()
{
@ -84,9 +84,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
*/
public Type getMatchType()
{

View File

@ -7,8 +7,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
private ObjectType superBoundType;
/**
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine FreshSuperWildcard
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine FreshSuperWildcard
*/
public FreshSuperWildcardType(ObjectType superBound ,SyntaxTreeNode parent, int offset)
{
@ -17,8 +17,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
}
/**
* Author: Arne Lüdtke<br/>
* Privater Konstruktor für clone
* Author: Arne Lüdtke<br/>
* Privater Konstruktor für clone
*/
private FreshSuperWildcardType(ObjectType superBound,SyntaxTreeNode parent,int offset, String name)
{
@ -27,8 +27,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
}
/**
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
*/
public String toString()
{
@ -40,8 +40,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
}
/**
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Der Innere Typ wird auch geklont
*/
public FreshSuperWildcardType clone()
@ -50,8 +50,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
}
/**
* Author: Arne Lüdtke<br/>
* Gibt die Grenze der Wildcard zurück
* Author: Arne Lüdtke<br/>
* Gibt die Grenze der Wildcard zurück
*/
public ObjectType get_SuperBound()
{
@ -59,8 +59,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
}
/**
* Author: Arne Lüdtke<br/>
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
* Author: Arne Lüdtke<br/>
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
*/
public boolean equals(Object obj)
{
@ -74,9 +74,9 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
}
/**
* Author: Arne Lüdtke<br/>
* Gibt die passende SuperWildcardType Klasse zurück.
* Wird für smaller4 verwendet
* Author: Arne Lüdtke<br/>
* Gibt die passende SuperWildcardType Klasse zurück.
* Wird für smaller4 verwendet
*/
public SuperWildcardType get_WildcardType()
{
@ -84,9 +84,9 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
*/
public Type getMatchType()
{

View File

@ -14,8 +14,8 @@ public class FreshWildcardType extends Type {
private Menge<Type> upperBounds = new Menge<Type>();
/**
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine FreshWildcard
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine FreshWildcard
*/
public FreshWildcardType(SyntaxTreeNode parent, int offset)
{
@ -24,9 +24,9 @@ public class FreshWildcardType extends Type {
}
/**
* Author: Arne Lüdtke<br/>
* Protected Konstruktor für clone.
* Protected, da vererbte Klassen ihn verwenden müssen.
* Author: Arne Lüdtke<br/>
* Protected Konstruktor für clone.
* Protected, da vererbte Klassen ihn verwenden müssen.
*/
protected FreshWildcardType(SyntaxTreeNode parent, int offset, String name)
{
@ -35,8 +35,8 @@ public class FreshWildcardType extends Type {
}
/**
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
*/
public String toString()
{
@ -56,8 +56,8 @@ public class FreshWildcardType extends Type {
}
/**
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Der Innere Typ wird auch geklont
*/
public FreshWildcardType clone()
@ -66,19 +66,19 @@ public class FreshWildcardType extends Type {
}
/**
* Author: Arne Lüdtke<br/>
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
* Author: Arne Lüdtke<br/>
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
*/
public boolean equals(Object obj)
{
//Da die Namensgebung von Typeplaceholdern und FreshWildcards identisch ist,
//und im Type nur auf Namen geprüft wird muss verhindert werden, dass ausversehen True zurückgegeben wird,
//und im Type nur auf Namen geprüft wird muss verhindert werden, dass ausversehen True zurückgegeben wird,
//Wenn eine FreshWildcard mit einem TypePlaceholder verglichen wird.
return (obj instanceof FreshWildcardType) && super.equals(obj);
}
/**
* Erzeugt einen neuen Namen, und gibt diesen zurück
* Erzeugt einen neuen Namen, und gibt diesen zurück
* Methode aus TypePlaceholder kopiert
*/
private static JavaClassName makeNewName()
@ -86,14 +86,14 @@ public class FreshWildcardType extends Type {
// luar: Methode aus TypePlaceholder kopiert.
String strReturn = strNextName;
// ¿½chster Name berechnen und in strNextName speichern
// ¿½chster Name berechnen und in strNextName speichern
inc( strNextName.length() - 1 );
return new JavaClassName(strReturn);
}
/**
* Hilfsmethode für makeNewName
* Hilfsmethode für makeNewName
* Methode aus TypePlaceholder kopiert
*/
private static void inc(int i)
@ -112,18 +112,18 @@ public class FreshWildcardType extends Type {
// aktuelle Stelle: auf A zuruecksetzen
manipulate( i, 'A' );
// vorherige Stelle erh�hen
// vorherige Stelle erh�hen
inc( i - 1 );
}
else
{
// aktueller Buchstabe �ndern
// aktueller Buchstabe �ndern
manipulate( i, cBuchstabe );
}
}
/**
* Hilfsmethode für makeNewName
* Hilfsmethode für makeNewName
* Methode aus TypePlaceholder kopiert
*/
private static void manipulate( int nStelle, char nWert )
@ -141,24 +141,24 @@ public class FreshWildcardType extends Type {
}
/**
* Author: Arne Lüdtke<br/>
* Gibt die passende WildcardType Klasse zurück.
* Wird für smaller4 verwendet
* Author: Arne Lüdtke<br/>
* Gibt die passende WildcardType Klasse zurück.
* Wird für smaller4 verwendet
*/
public WildcardType get_WildcardType()
{
return new WildcardType(null, this.getParent(),this.getOffset());
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Menge der oberen Grenzen zurück
* Author: Arne Lüdtke<br/>
* Gibt den Menge der oberen Grenzen zurück
*/
public Menge<Type> get_UpperBounds()
{
return this.upperBounds;
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Setzt den Menge der oberen Grenzen
*/
public void set_UpperBounds(Menge<Type> bounds)

View File

@ -24,8 +24,8 @@ import de.dhbwstuttgart.syntaxtree.GTVDeclarationContext;
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
// ino.class.GenericTypeVar.26505.description type=javadoc
/**
* TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert.
* @author ¿½rg ¿½uerle
* TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert.
* @author ¿½rg ¿½uerle
* @version $Date: 2013/09/22 20:12:53 $
*/
// ino.end
@ -38,9 +38,9 @@ public class GenericTypeVar extends ObjectType
//Menge<Type> extendVars = new Menge<Type>();
protected Pair genericConstraint;
/**
* Eine Registry ¿½r alle Generic-Instanzen, die vor der Bytecode-Generierung durch
* Ihre Superklasse ersetzt werden ¿½ssen. Siehe "Type Erasure" in Sun Spezifikation.
* <br/>Autor: ¿½rg ¿½uerle
* Eine Registry ¿½r alle Generic-Instanzen, die vor der Bytecode-Generierung durch
* Ihre Superklasse ersetzt werden ¿½ssen. Siehe "Type Erasure" in Sun Spezifikation.
* <br/>Autor: ¿½rg ¿½uerle
*/
// ino.method.GenericTypeVar.26509.defdescription type=line
// private Hashtable<String, Menge<GenericTypeVar>> m_TypeErasureList;
@ -79,7 +79,7 @@ public class GenericTypeVar extends ObjectType
*/
// ino.method.clone.26512.defdescription type=javadoc
/**
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @return
*/
// ino.end
@ -94,7 +94,7 @@ public class GenericTypeVar extends ObjectType
// ino.method.equals.26515.defdescription type=javadoc
/**
* <br/>Author: ¿½rg ¿½uerle
* <br/>Author: ¿½rg ¿½uerle
* @param obj
* @return
*/
@ -200,7 +200,7 @@ public class GenericTypeVar extends ObjectType
}
/**
* Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions.
* Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions.
* @param ass
* @return
*/
@ -212,7 +212,7 @@ public class GenericTypeVar extends ObjectType
@Override
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) {
ass.addGenericVarAssumption(this); //Eine GenericTypeVar kann nur an Stellen vorkommen, an denen sie auch gültig ist. Daher kann sie den Assumptions hinzugefügt werden.
ass.addGenericVarAssumption(this); //Eine GenericTypeVar kann nur an Stellen vorkommen, an denen sie auch gültig ist. Daher kann sie den Assumptions hinzugefügt werden.
return super.TYPE(ass, parent);
}
@ -224,7 +224,7 @@ public class GenericTypeVar extends ObjectType
public void parserPostProcessing(SyntaxTreeNode parent) {
//SyntaxTreeNode parentTemp = this.parent;
super.parserPostProcessing(parent);
//if(parentTemp != null)this.parent = parentTemp; //Der Parenttype einer GenericVar soll sich nicht ändern können, falls einmal gesetzt.
//if(parentTemp != null)this.parent = parentTemp; //Der Parenttype einer GenericVar soll sich nicht ändern können, falls einmal gesetzt.
}
public GTVDeclarationContext getDeclarationContext() {

View File

@ -2,17 +2,17 @@ package de.dhbwstuttgart.syntaxtree.type;
/**
* Dieses Interface wird von allen Klassen implementiert, die weitere Klassen
* enthalten, die im match des Unify beachtet werden müssen.
* enthalten, die im match des Unify beachtet werden müssen.
*
* @author Arne Lüdtke
* @author Arne Lüdtke
*
*/
public interface IMatchable
{
/**
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
*/
Type getMatchType();
}

View File

@ -2,16 +2,16 @@ package de.dhbwstuttgart.syntaxtree.type;
/**
* Dieses Interface wird von allen Klassen implementiert, die weitere Klassen enthalten.
* Wird für diverse Hilfsmethoden verwendet.
* Wird für diverse Hilfsmethoden verwendet.
*
* @author Arne Lüdtke
* @author Arne Lüdtke
*
*/
public interface ITypeContainer
{
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Das gleiche wie get_ExtendsType().
* Implementiert ITypeContainer
*/

View File

@ -22,7 +22,7 @@ public class IntegerType extends BaseType
// ino.method.equals.26534.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -43,7 +43,7 @@ public class IntegerType extends BaseType
// ino.method.clone.26537.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br>Author: J�rg ¿½uerle
* @return
*/
// ino.end

View File

@ -22,7 +22,7 @@ public class LongType extends BaseType
// ino.method.equals.26534.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -43,7 +43,7 @@ public class LongType extends BaseType
// ino.method.clone.26537.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br>Author: J�rg ¿½uerle
* @return
*/
// ino.end

View File

@ -86,7 +86,7 @@ public class RefType extends ObjectType implements IMatchable
public int hashCode() {
int hash = 0;
hash += super.hashCode();
hash += this.name.hashCode();//Nur den Name hashen. Sorgt für langsame, aber funktionierende HashMaps
hash += this.name.hashCode();//Nur den Name hashen. Sorgt für langsame, aber funktionierende HashMaps
return hash;
}
@ -114,8 +114,8 @@ public class RefType extends ObjectType implements IMatchable
// ino.end
/**
* Erstellt einen Referenztyp aus dem übergebenen Type.
* Dabei wird der Name und der Offset des baseType's übernommen.
* Erstellt einen Referenztyp aus dem übergebenen Type.
* Dabei wird der Name und der Offset des baseType's übernommen.
* @param baseType
*/
public RefType( Type baseType){
@ -229,8 +229,8 @@ public class RefType extends ObjectType implements IMatchable
/**
* HOTI
* Diese Methode sucht in der Klassendefinition nach einen GTV, die
* so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden
* hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls
* so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden
* hat, wird sie zurückgeben. Wenn dies nicht der Fall war, schaut sie, falls
* angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert
* die Methode <b>null</b>.
* @param type
@ -314,8 +314,8 @@ public class RefType extends ObjectType implements IMatchable
// ino.end
/**
* Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus.
* In einem RefType dürfen keine GTVs enthalten sein.
* Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus.
* In einem RefType dürfen keine GTVs enthalten sein.
* @param v
*/
// ino.method.set_ParaList.26661.definition
@ -336,7 +336,7 @@ public class RefType extends ObjectType implements IMatchable
// ino.end
/**
* @return gibt bei leere Parameterliste null zurück. Ist entscheidend für unify-Algorithmus
* @return gibt bei leere Parameterliste null zurück. Ist entscheidend für unify-Algorithmus
*/
// ino.method.get_ParaList.26664.definition
public Menge<Type> get_ParaList()
@ -737,9 +737,9 @@ public class RefType extends ObjectType implements IMatchable
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
*/
public Type getMatchType()
{

View File

@ -21,7 +21,7 @@ public class ReturnType extends Type
// ino.method.equals.26710.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -42,7 +42,7 @@ public class ReturnType extends Type
// ino.method.clone.26713.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br>Author: J�rg ¿½uerle
* @return
*/
// ino.end

View File

@ -23,8 +23,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine SuperWildcard
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine SuperWildcard
*/
public SuperWildcardType(int offset, ObjectType innerType)
{
@ -32,10 +32,10 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Typen in der Wildcard zurück.
* Author: Arne Lüdtke<br/>
* Gibt den Typen in der Wildcard zurück.
* Beispiel: ? super Integer.
* Integer wird zurückgegeben.
* Integer wird zurückgegeben.
*/
public ObjectType get_SuperType()
{
@ -43,8 +43,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
*/
public String toString()
{
@ -52,8 +52,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Der Innere Typ wird auch geklont
*/
public SuperWildcardType clone()
@ -63,9 +63,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
/**
* Author: Arne Lüdtke<br/>
* Gibt die passende FreshWildcardType Klasse zurück.
* Wird für CaptureConversion verwendet
* Author: Arne Lüdtke<br/>
* Gibt die passende FreshWildcardType Klasse zurück.
* Wird für CaptureConversion verwendet
*/
public FreshSuperWildcardType GetFreshWildcardType()
{
@ -73,9 +73,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Das gleiche wie get_innerType().
* Überschreibt die Methode der Superklasse
* Überschreibt die Methode der Superklasse
*/
public Type GetWildcardType()
{
@ -83,7 +83,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Setzt den Typ in der Wildcard
* @param T - Type to be set
*/
@ -94,7 +94,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Das gleiche wie get_innerType().
* Implementiert ITypeContainer
*/
@ -104,9 +104,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
* Author: Arne Lüdtke<br/>
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
* Wird über IMatchable implementiert.
*/
public Type getMatchType()
{
@ -119,7 +119,7 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Vergleicht mit einem anderen Objekt.
* @param obj - Object to compare.
*/

View File

@ -170,7 +170,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
// ino.method.equals.26765.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Author: ¿½rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -194,7 +194,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
// ino.method.clone.26768.defdescription type=javadoc
/**
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @return
// ino.end
@ -212,7 +212,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
// ino.method.toString.26771.defdescription type=javadoc
/**
* <br/>Author: ¿½rg ¿½uerle
* <br/>Author: ¿½rg ¿½uerle
* @return
*/
// ino.end
@ -288,7 +288,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
}
/**
* Prüft ob der Typ von dem übergebenen TypPlaceholder abhängt.
* Prüft ob der Typ von dem übergebenen TypPlaceholder abhängt.
* @param tph
* @return
*/
@ -297,9 +297,9 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
}
/**
* Prüft ob der Typ in den Assumptions ass vorhanden ist.
* Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
* @param ass - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet.
* Prüft ob der Typ in den Assumptions ass vorhanden ist.
* Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurückgegeben wird.
* @param ass - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet.
public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){
ConstraintType t = ass.getTypeFor(this, this);
@ -308,7 +308,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
return t;
}
*/
//TODO: checkType wird nicht mehr gebraucht. TYPE übernimmt dessen Aufgabe. Es muss nur sichergestellt werden, dass jeder Typ in den Constraints landet, dadurch wird für jeden Typ die Methode TYPE aufgerufen.
//TODO: checkType wird nicht mehr gebraucht. TYPE übernimmt dessen Aufgabe. Es muss nur sichergestellt werden, dass jeder Typ in den Constraints landet, dadurch wird für jeden Typ die Methode TYPE aufgerufen.
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent){
ConstraintType t = ass.getTypeFor(this, parent);
if(t==null)

View File

@ -20,11 +20,11 @@ import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet;
// ino.class.TypePlaceholder.26780.description type=javadoc
/**
* Repr�sentiert einen Typparameter ¿½r einen vom Programmierer nicht angegeben
* Repr�sentiert einen Typparameter ¿½r einen vom Programmierer nicht angegeben
* Typ. Jede TypePlaceholder besitzt einen eindeutigen Namen aus einem Namenspool
* und
* ist in einer zentralen Registry, d.h. einer <code>Hashtable</code> abgelegt.
* @author ¿½rg ¿½uerle
* @author ¿½rg ¿½uerle
* @version $Date: 2013/06/19 12:45:37 $
*/
// ino.end
@ -50,9 +50,9 @@ public class TypePlaceholder extends ObjectType
// ino.method.TypePlaceholder.26794.defdescription type=javadoc
/**
* Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die
* Privater Konstruktor - Eine TypePlaceholder-Variable wird �ber die
* Factory-Methode <code>fresh()</code> erzeugt.
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @param typeName Der Name der TypePlaceholder-Variablen
*/
// ino.end
@ -64,14 +64,14 @@ public class TypePlaceholder extends ObjectType
super(parent, -1);
if(typeName == null)throw new NullPointerException();
this.name = new JavaClassName(typeName);
if(parent != null)log.debug("Erstelle TPH "+typeName+" für SyntaxTreeNode: "+parent, Section.TYPEINFERENCE);
if(parent != null)log.debug("Erstelle TPH "+typeName+" für SyntaxTreeNode: "+parent, Section.TYPEINFERENCE);
}
// ino.end
// ino.method.getInstance.26797.defdescription type=javadoc
/**
* Statische Methode, um einen TypePlaceholder aus der Registry zu holen.
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @param name Der Name des TypePlaceholders
* @return Der TypePlaceholder oder <code>null</code>, falls er nicht in der
* Registry existiert
@ -88,7 +88,7 @@ public class TypePlaceholder extends ObjectType
/**
* Generiert einen neuen TPH mit einem bestimmten Namen.
* Wird benötigt, wenn aus Generischen Variablen TPH generiert werden.
* Wird benötigt, wenn aus Generischen Variablen TPH generiert werden.
* @param name
* @return
*/
@ -110,7 +110,7 @@ public class TypePlaceholder extends ObjectType
/**
* @author Andreas Stadelmeier, a10023
* Ruft die TypePlaceholder.fresh()-Methode auf.
* Fügt zusätzlich einen Replacementlistener hinzu.
* Fügt zusätzlich einen Replacementlistener hinzu.
* @param listener
* @return
*/
@ -129,8 +129,8 @@ public class TypePlaceholder extends ObjectType
// ino.method.makeNewName.26803.defdescription type=javadoc
/**
* Berechnet einen neuen, eindeutigen Namen ¿½r eine neue
* <code>TypePlaceholder</code>. <br>Author: ¿½rg ¿½uerle
* Berechnet einen neuen, eindeutigen Namen ¿½r eine neue
* <code>TypePlaceholder</code>. <br>Author: ¿½rg ¿½uerle
* @return Der Name
*/
// ino.end
@ -142,7 +142,7 @@ public class TypePlaceholder extends ObjectType
// otth: Funktion berechnet einen neuen Namen anhand eines alten gespeicherten
String strReturn = strNextName;
// ¿½chster Name berechnen und in strNextName speichern
// ¿½chster Name berechnen und in strNextName speichern
inc( strNextName.length() - 1 );
return strReturn;
@ -152,7 +152,7 @@ public class TypePlaceholder extends ObjectType
// ino.method.inc.26806.defdescription type=javadoc
/**
* Hilfsfunktion zur Berechnung eines neuen Namens
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @param i
*/
// ino.end
@ -162,10 +162,10 @@ public class TypePlaceholder extends ObjectType
// ino.method.inc.26806.body
{
// otth: Hilfsfunktion zur Berechnung eines neuen Namens
// otth: Erh�hung des Buchstabens an der Stelle i im String strNextName
// otth: Nach �berlauf: rekursiver Aufruf
// otth: Erh�hung des Buchstabens an der Stelle i im String strNextName
// otth: Nach �berlauf: rekursiver Aufruf
// falls i = -1 --> neuer Buchstabe vorne anf�gen
// falls i = -1 --> neuer Buchstabe vorne anf�gen
if ( i == -1 )
{
strNextName = "A" + strNextName;
@ -179,12 +179,12 @@ public class TypePlaceholder extends ObjectType
// aktuelle Stelle: auf A zuruecksetzen
manipulate( i, 'A' );
// vorherige Stelle erh�hen
// vorherige Stelle erh�hen
inc( i - 1 );
}
else
{
// aktueller Buchstabe �ndern
// aktueller Buchstabe �ndern
manipulate( i, cBuchstabe );
}
@ -194,7 +194,7 @@ public class TypePlaceholder extends ObjectType
// ino.method.manipulate.26809.defdescription type=javadoc
/**
* Hilfsfunktion zur Berechnung eines neuen Namens.
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @param nStelle
* @param nWert
*/
@ -221,7 +221,7 @@ public class TypePlaceholder extends ObjectType
// ino.method.equals.26812.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Author: ¿½rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -244,9 +244,9 @@ public class TypePlaceholder extends ObjectType
// ino.method.deleteRegistry.26839.defdescription type=javadoc
/**
* ¿½scht die komplette Registry von TypePlaceholders. Sollte nur und
* ausschlie�lich von <code>MyCompiler.init()</code> aufgerufen werden!!!
* <br/>Author: ¿½rg ¿½uerle
* ¿½scht die komplette Registry von TypePlaceholders. Sollte nur und
* ausschlie�lich von <code>MyCompiler.init()</code> aufgerufen werden!!!
* <br/>Author: ¿½rg ¿½uerle
*/
// ino.end
// ino.method.deleteRegistry.26839.definition
@ -262,12 +262,12 @@ public class TypePlaceholder extends ObjectType
// ino.method.clone.26842.defdescription type=javadoc
/**
* Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die
* Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen
* Registrierung neuer Listener �ber die zentrale Instanz in der Registry laufen
* muss.<br/>
* Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich
* �ber diese Kopie registrieren, werden sp�ter nicht �ber Status�nderungen
* �ber diese Kopie registrieren, werden sp�ter nicht �ber Status�nderungen
* benachrichtigt, d.h. ihre TypePlaceholders werden nicht substituiert.
* <br/>Author: ¿½rg ¿½uerle
* <br/>Author: ¿½rg ¿½uerle
* @return
*/
// ino.end
@ -283,7 +283,7 @@ public class TypePlaceholder extends ObjectType
/**
* @author Andreas Stadelmeier, a10023
* Überschreibt die get_Name-Methode der Type-Klasse. (Keine Ahnung wieso es überhaupt ein get_Name und ein getName gibt!)
* Überschreibt die get_Name-Methode der Type-Klasse. (Keine Ahnung wieso es überhaupt ein get_Name und ein getName gibt!)
*/
@Override
public String get_Name(){
@ -300,15 +300,15 @@ public class TypePlaceholder extends ObjectType
// ino.end
///////////////////////////////////////////////////////////////////
// Spezialfunktionen, ¿½r makeFC() und unify()
// Spezialfunktionen, ¿½r makeFC() und unify()
// Sollten sonst nicht aufgerufen werden...
///////////////////////////////////////////////////////////////////
// ino.method.backdoorFresh.26848.defdescription type=javadoc
/**
* Backdoor-Hilfsfunktion, die ¿½r <code>makeFC()</code> und <code>unify()</code>
* ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen
* werden nicht registriert und sind ¿½llig losgel�st vom abstrakten Syntaxbaum.
* <br>Author: ¿½rg ¿½uerle
* Backdoor-Hilfsfunktion, die ¿½r <code>makeFC()</code> und <code>unify()</code>
* ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen
* werden nicht registriert und sind ¿½llig losgel�st vom abstrakten Syntaxbaum.
* <br>Author: ¿½rg ¿½uerle
* @return Eine neue <code>TypePlaceholder</code>
*/
// ino.end
@ -332,14 +332,14 @@ public class TypePlaceholder extends ObjectType
// ino.method.backdoorSetName.26851.defdescription type=javadoc
/**
* Backdoor-Hilfsfunktion, die ¿½r <code>makeFC()</code> und <code>unify()</code>
* ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.<br/>
* Backdoor-Hilfsfunktion, die ¿½r <code>makeFC()</code> und <code>unify()</code>
* ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.<br/>
* ACHTUNG: Diese <code>TypePlaceholder</code> darf nicht Teil des abstrakten
* Syntaxbaumes sein!!! Es muss sicher gestellt werden, dass die betreffende
* <code>TypePlaceholder</code> nicht �ber die Methode <code>fresh()</code>,
* sondern �ber <code>backdoorCreate()</code> oder <code>backdoorClone()</code>
* <code>TypePlaceholder</code> nicht �ber die Methode <code>fresh()</code>,
* sondern �ber <code>backdoorCreate()</code> oder <code>backdoorClone()</code>
* erzeugt worden ist.
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @param varName Der Name des zu erzeugenden <code>TypePlaceholders</code>
*/
// ino.end
@ -354,10 +354,10 @@ public class TypePlaceholder extends ObjectType
// ino.method.backdoorCreate.26854.defdescription type=javadoc
/**
* Backdoor-Hilfsfunktion, die ¿½r <code>makeFC()</code> und <code>unify()</code>
* ben�tigt wird, zum Erzeugen eines <code>TypePlaceholders</code>, der nicht in
* der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit ¿½llig
* losgel�st vom abstrakten Syntaxbaum. <br>Author: ¿½rg ¿½uerle
* Backdoor-Hilfsfunktion, die ¿½r <code>makeFC()</code> und <code>unify()</code>
* ben�tigt wird, zum Erzeugen eines <code>TypePlaceholders</code>, der nicht in
* der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit ¿½llig
* losgel�st vom abstrakten Syntaxbaum. <br>Author: ¿½rg ¿½uerle
* @param name
* @return
*/
@ -387,9 +387,9 @@ public class TypePlaceholder extends ObjectType
public JavaCodeResult printJavaCode(ResultSet resultSet) {
Type equalType = resultSet.getTypeEqualTo(this);
if(equalType == null || equalType.equals(this)){
//Für den Fall das der TPH nicht aufgelöst werden konnte.
//Für den Fall das der TPH nicht aufgelöst werden konnte.
JavaCodeResult ret = new JavaCodeResult(this.getName().toString());
//Jetzt muss eine nicht aufgelöste generische Variable dem JavaCodeResult-Set angefügt werden
//Jetzt muss eine nicht aufgelöste generische Variable dem JavaCodeResult-Set angefügt werden
ret.addUnresolvedTPH(this);
return ret;
}
@ -401,9 +401,9 @@ public class TypePlaceholder extends ObjectType
* Berechnet die InsertPoints dieses TypePlaceholders.
* Alle an diesem TypePlaceholder registrierten ITypeReplacementListener werden darauf kontrolliert,
* ob sie von TypeInsertable erben.
* Diese ergeben zusammen mit den Informationen aus dem übergebenen ResultSet einen TypeInsertPoint.
* Diese ergeben zusammen mit den Informationen aus dem übergebenen ResultSet einen TypeInsertPoint.
* Mehrere TypeInsertPoint's ergeben ein TypeInsertSet.
* @param result Das ResultSet das den einzusetzenden Typ für diesen TPH enthält.
* @param result Das ResultSet das den einzusetzenden Typ für diesen TPH enthält.
* @return
* @see TypeInsertPoint
*/

View File

@ -26,7 +26,7 @@ public class Void extends RefType
// ino.method.equals.26864.defdescription type=javadoc
/**
* Author: ¿½rg ¿½uerle<br/>
* Author: ¿½rg ¿½uerle<br/>
* @param Object
* @return
*/
@ -57,7 +57,7 @@ public class Void extends RefType
// ino.method.clone.26867.defdescription type=javadoc
/**
* <br>Author: ¿½rg ¿½uerle
* <br>Author: ¿½rg ¿½uerle
* @return
*/
// ino.end
@ -77,7 +77,7 @@ public class Void extends RefType
@Override
public Type checkTYPE(TypeAssumptions ass, SyntaxTreeNode method) {
return this;//VOID ist immer korrekt, das wird vom Parser geprüft
return this;//VOID ist immer korrekt, das wird vom Parser geprüft
}
}

View File

@ -21,8 +21,8 @@ public class WildcardType extends Type{
protected ObjectType innerType = null;
/**
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine Wildcard
* Author: Arne Lüdtke<br/>
* Standard Konstruktor für eine Wildcard
*/
public WildcardType(ObjectType innerType, SyntaxTreeNode parent, int offset)
{
@ -31,8 +31,8 @@ public class WildcardType extends Type{
}
/**
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
* Author: Arne Lüdtke<br/>
* Gibt String Entsprechung zurück.
*/
public String toString()
{
@ -40,8 +40,8 @@ public class WildcardType extends Type{
}
/**
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
* Author: Arne Lüdtke<br/>
* Gibt einen Klon der Wildcard zurück.
*/
public WildcardType clone()
{
@ -49,9 +49,9 @@ public class WildcardType extends Type{
}
/**
* Author: Arne Lüdtke<br/>
* Gibt die passende FreshWildcardType Klasse zurück.
* Wird für CaptureConversion verwendet
* Author: Arne Lüdtke<br/>
* Gibt die passende FreshWildcardType Klasse zurück.
* Wird für CaptureConversion verwendet
*/
public FreshWildcardType GetFreshWildcardType()
{
@ -59,8 +59,8 @@ public class WildcardType extends Type{
}
/**
* Author: Arne Lüdtke<br/>
* Die Allgemeine Wildcard enthält keinen Typen.
* Author: Arne Lüdtke<br/>
* Die Allgemeine Wildcard enthält keinen Typen.
*/
public Type GetWildcardType()
{
@ -68,7 +68,7 @@ public class WildcardType extends Type{
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Setzt den Typ in der Wildcard, Allgemeine Wildcard hat aber keinen Typen.
* @param T - Type to be set
*/

View File

@ -15,7 +15,7 @@ import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
/**
* @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke
* @see Spezifikation "Complete Typeinference in Java 8" von Martin Plümicke
* "interface FunN<R,T1, T2, ... ,TN> { R apply(T1 arg1, T2 arg2, ... , TN argN); }"
* @author A10023 - Andreas Stadelmeier
*
@ -30,7 +30,7 @@ public class FunN extends RefType {
/**
* @author Andreas Stadelmeier, a10023
* Benötigt für den Typinferenzalgorithmus für Java 8
* Benötigt für den Typinferenzalgorithmus für Java 8
* Generiert einen RefType auf eine FunN<R,T1,...,TN> - Klasse.
* @param R
* @param T
@ -73,8 +73,8 @@ public class FunN extends RefType {
}
/**
* Muss nach jeder Änderung von T oder R aufgerufen werden.
* Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus.
* Muss nach jeder Änderung von T oder R aufgerufen werden.
* Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus.
*/
private void calculateNewParalist(){
Menge<Type> t = new Menge<Type>();
@ -143,7 +143,7 @@ public class FunN extends RefType {
}
*/
/**
* Die Clone-Methode von RefType darf von FunN NICHT überschrieben werden.
* Die Clone-Methode von RefType darf von FunN NICHT überschrieben werden.
@Override
public FunN clone()
{

View File

@ -20,13 +20,13 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
*/
public class FunNInterface extends Class{
//TODO: Diese Klasse sollte eigentlich von Interface erben
//TODO: getType muss einen Typ mit der ParameterListe zurückliefern.
//TODO: getType muss einen Typ mit der ParameterListe zurückliefern.
//private Menge<GenericTypeVar> gtvparalist;
/**
* Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface.
* Ein FunN-Interface enthält nur eine Methode (namens apply). Ist also ein Funktionales Interface.
* @param N - Die Anzahl der Parameter der apply-Methode. Beispiel N = 1 ergibt <code>R apply(T1 par1);</code>
*/
public FunNInterface(int N) {
@ -72,7 +72,7 @@ public class FunNInterface extends Class{
}
/**
* Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode
* Erstellt die nach Definition des Typinferenzalgorithmus von Martin Plümicke, in jedem FunN-Interface enthaltene apply-Methode
* @return
*/
private FunNMethod getApplyFunction(){

View File

@ -18,12 +18,12 @@ public class FunNMethod extends Method{
*/
public FunNMethod(Menge<? extends Type> paralist){
super(0); //Hat keinen Offset, da nur theoretisch gedachte Methode
int N = paralist.size(); //In der paraliste ist der erste Parameter der Rückgabetyp
int N = paralist.size(); //In der paraliste ist der erste Parameter der Rückgabetyp
this.setType(paralist.firstElement());
this.set_DeclId(new DeclId("apply"));
ParameterList pl = new ParameterList();
Menge<FormalParameter> fpList = new Menge<FormalParameter>();
for(int i = 1;i<N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen.
for(int i = 1;i<N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen.
DeclId paramName = new DeclId("T"+i);
FormalParameter parameter = new FormalParameter(paramName);
//parameter.setType(TypePlaceholder.fresh(parameter));
@ -43,7 +43,7 @@ public class FunNMethod extends Method{
this.set_DeclId(new DeclId("apply"));
ParameterList pl = new ParameterList();
Menge<FormalParameter> fpList = new Menge<FormalParameter>();
for(int i = 1;i<=N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen.
for(int i = 1;i<=N;i++){ //Alle verbleibenden Elemente in der übergebenen paralist durchgehen.
DeclId paramName = new DeclId("T"+i);
FormalParameter parameter = new FormalParameter(paramName);
parameter.setType(TypePlaceholder.fresh(parameter));

View File

@ -24,7 +24,7 @@ public class JavaCodeResult{
public JavaCodeResult attach(JavaCodeResult javaCodeResult){
this.javaCode += javaCodeResult.getJavaCode();
//Alle TPH anfügen:
//Alle TPH anfügen:
for(TypePlaceholder tph : javaCodeResult.getUnresolvedTPH())this.addUnresolvedTPH(tph);
return this;
}
@ -39,7 +39,7 @@ public class JavaCodeResult{
}
/**
* Liefert alle TPHs, welche in diesem JavaCodeResult nicht zu einem Typ aufgelöst wurden.
* Liefert alle TPHs, welche in diesem JavaCodeResult nicht zu einem Typ aufgelöst wurden.
* Diese TPHs stehen dadurch im JavaCode als Variablennamen ohne zugeordnetem Typ.
* @return
*/

View File

@ -13,7 +13,7 @@ public abstract class KarthesischesProdukt {
ret.add(v);
}
return ret;
//return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein.");
//return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein.");
}
return berechneKarthesischesProdukt(m1, null);
}
@ -45,7 +45,7 @@ public abstract class KarthesischesProdukt {
ret = new Menge<Menge<M>>();
ret.addAll( karthesischesProdukt2(m1.firstElement(), m2) );
}else{
throw new TypinferenzException("Der übergebene Vektor m1 ist leer.");
throw new TypinferenzException("Der übergebene Vektor m1 ist leer.");
}
return ret;*/
@ -53,10 +53,10 @@ public abstract class KarthesischesProdukt {
private static <M> Menge<Menge<M>> karthesischesProdukt(Menge<M> m1, Menge<M> m2){
Menge<Menge<M>> ret = new Menge<Menge<M>>();
/* Wird dieser Teil nicht auskommentiert, so kann auch ein Karthesisches Produkt über eine Menge mit leeren Teilmengen erstellt werden
/* Wird dieser Teil nicht auskommentiert, so kann auch ein Karthesisches Produkt über eine Menge mit leeren Teilmengen erstellt werden
if(m2.size() == 0){//Sonderfall, m2 ist leer:
ret.add(m1);
return ret; //Die restliche Berechnungen können übersprungen werden.
return ret; //Die restliche Berechnungen können übersprungen werden.
}
*/
//for(M o1 : m1){

View File

@ -15,7 +15,7 @@ public class OderConstraint extends OderMenge<Pair>{
private final static Logger logger = Logger.getLogger(OderConstraint.class.getName());
/**
* Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu.
* Erstellt ein neues Oder Constraint und fügt bereits ein Constraint hinzu.
* @param p1
* @param p2
*/
@ -30,7 +30,7 @@ public class OderConstraint extends OderMenge<Pair>{
/**
* Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verknüpfungen (Oder/Und) verloren.
* Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verknüpfungen (Oder/Und) verloren.
* @return
public Menge<Pair> getConstraintPairs(){
@ -44,7 +44,7 @@ public class OderConstraint extends OderMenge<Pair>{
*/
/**
* Fügt ein Pair(p1, p2) dem Constraint hinzu
* Fügt ein Pair(p1, p2) dem Constraint hinzu
* @param p1
* @param p2
*/
@ -64,7 +64,7 @@ public class OderConstraint extends OderMenge<Pair>{
this.addItems(methodConstraint);//oderConstraintPairs.add(methodConstraint);
}
//TODO: Funktionalität für filter implementieren
//TODO: Funktionalität für filter implementieren
void filterWrongConstraints(Unifier unifier) {
/*
Menge<UndConstraint> filteredConstraints = new Menge<>();

View File

@ -43,15 +43,15 @@ public class Pair
// ino.attribute.bSubst.26552.decldescription type=line
// false <--> vorinitialisierter Wert
// true <--> Dieses Paar entstand durch reduce1-Regel (=.)
// --> Name von TA1 mu� gleich sein wie Name von TA2
// --> Name von TA1 mu� gleich sein wie Name von TA2
// Nur noch reduce2-Regel anwendbar
// luar 15-04-2007
// Der Unify mit Wildcards benötigt 3 verschiedene Operatoren.
// Der Unify mit Wildcards benötigt 3 verschiedene Operatoren.
// Deshalb wurde der boolean durch einen Enum ersetzt.
// Smaller <--> vorinitialisierter Wert
// SmallerExtends <--> Kleiner extends (wie vorinitialisiert, nur mit einschluss der Wildcard)
// Equal <--> Gleich: Name von TA1 und TA2 müssen gleich sein.
// Equal <--> Gleich: Name von TA1 und TA2 müssen gleich sein.
// ino.end
// ino.attribute.bSubst.26552.declaration
@ -301,7 +301,7 @@ public class Pair
// ino.method.equals.26588.defdescription type=javadoc
/**
* <br/>Author: ¿½rg ¿½uerle
* <br/>Author: ¿½rg ¿½uerle
* @param obj
* @return
*/
@ -321,8 +321,8 @@ public class Pair
// ino.end
/**
* Author: Arne Lüdtke<br/>
* Überprüft ob die Paare die gleichen Instanzen sind.
* Author: Arne Lüdtke<br/>
* Überprüft ob die Paare die gleichen Instanzen sind.
*/
public boolean instanzeEquals(Object obj)
{
@ -330,7 +330,7 @@ public class Pair
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Abfrage, ob Operator vom Typ Equal ist.
*/
public boolean OperatorEqual()
@ -339,7 +339,7 @@ public class Pair
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Abfrage, ob Operator vom Typ Smaller ist.
*/
public boolean OperatorSmaller()
@ -348,7 +348,7 @@ public class Pair
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Abfrage, ob Operator vom Typ SmallerExtends ist.
*/
public boolean OperatorSmallerExtends()
@ -357,8 +357,8 @@ public class Pair
}
/**
* Author: Arne Lüdtke<br/>
* Gibt den Operator zurück.
* Author: Arne Lüdtke<br/>
* Gibt den Operator zurück.
*/
public PairOperator GetOperator()
{
@ -366,7 +366,7 @@ public class Pair
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Setzt den Operator
* @param operator - Operator to set.
*/
@ -376,7 +376,7 @@ public class Pair
}
/**
* Author: Arne Lüdtke<br/>
* Author: Arne Lüdtke<br/>
* Erzeugt einen Klon des Paares.
*/
public Pair clone()
@ -385,8 +385,8 @@ public class Pair
}
/**
* Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück.
* (Immer zwischen 0 und 2 Stück ;P)
* Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück.
* (Immer zwischen 0 und 2 Stück ;P)
* @return
*/
public Menge<TypePlaceholder> getTypePlaceholder() {

View File

@ -33,7 +33,7 @@ public class ResultSet implements Iterable<Pair> {
}
/**
* Löst den übergebenen Typ auf. Rückgabetyp ist ein Reftype oder Void
* Löst den übergebenen Typ auf. Rückgabetyp ist ein Reftype oder Void
* @param type
* @return
*/
@ -62,7 +62,7 @@ public class ResultSet implements Iterable<Pair> {
}
/**
* Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ. Der Typ wird nicht aufgelöst.
* Durchsucht das ResultSet (die unifizierten Constraints des ResultSets) nach diesem Typ. Der Typ wird nicht aufgelöst.
* Es spielt keine Rolle in welchem Kontext der Typ im ResultSet auftaucht.
* @param tA1
* @return true, falls der gesuchte Typ enthalten ist.
@ -86,7 +86,7 @@ public class ResultSet implements Iterable<Pair> {
/**
* Sammelt alle Constraints, welche mit den übergebenen TPH's in Verbindung stehen.
* Sammelt alle Constraints, welche mit den übergebenen TPH's in Verbindung stehen.
* Auch alle Constraints, welche wiederum mit den gesammelten Constraints in Verbindung stehen werden gesammelt.
* @return
*/
@ -109,7 +109,7 @@ public class ResultSet implements Iterable<Pair> {
}
/**
* Durchsucht das ResultSet nach Typen, die die übergebenen unresolvedTPHs als generische Variablen einbinden.
* Durchsucht das ResultSet nach Typen, die die übergebenen unresolvedTPHs als generische Variablen einbinden.
* @param unresolvedTPH
* @return
*/

View File

@ -11,9 +11,9 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
/**
* Beschreibung von Herrn Plümicke:
* "The set of constraints consists of constraints of the form θ R θ' , where θ and
* θ' are Java types and R (R { < , <? , = }) is a subtyping condition."
* Beschreibung von Herrn Plümicke:
* "The set of constraints consists of constraints of the form θ R θ' , where θ and
* θ' are Java types and R (R ∈ { < , <? , = }) is a subtyping condition."
*
* @author AI10023 - Andreas Stadelmeier
*
@ -21,7 +21,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
*
*/
public class SingleConstraint extends EinzelElement<Pair>{
//private Pair constraintPair; //entspricht θ condition θ'
//private Pair constraintPair; //entspricht θ condition θ'
//private R condition; //entspricht der condition (R)
public SingleConstraint(ConstraintType p1, ConstraintType p2){
@ -41,7 +41,7 @@ public class SingleConstraint extends EinzelElement<Pair>{
}
/*
@Override //Methode überschreiben, damit immer nur ein Menge mit nur einem Element zurückgeliefert wird.
@Override //Methode überschreiben, damit immer nur ein Menge mit nur einem Element zurückgeliefert wird.
public Menge<Pair> getConstraintPairs(){
Menge<Pair> ret = new Menge<Pair>();
ret.add(constraintPair);
@ -50,7 +50,7 @@ public class SingleConstraint extends EinzelElement<Pair>{
*/
public void addConstraint(ConstraintPair toAdd){
//if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich.");
//if(constraintPair != null)throw new DebugException("Ein Constraint darf nur aus einem ConstraintPair bestehen. Das hinzufügen von "+ toAdd + " ist nicht möglich.");
Type p1 = toAdd.getPair().TA1;
Type p2 = toAdd.getPair().TA2;
@ -64,12 +64,12 @@ public class SingleConstraint extends EinzelElement<Pair>{
//if((p1 instanceof GenericTypeVar))p1 = ((GenericTypeVar)p1).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");//
//if((p2 instanceof GenericTypeVar))p2 = ((GenericTypeVar)p2).getTypePlaceHolder();//throw new DebugException("GenericTypeVar sind in den Constraints nicht erlaubt");//
// BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert.
// BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert.
//if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder) && !(p1 instanceof GenericTypeVar))p1 = new RefType(p1);
//if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder) && !(p2 instanceof GenericTypeVar))p2 = new RefType(p2);
//if(!(TypePlaceholder.class.isInstance(p1)) || !(RefType.class.isInstance(p1)) || !(TypePlaceholder.class.isInstance(p2)) || !(RefType.class.isInstance(p2)))
//{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind:
//{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind:
// throw new TypinferenzException("Ein Constraint darf nur aus TypePlaceholdern und Reftypes bestehen");
//}
//if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden");

View File

@ -11,11 +11,11 @@ public interface TypeInsertable extends Typeable, IItemWithOffset {
public String getIdentifier();
/**
* Errechnet den TypeInsertPoint für das TypeInsertable.
* TypeInsertPoints sollten nur über diese Funktion erstellt werden.
* Errechnet den TypeInsertPoint für das TypeInsertable.
* TypeInsertPoints sollten nur über diese Funktion erstellt werden.
* @param tph
* @param resultSet
* @return - kann auch null zurückgeben.
* @return - kann auch null zurückgeben.
*/
public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, ResultSet resultSet);

View File

@ -6,7 +6,7 @@ public interface Typeable {
/**
* @author Andreas Stadelmeier, a10023
* Jede Expression und jedes Statement muss im Zuge des Typinferenzalgorithmus das Interfece Typable einbinden.
* Die Funktion setTypeVariable muss während des durchlaufens des Typinferenzalgorithmus einmalig für jedes Statement und jede Expression aufgerufen werden.
* Die Funktion setTypeVariable muss während des durchlaufens des Typinferenzalgorithmus einmalig für jedes Statement und jede Expression aufgerufen werden.
* Dabei kann auch eine FreshTypeVariable als Typ vergeben werden.
* @param typ Der Typ der Typable-Expression/Statement
*/

View File

@ -19,12 +19,12 @@ import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet;
// ino.class.CTypeReconstructionResult.27238.description type=javadoc
/**
* Diese Container-Klasse kapselt alle Ergebniswerte ¿½r eine ¿½gliche
* Diese Container-Klasse kapselt alle Ergebniswerte ¿½r eine ¿½gliche
* Typkombination einer Klasse und deren Methoden sowie lokalen Variablen. Eine
* Instanz dieser Klasse steht ¿½r genau eine ¿½gliche Typkombination.<br/>
* Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die
* Compiler-API zur�ckgegeben.
* @author ¿½rg ¿½uerle
* Instanz dieser Klasse steht ¿½r genau eine ¿½gliche Typkombination.<br/>
* Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die
* Compiler-API zur�ckgegeben.
* @author ¿½rg ¿½uerle
* @version $Date: 2013/09/22 20:13:02 $
*/
// ino.end
@ -41,7 +41,7 @@ public class TypeinferenceResultSet
* Das unifizierte ConstaraintsSet
*/
private ResultSet unifiedConstraints;
private de.dhbwstuttgart.syntaxtree.Class ownerOfResultSet;//Jedes Resultset gilt immer nur für eine Klasse. Diese wird in dieser Variable gespeichert.
private de.dhbwstuttgart.syntaxtree.Class ownerOfResultSet;//Jedes Resultset gilt immer nur für eine Klasse. Diese wird in dieser Variable gespeichert.
// ino.method.CTypeReconstructionResult.27256.definition
public TypeinferenceResultSet(de.dhbwstuttgart.syntaxtree.Class inferedClass, Menge<Pair> constraints, ResultSet unifiedConstraints)
@ -57,7 +57,7 @@ public class TypeinferenceResultSet
/**
* @author Andreas Stadelmeier, a10023
* Anhand des Syntaxbaums errechnet der Typinferenzalgorithmus ein Set von Constraints.
* Diese Funktion ist nur für automatisierte Tests interessant.
* Diese Funktion ist nur für automatisierte Tests interessant.
* Zum abrufen der Unifizierten Constraints siehe <code>getUnifiedConstraints()</code>
* @return
*/
@ -67,8 +67,8 @@ public class TypeinferenceResultSet
/**
* @author Andreas Stadelmeier, a10023
* Nach dem Durchführen des Interferenzalgorithmus von Lambda 8 entsteht für jede Lösung ein Set con Constraints.
* Diese Constraints haben bereits den Unify-Algorithmus durchlaufen und weißen die errechneten Typen den Typeplacholdern zu.
* Nach dem Durchführen des Interferenzalgorithmus von Lambda 8 entsteht für jede Lösung ein Set con Constraints.
* Diese Constraints haben bereits den Unify-Algorithmus durchlaufen und weißen die errechneten Typen den Typeplacholdern zu.
* @return Das fertige ConstraintsSet dieser CTypeRecunstructionResult
*/
public ResultSet getUnifiedConstraints() {
@ -77,7 +77,7 @@ public class TypeinferenceResultSet
/**
* Ermittelt den in diesem ResultSet für den TypePlaceholder tph zugewiesenen Wert.
* Ermittelt den in diesem ResultSet für den TypePlaceholder tph zugewiesenen Wert.
* @author Andreas Stadelmeier, a10023
*/
public Type getTypeOfPlaceholder(TypePlaceholder tph){
@ -86,7 +86,7 @@ public class TypeinferenceResultSet
/**
* Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse.
* @return Gibt die Klasse zurück der dieses ResultSet zugeordnet ist.
* @return Gibt die Klasse zurück der dieses ResultSet zugeordnet ist.
*/
public de.dhbwstuttgart.syntaxtree.Class getInterferedClass(){
return this.ownerOfResultSet;
@ -98,8 +98,8 @@ public class TypeinferenceResultSet
}
/**
* Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext
* Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet.
* Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext
* Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet.
*
* @return
*/
@ -112,7 +112,7 @@ public class TypeinferenceResultSet
}
/**
* Startet die Bytecodegenerierung dieser Lösung.
* Startet die Bytecodegenerierung dieser Lösung.
* Dabei wird die codegen-Methode der inferierten Klasse mit diesem ResultSet aufgerufen.
*/
public void codegen(){

View File

@ -7,7 +7,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.typeinference.unify.Unifier;
/**
* Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft.
* Stellt ein Constraint dar, welches aus mehreren Constraint-Paaren besteht. Diese gelten alle stets gleichzeitig / sind per "Und" miteinander verknüpft.
* @author janulrich
*
*/

View File

@ -34,7 +34,7 @@ public class UndMenge<A> implements KomplexeMenge<A>{
ret = km.cartesianProduct();
}else{
Menge<Menge<A>> cartesianProduct = new Menge<>();
for(Menge<A> r : ret)for(Menge<A> m : km.cartesianProduct()){ //Für jedes Element aus dem Karthesischen Produkt:
for(Menge<A> r : ret)for(Menge<A> m : km.cartesianProduct()){ //Für jedes Element aus dem Karthesischen Produkt:
Menge<A> undElement = new Menge<A>();
undElement.addAll(cloner.deepClone(r));
undElement.addAll(m);

View File

@ -11,7 +11,7 @@ public class Assumption {
private TypeInsertable typable;
/**
* Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden.
* Wird dieser Konstruktor benutzt müssen alle Methoden der Klasse Assumption überschrieben werden.
*/
protected Assumption(){
}

View File

@ -3,7 +3,7 @@ package de.dhbwstuttgart.typeinference.assumptions;
import de.dhbwstuttgart.syntaxtree.FormalParameter;
/**
* ParameterAssumptions repräsentieren die Methodenparameter innerhalb des Rumpfes einer Methode.
* ParameterAssumptions repräsentieren die Methodenparameter innerhalb des Rumpfes einer Methode.
*
* @author janulrich
*

View File

@ -24,7 +24,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
/**
* Eine Sammlung von TypeAssumptions.
* Jede Expression und jedes Statement erhält beim Aufrufen ihrer TYPE-Methode ein AssumptionSet mit den Assumptions ihrer Umgebung als Parameter übergeben.
* Jede Expression und jedes Statement erhält beim Aufrufen ihrer TYPE-Methode ein AssumptionSet mit den Assumptions ihrer Umgebung als Parameter übergeben.
* @author janulrich
*
* Es gibt verschiedene Assumptions:
@ -52,7 +52,7 @@ public class TypeAssumptions {
/**
* Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this"
* @param klassenname - Wert für "this"
* @param klassenname - Wert für "this"
*/
public TypeAssumptions(){
//this.thisClassName = klassenname;
@ -64,7 +64,7 @@ public class TypeAssumptions {
}
/**
* Liefert alle bekannten öffentlichen Feldern mit dem Namen withName. Dabei werden alle bekannten Klassen durchsucht.
* Liefert alle bekannten öffentlichen Feldern mit dem Namen withName. Dabei werden alle bekannten Klassen durchsucht.
* @param withName
* @return
*/
@ -80,7 +80,7 @@ public class TypeAssumptions {
* Liefert den Typ einer Feldvariable der Klasse inClass
* @param withName
* @param inClass
* @return null, falls die Klasse kein zugängliches Feld enthält
* @return null, falls die Klasse kein zugängliches Feld enthält
*/
public Type getTypeOfFieldVar(String withName, Class inClass){
for(FieldAssumption fa : this.getFieldVars(withName)){
@ -102,7 +102,7 @@ public class TypeAssumptions {
}
/**
* Liefert den Typ einer lokalen Variable. Zuerst werden die Parameter dieses AssumptionSets durchsucht, dann die lokalen Variablen. Anschließend die Felder der, "this" repräsentierenden Klasse
* Liefert den Typ einer lokalen Variable. Zuerst werden die Parameter dieses AssumptionSets durchsucht, dann die lokalen Variablen. Anschließend die Felder der, "this" repräsentierenden Klasse
* @param withName
* @return
*/
@ -121,7 +121,7 @@ public class TypeAssumptions {
* Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern.
* @param methodName
* @param i Die Parameter, welche die Methode verarbeiten soll
* @return Alle Methoden in den Assumptions, welche eine Parameterliste der Länge der übergebenen Parameterliste (parameter) verarbeiten können.
* @return Alle Methoden in den Assumptions, welche eine Parameterliste der Länge der übergebenen Parameterliste (parameter) verarbeiten können.
*/
public Menge<MethodAssumption> getMethodAssumptions(String methodName, int parameterCount){
Menge<MethodAssumption> ret = new Menge<MethodAssumption>();
@ -133,7 +133,7 @@ public class TypeAssumptions {
//TODO: Dieser Teil mit der Generierung von FunN-Methoden kann raus, da die FunNInterfaces sich in den Basic-Assumptions befinden sollten.
//Falls es sich um die apply-Methode eines FunN-Interface handelt:
//if(methodName.equals("apply")){ //Ein Workaround für den Typinferenzalgorithmus TODO: Das hier rausnehmen.
//if(methodName.equals("apply")){ //Ein Workaround für den Typinferenzalgorithmus TODO: Das hier rausnehmen.
//CMethodTypeAssumption funNAssumption = new FunN(parameterCount).toCMethodTypeAssumption();
// MethodAssumption funNAssumption = new MethodAssumption(new FunNMethod(parameterCount), new FunNInterface(parameter));
// ret.add(funNAssumption);
@ -144,11 +144,11 @@ public class TypeAssumptions {
/**
* Durchsucht die Assumptions des aktuellen Gültigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag für den übergebenen Variablennamen.
* In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem übergebenen Variablennamen gesucht.
* Durchsucht die Assumptions des aktuellen Gültigkeitsbereichs (lokale Variablen und Felder der aktuellen Klasse) nach einem Eintrag für den übergebenen Variablennamen.
* In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem übergebenen Variablennamen gesucht.
* @param variableName - der Identifier der gesuchten Variablen
* @param inScope - Sucht auch die Felder der übergebenen Klasse ab. Hier kann auch null übergeben werden, dann werden nur die Lokalen Variablen dieser TypeAssumption durchsucht.
* @return - Der Typ für diesen Identifier, oder null, falls kein Typ vorliegt.
* @param inScope - Sucht auch die Felder der übergebenen Klasse ab. Hier kann auch null übergeben werden, dann werden nur die Lokalen Variablen dieser TypeAssumption durchsucht.
* @return - Der Typ für diesen Identifier, oder null, falls kein Typ vorliegt.
*/
public Type getVarType(String variableName, Class inScope){
//Zuerst die Parameter durchsuchen
@ -193,7 +193,7 @@ public class TypeAssumptions {
}
/**
* Liefert alle Assumptions, außer die der lokalen Variablen, welche einer bestimmten Klasse zugeordnet sind.
* Liefert alle Assumptions, außer die der lokalen Variablen, welche einer bestimmten Klasse zugeordnet sind.
* @param className
* @return
*/
@ -280,7 +280,7 @@ public class TypeAssumptions {
/**
* Kontrolliert den vom Parser gesetzten Typ.
* Erweitert dessen Bezeichnung, wenn nötig.
* Erweitert dessen Bezeichnung, wenn nötig.
* @param t
* @return null, falls der Typ nicht vorhanden ist.
*/
@ -305,14 +305,14 @@ public class TypeAssumptions {
match = name.equals(typName);
if(match && t instanceof RefType){
RefType tr = (RefType)t;
RefType ret = ass.getAssumedClass().getType(); //Dadurch erhält der RefType den vollen Namen (bsp. java.lang.Integer)
RefType ret = ass.getAssumedClass().getType(); //Dadurch erhält der RefType den vollen Namen (bsp. java.lang.Integer)
//Falls der RefType mit Parametern angegeben wurde, so müssen diese erhalten bleiben:
//Falls der RefType mit Parametern angegeben wurde, so müssen diese erhalten bleiben:
if(tr.get_ParaList()!=null && tr.getParaList().size()>0){
ret.set_ParaList(tr.getParaList());
}
//Der RefType muss zusätzlich seine Parameter prüfen.
//Der RefType muss zusätzlich seine Parameter prüfen.
Menge<Type> parameterList = new Menge<>();
if(ret.get_ParaList()!=null)for(Type param : ret.get_ParaList()){
ConstraintType ct = param.TYPE(this, inNode);
@ -334,7 +334,7 @@ public class TypeAssumptions {
GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext();
//Der GTV-Kontext von inNOde
GTVDeclarationContext gtvNode = inNode.getGTVDeclarationContext();
//Überprüfungen (siehe Dokumentation):
//Überprüfungen (siehe Dokumentation):
if(gtvDeclNode.isClass()){ //GTV wurde in Klasse definiert
if(! gtvNode.getParentClass().equals(gtvDeclNode))sameContext = false;
}else{ //GTV wurde in Methode oder Feld definiert:
@ -353,7 +353,7 @@ public class TypeAssumptions {
}
if(t.getName() == null)throw new DebugException(t.toString());
//Spezialfälle bei char, int, boolean, ....
//Spezialfälle bei char, int, boolean, ....
String name = t.getName().toString();
switch(name){
case "int":
@ -374,8 +374,8 @@ public class TypeAssumptions {
}
/**
* Fügt eine TypAssumption an.
* Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind.
* Fügt eine TypAssumption an.
* Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind.
* Wird genutzt um vom Parser eingelesene Typen auf ihre Korrektheit zu kontrollieren.
* @param classAssumption
*/
@ -397,7 +397,7 @@ public class TypeAssumptions {
}
/**
* Fügt eine Generische Typvariablen den Assumptions hinzu
* Fügt eine Generische Typvariablen den Assumptions hinzu
* @param genericTypeVar
*/
public void addGenericVarAssumption(
@ -410,13 +410,13 @@ public class TypeAssumptions {
}
public Type checkType(RefType type, SyntaxTreeNode parent) {
ConstraintType t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen
ConstraintType t = this.getTypeFor(type, parent); //Richtigkeit des Typnahmensprüfen
type.setName(t.getType().getName()); //Und diesen auf den Typ anwenden
return t.getType();
}
/**
* Prüft einen Typ auf das vorhandensein in den BasicAssumptions.
* Prüft einen Typ auf das vorhandensein in den BasicAssumptions.
* Dabei werden alle Konstruktoren nach diesem Typ durchsucht. Denn jede Klasse hat einen Konstruktor und der muss in den TypeAssumptions vorhanden sein.
* @param t
* @return

View File

@ -4,8 +4,8 @@ import de.dhbwstuttgart.core.IItemWithOffset;
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
/**
* Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird.
* Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgelöst.
* Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird.
* Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgelöst.
* @author Andreas Stadelmeier, a10023
*
*/

View File

@ -17,9 +17,9 @@ import de.dhbwstuttgart.typeinference.TypeInsertable;
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
/**
* Ein InsertPoint für Generische Variablen
* Ein InsertPoint für Generische Variablen
* Wird beim Einsetzen eines TIP generiert.
* Steht für die Einsetzung aller Generischen Variablendeklarationen zugehörig zu einem Punkt in der SourceFile.
* Steht für die Einsetzung aller Generischen Variablendeklarationen zugehörig zu einem Punkt in der SourceFile.
* @author janulrich
*
*/
@ -37,7 +37,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint {
}
/**
* Der TypeInsertString wird im Falle des GTIP von dem zugehörigen SyntaxTreeNode generiert.
* Der TypeInsertString wird im Falle des GTIP von dem zugehörigen SyntaxTreeNode generiert.
* @return
*/
public String getTypeInsertString() {
@ -55,7 +55,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint {
@Override
public int compareTo(SourcePatchPoint arg0) {
int ret = super.compareTo(arg0);
if(ret == 0)ret = -666;//Hack der dazu führt, dass GTIP vor anderen InsertTypes eingesetzt werden.
if(ret == 0)ret = -666;//Hack der dazu führt, dass GTIP vor anderen InsertTypes eingesetzt werden.
return ret;
}
@ -95,7 +95,7 @@ class GenericVarPatch {
private Menge<TypePlaceholder> usedTPHs;
/**
* Fügt eine generische Variable in Form eines Pairs an.
* Fügt eine generische Variable in Form eines Pairs an.
* @param p
*/
public void add(Pair p){
@ -112,10 +112,10 @@ class GenericVarPatch {
}
public String getInsertString(ResultSet rs){
//Alle Generische Einsetzungen verwerfen, welche nicht benötigt werden:
//Alle Generische Einsetzungen verwerfen, welche nicht benötigt werden:
/*
* Dies geht mit der momentanen Variante nur für die genericVarDeclarations.
* Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind,
* Dies geht mit der momentanen Variante nur für die genericVarDeclarations.
* Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind,
* welche nicht im eingesetzten Typ auftauchen, aber dennoch notwendig sind.
*/
Menge<GenericVarDeclarationPatch> tmpGenVars = new Menge<>();
@ -126,7 +126,7 @@ class GenericVarPatch {
}
this.genericVarDeclarations = tmpGenVars;
//Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden:
//Hier sollten TPHs nicht aufgelöst sondern in Generische Variablen umgewandelt werden:
String ret = "";
Iterator<GenericVarDeclarationPatch> it1 = this.genericVarDeclarations.iterator();
boolean bereitsVorhanden = false;
@ -194,7 +194,7 @@ class GenericVarExtendsDeclarationPatch {
private Pair genericPair;
/**
* Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2
* Kontrolliert ob der T1 mit tph übereinstimmt im Constraint: T1 extends T2
* @param tph
* @return
*/

View File

@ -14,7 +14,7 @@ import de.dhbwstuttgart.typeinference.TypeInsertable;
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
/**
* Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar.
* Stellt eine Einsetzungsmöglichkeit für einen Typ an einem (Typeable)Punkt im Syntaxbaum dar.
* Mehrere TypeInsertPoint's werden in einem TypInsertSet zusammengefasst.
* @author janulrich
*
@ -41,7 +41,7 @@ public class TypeInsertPoint extends SourcePatchPoint {
}
/**
* Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein.
* Setzt den Typ dieses TypeInsertPoint in den übergebenen Quelltext ein.
* @param fileContent - der Quelltext
* @param additionalOffset - Falls mehrere Typen in einen Quellcode eingesetzet werden muss die Verschiebung der Offsets mit einbezogen werden.
* @return
@ -59,7 +59,7 @@ public class TypeInsertPoint extends SourcePatchPoint {
/**
*
* @return Der Offset des TypeInsertPoints in dem geparsten Source für dessen Klasse er erstellt wurde.
* @return Der Offset des TypeInsertPoints in dem geparsten Source für dessen Klasse er erstellt wurde.
*/
public int getOffset(){
return this.getInsertPoint().getOffset();
@ -79,7 +79,7 @@ public class TypeInsertPoint extends SourcePatchPoint {
}
/**
* @return - Der Punkt (Knoten) im Syntaxbaum, für den dieser TypeInsertPoint gilt.
* @return - Der Punkt (Knoten) im Syntaxbaum, für den dieser TypeInsertPoint gilt.
*/
public IItemWithOffset getInsertPoint(){
return this.point;

View File

@ -19,9 +19,9 @@ import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.TypeInsertable;
/**
* Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören.
* Das TypeInsertSet löst zudem Abhängigkeiten auf. Wird eine Generische Variable eingesetzt,
* müssen alle mit ihr in Verbindung stehenden Typen ebenfalls eingesetzt werden.
* Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören.
* Das TypeInsertSet löst zudem Abhängigkeiten auf. Wird eine Generische Variable eingesetzt,
* müssen alle mit ihr in Verbindung stehenden Typen ebenfalls eingesetzt werden.
* @author janulrich
*
*/
@ -37,7 +37,7 @@ public class TypeInsertSet {
}
/**
* Fügt einen TypeInsertPoint dem TypeInsertSet hinzu.
* Fügt einen TypeInsertPoint dem TypeInsertSet hinzu.
* @param typeInsertPoint
* @return
*/
@ -48,7 +48,7 @@ public class TypeInsertSet {
}
/**
* Fügt nur einen einzelnen TypeInsertPoint in fileContent ein.
* Fügt nur einen einzelnen TypeInsertPoint in fileContent ein.
* @param tip
* @param fileContent
* @return
@ -60,7 +60,7 @@ public class TypeInsertSet {
}
/**
* Fügt einen einzelnen TypeInsertPoint einem TypePatchJob hinzu
* Fügt einen einzelnen TypeInsertPoint einem TypePatchJob hinzu
* @param tip
* @param tpj
*/
@ -68,8 +68,8 @@ public class TypeInsertSet {
/*
* Ablauf:
* 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln.
* 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen)
* 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen.
* 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen)
* 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen.
* 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind.
* 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2)
* 6. Alle unbekannten TPHs + Pairs als GenericTypeInsertPoint deklarieren.
@ -102,7 +102,7 @@ public class TypeInsertSet {
/*
// und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen)
// und Schritt 5: (Es werden nur die TPHs übernommen, welche noch nicht in den involvedTPHs vorkommen)
for(Pair pair : pairs)for(Type t : pair.getTypes())for(TypePlaceholder tph : t.getInvolvedTypePlaceholder()){
if(!allTPHs.contains(tph)){
allTPHs.add(tph);
@ -144,7 +144,7 @@ public class TypeInsertSet {
}
/**
* Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein
* Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein
* @param fileContent
* @return
*/
@ -160,7 +160,7 @@ public class TypeInsertSet {
/**
*
* @param node
* @return - null, falls kein InsertPoint für node vorhanden.
* @return - null, falls kein InsertPoint für node vorhanden.
*/
public TypeInsertPoint getInsertPointFor(TypeInsertable node){
for(TypeInsertPoint point : points){
@ -179,14 +179,14 @@ public class TypeInsertSet {
//Jeder TypeInsertPoint muss auch in equals vorkommen:
if(!equals.points.contains(point))
return false;
//... aber nicht öfter als 1x :
//... aber nicht öfter als 1x :
if(equals.points.lastIndexOf(point)!=equals.points.indexOf(point))return false;
}
return true;
}
/**
* Fügt TypeInsertPoints an
* Fügt TypeInsertPoints an
* @param insertPoints
*/
public void add(Menge<TypeInsertPoint> insertPoints) {

View File

@ -30,7 +30,7 @@ import de.dhbwstuttgart.typeinference.Pair;
* <code>TypePlaceholder</code> auf einen Substitutions-Typ ab. Instanzen dieser
* Klasse werden in der Regel aus
* <code>Pair</code>-Objekten erzeugt.
* @author J<EFBFBD>rg B<EFBFBD>uerle
* @author J�rg ¿½uerle
* @version $Date: 2006/07/10 11:27:04 $
*/
// ino.end
@ -74,7 +74,7 @@ public class CSubstitution
// ino.method.CSubstitution.27021.body
{
if(!(unifier.TA1 instanceof TypePlaceholder)){
throw new CTypeReconstructionException("Unifier enth<EFBFBD>lt keinen Typeplaceholder",unifier.TA1);
throw new CTypeReconstructionException("Unifier enth�lt keinen Typeplaceholder",unifier.TA1);
}
m_TypeVar = (TypePlaceholder)unifier.TA1;
m_Type = unifier.TA2;
@ -84,7 +84,7 @@ public class CSubstitution
// ino.method.getType.27024.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @return Returns the Type.
*/
// ino.end
@ -99,7 +99,7 @@ public class CSubstitution
// ino.method.setType.27027.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param type The Type to set.
*/
// ino.end
@ -114,7 +114,7 @@ public class CSubstitution
// ino.method.getTypeVar.27030.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @return Returns the TypeVar.
*/
// ino.end
@ -129,7 +129,7 @@ public class CSubstitution
// ino.method.setTypeVar.27033.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @param typeVar The TypeVar to set.
*/
// ino.end
@ -184,7 +184,7 @@ public class CSubstitution
// ino.method.applyUnifier.27048.defdescription type=javadoc
/**
* Wendet den Unifier auf die rechte Seite dieser Substitution an.
* <br/>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br/>Author: J�rg ¿½uerle
* @param unifier
*/
// ino.end
@ -207,8 +207,8 @@ public class CSubstitution
// ino.method.applySubstitution.27051.defdescription type=javadoc
/**
* Wendet die <EFBFBD>bergebene Substitution rekursiv auf den <EFBFBD>bergebenen Typ an.
* <br/>Author: J<EFBFBD>rg B<EFBFBD>uerle
* Wendet die �bergebene Substitution rekursiv auf den �bergebenen Typ an.
* <br/>Author: J�rg ¿½uerle
* @param type Der zu untersuchende Typ
* @param unifierSub Die anzuwendende Substitution
* @return Den ermittelnden Typ

View File

@ -11,7 +11,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type;
* <code>TypePlaceholder</code> auf einen Substitutions-Typ ab. Instanzen dieser
* Klasse werden in der Regel aus
* <code>Pair</code>-Objekten erzeugt.
* @author Martin Pl<EFBFBD>micke
* @author Martin Pl�micke
* @version $Date: 2006/06/13 10:37:32 $
*/
// ino.end
@ -45,7 +45,7 @@ public class CSubstitutionGenVar extends CSubstitution
// ino.method.getTypeVar.27070.defdescription type=javadoc
/**
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
* Author: J�rg ¿½uerle<br/>
* @return Returns the TypeVar.
*/
// ino.end

View File

@ -12,7 +12,7 @@ import de.dhbwstuttgart.typeinference.Pair;
// ino.class.CSubstitutionSet.27471.description type=javadoc
/**
* @author J<EFBFBD>rg B<EFBFBD>uerle
* @author J�rg ¿½uerle
* @version $Date: 2013/03/27 18:29:34 $
*/
// ino.end
@ -71,7 +71,7 @@ public class CSubstitutionSet extends CVectorSet<CSubstitution>
// ino.method.applyUnifier.27487.defdescription type=javadoc
/**
* Wendet den Unifier auf die rechten Seiten alle Substitutionen an.
* <br/>Author: J<EFBFBD>rg B<EFBFBD>uerle
* <br/>Author: J�rg ¿½uerle
* @param unifier
*/
// ino.end

View File

@ -9,7 +9,7 @@ import de.dhbwstuttgart.typeinference.Menge;
// ino.class.CMengeSet.27519.description type=javadoc
/**
* @author ¿½rg ¿½uerle
* @author ¿½rg ¿½uerle
* @version $Date: 2013/02/07 05:08:51 $
*/
// ino.end
@ -85,9 +85,9 @@ public abstract class CVectorSet<E> extends CSet<E>
// ino.end
/**
* Fügt ein CMengeSet an!
* Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen)
* @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert)
* Fügt ein CMengeSet an!
* Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen)
* @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert)
*/
// ino.method.unite.27544.definition
public void unite(CSet<E> anotherSet)
@ -99,7 +99,7 @@ public abstract class CVectorSet<E> extends CSet<E>
}
CVectorSet<E> MengeSet = (CVectorSet<E>)anotherSet;
// Elemente der anderen Menge hinzuf�gen:
// Elemente der anderen Menge hinzuf�gen:
Iterator<E> it = MengeSet.getIterator();
while(it.hasNext()){
E elem = it.next();

View File

@ -11,8 +11,8 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
// ino.class.FC_TTO.28013.description type=javadoc
/**
* Hilfsklasse f<EFBFBD>r den Unifizierungsalgorithmus
* @author Martin Pl<EFBFBD>micke
* Hilfsklasse f�r den Unifizierungsalgorithmus
* @author Martin Pl�micke
* @version $Date: 2013/05/12 14:00:05 $
*/
// ino.end

View File

@ -46,7 +46,7 @@ import de.dhbwstuttgart.typeinference.UndConstraint;
// ino.class.Unify.28049.description type=javadoc
/**
* Implementierung des Unifizierungsalgorithmus
* @author Martin Pl�micke, Thomas Ott
* @author Martin Pl�micke, Thomas Ott
* @version $Date: 2013/05/22 22:23:50 $
*/
// ino.end
@ -116,7 +116,7 @@ public class Unify
* Entweder alle Elemente in solved Form [A =. type, B =. type2, ...]
* oder alle Elemente in der Form [A <. B, C <. D, ..., E <? F, G <? H, .... I =. type, J =. type2, ...]
* oder [] = fail
* Für den Argumenttype FunN<...> in Typ A<FunN<...> ...> werden keine ? extends-, ? super-Typen erzeugt
* Für den Argumenttype FunN<...> in Typ A<FunN<...> ...> werden keine ? extends-, ? super-Typen erzeugt
*/
public static Menge<Menge<Pair>> unify (Menge<Pair> E, FC_TTO fc_tto)
{
@ -140,7 +140,7 @@ public class Unify
}
else if(!(p.TA1 instanceof TypePlaceholder) && !(p.TA2 instanceof TypePlaceholder))
{
//Diese Paare können nicht mehr Unifiziert werden. fail.
//Diese Paare können nicht mehr Unifiziert werden. fail.
inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " muesste mindestens einen TPH enthalten.");
return new Menge<Menge<Pair>>();
}
@ -152,8 +152,8 @@ public class Unify
if(!Eq1.contains(p))
Eq2.add(p);
}
/* Schritt 4, Teil 1: Einsammeln der Sets für das Kartesiche Produkt.
* Hier werden die Paare verglichen. Je nach Struktur können neue Paare erzeugt
/* Schritt 4, Teil 1: Einsammeln der Sets für das Kartesiche Produkt.
* Hier werden die Paare verglichen. Je nach Struktur können neue Paare erzeugt
* werden, aus denen dann das kartesische Produkt gebildet wird.*/
Menge<Menge<Menge<Pair>>> cartProduktSets = new Menge<Menge<Menge<Pair>>>();
for(Pair p : Eq2)
@ -165,7 +165,7 @@ public class Unify
p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType();
//HIER GIBT ES EIN PROBLEM, WENN get_SuperType ein TPH LIEFERT PL 15-03-12
//Dann ist THP <. TPH in Eq2 anstatt in Eq1
//Muesste mit folgendem if gelöst sein. PL 15-03-17
//Muesste mit folgendem if gelöst sein. PL 15-03-17
if (p.TA2 instanceof TypePlaceholder) {
Eq1.addElement(p);
// Eq2.remove(p);
@ -216,7 +216,7 @@ public class Unify
unifyErgs.add(unifyErgsElement.firstElement());
}
}
// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht.
// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht.
if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty())
|| p_fc.TA2.equals(p_TA2)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05
{
@ -315,7 +315,7 @@ public class Unify
}
else if(p.OperatorSmaller() && p.TA2 instanceof GenericTypeVar)
{
//Paar unverändert lassen, wenn eine GenericTypeVar ist
//Paar unverändert lassen, wenn eine GenericTypeVar ist
Menge<Menge<Pair>> setofsetofpairs = new Menge<Menge<Pair>>();
Menge<Pair> vTmp = new Menge<Pair>();
vTmp.add(p);
@ -357,7 +357,7 @@ public class Unify
unifyErgs.add(unifyErgsElement.firstElement());
}
}
//Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht.
//Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht.
if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty())
|| p_fc.TA2.equals(p_TA2)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05
{
@ -532,7 +532,7 @@ public class Unify
unifyErgs.add(unifyErgsElement.firstElement());
}
}
// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht.
// Nach dem Unifizieren wird das Ergebnis überprüft, und evtl. durch die FC entstandene TPHs werden gelöscht.
if((p_fc.TA2 instanceof RefType && !unifyErgs.isEmpty())
|| p_fc.TA2.equals(p_TA1)) //Bedingung fuer Reflexifitaet BRAURHT MAN VERMUTLIRH NIRHT PL 07-08-05
{
@ -631,7 +631,7 @@ public class Unify
}
}
//Schritt 4, Teil 2: Kartesisches Produkt bilden.
//TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern
//TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern
//cartProduktSets kontrollieren:
ConstraintsSet cSet = new ConstraintsSet();
for (Menge<Menge<Pair>> vecvecpair : cartProduktSets){
@ -688,7 +688,7 @@ public class Unify
}
//Schritt 5: Einsetzen der Subst Regel
//Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert.
//Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert.
Menge<Menge<Pair>> changedSets = new Menge<Menge<Pair>>();
Menge<Menge<Pair>> notChangedSets = new Menge<Menge<Pair>>();
for(Menge<Pair> vecpair : bigCartProductErg)
@ -742,29 +742,29 @@ public class Unify
}
}
//Eq2Set ist das eigentliche Ergebnis, dass zurückgegeben wird.
//Eq2Set ist das eigentliche Ergebnis, dass zurückgegeben wird.
Menge<Menge<Pair>> Eq2Set = new Menge<Menge<Pair>>();
//Schritt 6A: Beginnen mit Schritt 1 bei den geänderten.
//Schritt 6A: Beginnen mit Schritt 1 bei den geänderten.
for(Menge<Pair> vecpair : changedSets)
{
Menge<Menge<Pair>> unifyErgs = unify(vecpair,fc_tto);
//Die Ergebnissvektoren sind schon im Schritt 7 von dem Rekursiven Aufruf geprüft worden. Sie können direkt eingefügt werden.
//Die Ergebnissvektoren sind schon im Schritt 7 von dem Rekursiven Aufruf geprüft worden. Sie können direkt eingefügt werden.
Eq2Set.addAll(unifyErgs);
}
//Schritt 6B Einfügen der nicht geänderten.
//Schritt 6B Einfügen der nicht geänderten.
//Schritt 7: Aussortieren der falschen Sets
/*
* Durch die Rekursion in Schritt 6A sind die Ergebnisse, welche in 6A dazukommen auf jeden Fall korrekt.
* Es müssen nur die Ergebnisse aus 6B geprüft werden.
* Es müssen nur die Ergebnisse aus 6B geprüft werden.
*/
for(Menge<Pair> vecpair : notChangedSets)
{
//Überprüfen ob Menge in SolvedForm ist.
//Überprüfen ob Menge in SolvedForm ist.
if(hasSolvedForm(vecpair)) //PL 13-05-22 hasSolvedForm angepasst
{
//Überprüfung auf FreshTypeVars in den Typen
//Überprüfung auf FreshTypeVars in den Typen
boolean foundFresh = false;
for(Pair p : vecpair)
{
@ -782,14 +782,14 @@ public class Unify
}
}
//Ergebnis zurückgeben.
//Ergebnis zurückgeben.
return Eq2Set;
}
/**
* PL 2014-10-25
* schnitt1 checkt ob die Typeplaceholders aus in den Elemeneten aus vars enthalten sind
* Rückgabe ist die Menge der Indizies von vars der Schnittmengen mit var nicht leer sind.
* Rückgabe ist die Menge der Indizies von vars der Schnittmengen mit var nicht leer sind.
* @param var
* @param vars
* @param indexe
@ -840,10 +840,10 @@ public class Unify
* Beispiel: unifyERgs = [[a = Integer, b = Number ]], test = Menge<a>
* In diesm fall wird b = Number aus dem Menge entfernt.
*
* Durch das Entfernen entstehen evtl. Identische Mengeen, diese werden auch gelöscht.
* Durch das Entfernen entstehen evtl. Identische Mengeen, diese werden auch gelöscht.
*
* @param unifyErgs - Ergebnisse des Unify, die geprüft werden sollen.
* @param test - RefType gegen den geprüft werden soll.
* @param unifyErgs - Ergebnisse des Unify, die geprüft werden sollen.
* @param test - RefType gegen den geprüft werden soll.
*/
private static void testUnifyErg(Menge<Menge<Pair>> unifyErgs, RefType test)
{
@ -857,7 +857,7 @@ public class Unify
vec--;
}
}
//Gleiche Mengeen löschen
//Gleiche Mengeen löschen
for(int i = 0; i < unifyErgs.size(); i++)
{
Menge<Pair> p1 = unifyErgs.elementAt(i);
@ -886,13 +886,13 @@ public class Unify
}
/**
* Diese Methode generiert einen Menge<Menge<Pair>> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten.
* Diese Methode generiert einen Menge<Menge<Pair>> wobei immer der übergebene TA1 vorne steht, und jeder Typ aus otherPairTypes hinten.
* Beispiel: otherPairTypes = [Integer, Number, Menge<Integer>], TA1 = TPH a.
* return: [[TPH a = Integer],[TPH a = Number],[TPH a = Menge<Integer>]]
*
* @param TA1 - Der Typ der immer vorne steht
* @param otherPairTypes - Die anderen Typen
* @return - Ein Menge<Menge<Pair>> der alle Paare enthält.
* @return - Ein Menge<Menge<Pair>> der alle Paare enthält.
*/
private static Menge<Menge<Pair>> generateSetOfSetOfPair(Type TA1, Menge<? extends Type> otherPairTypes)
{
@ -993,7 +993,7 @@ public class Unify
//Menge wird geclont, Elemente nicht
//Menge<RefType> Mub = (Menge<RefType>)ub.clone();
//Elemente die nicht kleinste obere Schranken sind, werden gel�scht
//Elemente die nicht kleinste obere Schranken sind, werden gel�scht
//FUNKTIONIERT NICHT. SIEHE iftest.java PL 08-08-13
for (int i = 0; i < ub.size(); i++) {
for (int j = 0; j < ub.size(); j++) {
@ -1049,7 +1049,7 @@ throws MatchException
// ino.method.match.28064.body
{
//PL 05-01-22
//gibt eine Substitution zur�ck, die den Variablen aus FCtype
//gibt eine Substitution zur�ck, die den Variablen aus FCtype
//die Typterme aus tomatch zu ordnet. Es wird davon ausgegangen, dass
//FCtype gegen tomatch gematcht werden kann.
if (FCtype.getTypeName().equals(tomatch.getTypeName())) {
@ -1093,7 +1093,7 @@ throws MatchException
// ino.method.sub_unify.28067.body
{
//PL 05-01-21 umbenannt in sub_unify
//Luar boolean useSubst hinzugefügt, um bei bedarf zu Steuern ob Subst Regel angewendet wird oder nicht.
//Luar boolean useSubst hinzugefügt, um bei bedarf zu Steuern ob Subst Regel angewendet wird oder nicht.
// otth: Unifikation - Versuch 1 :-)
//Menge FC = fc_tto.getFC();
@ -1118,7 +1118,7 @@ throws MatchException
inferencelog.debug("Ausgewaehltes Paar = " + P.toString() + "");
inferencelog.debug( "--------------------------------------------------");
// Bei allen Erase erfolgt keine Kopie nach H, dadurch wird das Pair gelöscht.
// Bei allen Erase erfolgt keine Kopie nach H, dadurch wird das Pair gelöscht.
//ERASE3
if( P.isEqual() && P.OperatorEqual() )
{
@ -1240,13 +1240,13 @@ throws MatchException
}
catch( SCException Ex )
{
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
break;
}
}
else
{
inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!");
inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!");
break;
}
}
@ -1297,13 +1297,13 @@ throws MatchException
}
catch( SCException Ex )
{
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
break;
}
}
else
{
inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!");
inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!");
break;
}
}
@ -1374,7 +1374,7 @@ throws MatchException
RefType TA1 = null;
RefType TA2 = null;
//Hier werden die RefTypes gefüllt.
//Hier werden die RefTypes gefüllt.
if(P.TA1 instanceof RefType && P.TA2 instanceof RefType)
{
TA1 = (RefType)P.TA1;
@ -1396,7 +1396,7 @@ throws MatchException
}
catch( SCException Ex )
{
inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
break;
}
}
@ -1429,7 +1429,7 @@ throws MatchException
}
catch( SCException Ex )
{
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
break;
}
}
@ -1449,7 +1449,7 @@ throws MatchException
}
catch( SCException Ex )
{
inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
break;
}
}
@ -1562,7 +1562,7 @@ throws MatchException
}
// Subst --> noch zu pr�fen
// Subst --> noch zu pr�fen
if( P.TA1 instanceof TypePlaceholder && P.OperatorEqual() && useSubst) //&& P.TA2 instanceof RefType )
//PL 05-02-09 P.TA@ duerfen auch TypePlaceholder sein
/* BEISPIEL:
@ -1716,7 +1716,7 @@ throws MatchException
/**
* Implementiert die reduceEq Regel des sub_unify
* Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren.
* Da in reduce2 unnötigerweise pi verwendet wird (siehe Kommentar in reduce2), kann reduceEq einfach an reduce2 deligieren.
*/
private static void reduceEq(Menge<Pair> H, RefType TA1, RefType TA2, Menge TTO) throws SCException
{
@ -1738,11 +1738,11 @@ throws MatchException
inferencelog.debug("---- Parameteranzahl gleich");
inferencelog.debug("---- Reduce !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)");
// hier mu� die PERMUTATION erfolgen
// hier mu� die PERMUTATION erfolgen
inferencelog.debug("---- PAARBILDUNG ");
for( int k = 0; k < L1.size(); k++ )
{
// pi eig. bei reduce2 �berfl�ssig, schadet aber hoff. auch nicht :-)
// pi eig. bei reduce2 �berfl�ssig, schadet aber hoff. auch nicht :-)
//luar 19-04-2007 durch das pi kann reduce2 auch als reduceEq verwendet werden. Wenn das pi durch k ersetzt wird, muss reduceEq entsprechend ausprogrammiert werden.
Pair P2 = new Pair( L1.elementAt( pi(k, TA1.getTypeName(), TA2.getTypeName(), TTO ) ), L2.elementAt(k), PairOperator.Equal );
inferencelog.debug("---- Paar1: (" + (L1.elementAt( pi(k, TA1.getTypeName(), TA2.getTypeName(), TTO ) )).getName() + ", " + (L2.elementAt(k)).getName() + P2.OperatorEqual() + ")");
@ -2041,7 +2041,7 @@ throws MatchException
//LIEGT
//erlegigt 06-04-28
Menge<Pair> res = sub_unify(subunifypair, fc_tto);
if (hasSolvedForm(res)) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert.
if (hasSolvedForm(res)) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert.
inferencelog.debug("HasSolvedForm: ");
printMenge("RES_SMALLER", res, 6);
ht = MengePair2SubstHashtableMengePair(res);
@ -2222,7 +2222,7 @@ throws MatchException
{
// otth: Funktion, die prueft, ob Paar( R1, R2 ) in FC liegt,
// bzw. deren rechten Seiten, ohne die TypePlaceholder-Variablen zu beachten
// z.B. Menge<A> ¿½re hier gleich wie Menge<Integer>
// z.B. Menge<A> ¿½re hier gleich wie Menge<Integer>
// z.B. FC = { ( AA<a, b> <=* CC< DD<b, a> > ) ,...}
// R1 = AA<Integer, b>
@ -2270,7 +2270,7 @@ throws MatchException
{
// otth: Funktion, die prueft, ob Paar( R1, \sigma(R2) ) in FC liegt,
// bzw. deren rechten Seiten, ohne die TypePlaceholders zu beachten
// z.B. Menge<A> ¿½re hier gleich wie Menge<Integer>
// z.B. Menge<A> ¿½re hier gleich wie Menge<Integer>
// z.B. FC = { ( AA<a, b> <=* CC< DD<b, a> > ) ,...}
// R1 = AA<Integer, b>
@ -2308,7 +2308,7 @@ throws MatchException
Menge<Pair> vp = sub_unify(R2vec, fc_tto);
printMenge("VP", vp, 6);
if ( hasSolvedForm(vp) ) //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert.
if ( hasSolvedForm(vp) ) //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert.
//if( isRXSimilarRY( RFC, R2 ) )
{
inferencelog.debug("SIMILAR2");
@ -2405,7 +2405,7 @@ throws MatchException
if (o instanceof RefType) {//PL 05-02-09 eingefuegt siehe Methodenkopf
if( bMitVorbedingung && isTVinRefType( a, (RefType)o ) )
{
inferencelog.debug(" Subst nicht m�glich, da TV " + a.getName() + " in RefType " + o.getName());
inferencelog.debug(" Subst nicht m�glich, da TV " + a.getName() + " in RefType " + o.getName());
return false;
}
}
@ -2415,7 +2415,7 @@ throws MatchException
{
// Parameterliste durchgehen
Menge vTemp = ((RefType)T).get_ParaList();
Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs
Boolean ret = true; //EINGEFUEGT PL 14-01-16: Return darf erst am Ende zurückgegeben werden und nicht in den ifs
//sonst werden nicht alle Elemente der Forschleife durchlaufen
for( int i = 0; i < vTemp.size(); i++ )
{
@ -2461,7 +2461,7 @@ throws MatchException
return true;
}
}
//Wildcard ergänzt PL 14-12-05
//Wildcard ergänzt PL 14-12-05
if ( T instanceof ExtendsWildcardType )
{
Type Temp = ((ExtendsWildcardType) T).get_ExtendsType();
@ -2476,7 +2476,7 @@ throws MatchException
}
}
}
//Wildcard ergänzt PL 14-12-05
//Wildcard ergänzt PL 14-12-05
if ( T instanceof SuperWildcardType )
{
Type Temp = ((SuperWildcardType) T).get_SuperType();
@ -2557,7 +2557,7 @@ throws MatchException
{
// otth: Funktion pr�ft, ob Klasse 'Basis' von Klasse 'Mutter' direkt oder indirekt abgeleitet ist
// otth: Funktion pr�ft, ob Klasse 'Basis' von Klasse 'Mutter' direkt oder indirekt abgeleitet ist
// Basisklasse suchen
Menge tto = fc_tto.getTTO();
@ -2581,9 +2581,9 @@ throws MatchException
}
/*
* Hier wird überprüft ob in der Paraliste ein anderes Element als ein GTV drinne ist.
* Sollte ein anderes Element gefunden werden ist Reduce nicht möglich.
* Beispiel: Matrix <. Menge<Menge<Integer>> ist nur durch adapt möglich.
* Hier wird überprüft ob in der Paraliste ein anderes Element als ein GTV drinne ist.
* Sollte ein anderes Element gefunden werden ist Reduce nicht möglich.
* Beispiel: Matrix <. Menge<Menge<Integer>> ist nur durch adapt möglich.
*/
for(Type t : s)
{
@ -2717,7 +2717,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
if( n >= vD.size() )
throw F;
// Permuationswert ¿½r 'n' berechnen
// Permuationswert ¿½r 'n' berechnen
Type TV = (Type)vD.elementAt(n);
int nPos = -1;
@ -2749,12 +2749,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
// ino.method.printMengeUnifier.28121.body
{
//PL 05-01-21
//Ruft ¿½r eine Menge von Unifikatoren die Methode
//Ruft ¿½r eine Menge von Unifikatoren die Methode
//printMenge auf
for (int i = 0; i < Uni.size(); i++) {
inferencelog.debug((i+1) + ". Unifier");
printMenge(strMenge, Uni.elementAt(i), nDebug);
if( hasSolvedForm( Uni.elementAt(i) ) ) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert.
if( hasSolvedForm( Uni.elementAt(i) ) ) { //PL 13-05-22: hasSolvedForm geaendert, es nicht geklärt, ob es funktioniert.
inferencelog.debug((i+1) + ". Unifier ist in 'Solved form'!\n");
}
else {
@ -2781,7 +2781,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
}
for( int tt = 0; tt < E.size(); tt++ ) {
//luar 13-03-07 If Else Block gelöscht, da sinnlos.
//luar 13-03-07 If Else Block gelöscht, da sinnlos.
if( tt > 0 )
strTemp = strTemp + ",\n" + E.elementAt(tt).toString();
else
@ -2874,7 +2874,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
/**
* Implementiert die CaptureConversion. Wendet diese auf jeden Typ im Menge TVec an.
* Rückgabe ist ein ErgebnisMenge
* Rückgabe ist ein ErgebnisMenge
*/
private static Menge<ObjectType> CaptureConversion(Menge<ObjectType> TVec, FC_TTO fc_tto)
{
@ -2882,7 +2882,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
for(ObjectType t : TVec)
{
ObjectType ccT = (ObjectType)CaptureConversion(t,fc_tto);
//CaptureConversion kann nur ObjectTypes zurückliefern, laesst sich aber nicht zurziehen.
//CaptureConversion kann nur ObjectTypes zurückliefern, laesst sich aber nicht zurziehen.
if(ccT != null)
retVec.add(ccT);
}
@ -2892,7 +2892,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
/**
* Erzeugt die CaptureConversion von einem Typ.
*
* @param T - Übergebener Typ, von welchem die CaptureConversion gemacht werden soll.
* @param T - Übergebener Typ, von welchem die CaptureConversion gemacht werden soll.
* @param fc_tto - Hilfsklasse.
* @return - CC(T)
*/
@ -2927,7 +2927,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
if(t instanceof WildcardType)
{
FreshWildcardType fwcT = ((WildcardType)t).GetFreshWildcardType();
//Wenn beim Original Typ an der Stelle eine BoundedGenericTypeVar ist werden die Bounds zu der Wildcard hinzugefügt.
//Wenn beim Original Typ an der Stelle eine BoundedGenericTypeVar ist werden die Bounds zu der Wildcard hinzugefügt.
if(cl.get_ParaList().elementAt(i) instanceof BoundedGenericTypeVar)
{
BoundedGenericTypeVar bgv = (BoundedGenericTypeVar)cl.get_ParaList().elementAt(i);
@ -2941,7 +2941,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
}
refT.set_ParaList(ccTypes);
}
//Wenn eine CaptureConversion durchgeführt wurde den Typ zurückgeben.
//Wenn eine CaptureConversion durchgeführt wurde den Typ zurückgeben.
if(ccDone)
return refT;
else
@ -2958,13 +2958,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
//Von hier an Greater implementierung 28-03-07
/**
* Der Komplette Ablauf von greater und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen
* im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden.
* Der Komplette Ablauf von greater und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen
* im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden.
*/
/**
* Erzeugt alle Typen die greater sind als T. Gibt diese zurück.
* Für den Argumenttype FunN<...> in Typ A<FunN<...> ...> werden keine ? extends-, ? super-Typen erzeugt
* Erzeugt alle Typen die greater sind als T. Gibt diese zurück.
* Für den Argumenttype FunN<...> in Typ A<FunN<...> ...> werden keine ? extends-, ? super-Typen erzeugt
*/
private static Menge<ObjectType> greater(ObjectType T, FC_TTO fc_tto)
//an die Aenderungen im Skript anpassen 07-11-03
@ -2989,22 +2989,22 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
//greater1 Erzeugen
Menge<ObjectType> greater1Erg = greater1(T,fc_tto);
//Reflexivität, deshalb T hinzufügen.
//Reflexivität, deshalb T hinzufügen.
if(!greater1Erg.contains(T))
greater1Erg.add(T);
//Falls in greater1Erg Typen doppelt vorhanden sind werden diese nicht in retVec übernommen.
//Falls in greater1Erg Typen doppelt vorhanden sind werden diese nicht in retVec übernommen.
for(ObjectType t : greater1Erg)
if(!retVec.contains(t))
retVec.add(t);
//Ergebnis von greater1 an greater2 durchreichen, ERgebnisse in retVec einfügen
//Ergebnis von greater1 an greater2 durchreichen, ERgebnisse in retVec einfügen
Menge<ObjectType> greater2Erg = greater2(greater1Erg,fc_tto);
for(ObjectType t : greater2Erg)
if(!retVec.contains(t))
retVec.add(t);
//Ergebnis von greater2 an greater3 durchreichen, ERgebnisse in retVec einfügen
//Ergebnis von greater2 an greater3 durchreichen, ERgebnisse in retVec einfügen
Menge<ObjectType> greater3Erg = greater3(greater2Erg,fc_tto);
for(ObjectType t : greater3Erg)
if(!retVec.contains(t))
@ -3015,7 +3015,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
/**
* greater1 Schritt von greater.
* Für den Argumenttype FunN<...> in Typ A<FunN<...> ...> werden keine ? extends-, ? super-Typen erzeugt
* Für den Argumenttype FunN<...> in Typ A<FunN<...> ...> werden keine ? extends-, ? super-Typen erzeugt
*/
private static Menge<ObjectType> greater1(ObjectType T, FC_TTO fc_tto)
{
@ -3053,8 +3053,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
}
/**
* Überladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter
* welcher für die rekursion erforderlich ist mit übergeben muss.
* Überladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter
* welcher für die rekursion erforderlich ist mit übergeben muss.
*/
private static Menge<Menge<Type>> cartProductType (Menge<Menge<Type>> vec)
{
@ -3063,7 +3063,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
/**
* Erzeugt das Kartesische Product von mehreren Mengeen von Typen.
* Für den Startaufruf ist der index = 0. Danach ruft sich cartProductType rekursiv auf.
* Für den Startaufruf ist der index = 0. Danach ruft sich cartProductType rekursiv auf.
*/
private static Menge<Menge<Type>> cartProductType (Menge<Menge<Type>> vec, int index)
{
@ -3098,8 +3098,8 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
}
/**
* Überladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter
* welcher für die rekursion erforderlich ist mit übergeben muss.
* Überladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter
* welcher für die rekursion erforderlich ist mit übergeben muss.
*/
private static Menge<Menge<Pair>> cartProductPair (Menge<Menge<Pair>> vec)
{
@ -3108,7 +3108,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
/**
* Erzeugt das Kartesische Product von mehreren Mengeen von Paaren.
* Für den Startaufruf ist der index = 0. Danach ruft sich cartProductPair rekursiv auf.
* Für den Startaufruf ist der index = 0. Danach ruft sich cartProductPair rekursiv auf.
*/
private static Menge<Menge<Pair>> cartProductPair (Menge<Menge<Pair>> vec, int index)
{
@ -3168,7 +3168,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
/**
* greaterArg Schritt von greater
* Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt
* Für den Argumenttype FunN<...> werden keine ? extends-, ? super-Typen erzeugt
*/
private static Menge<Type> greaterArg(Type T, FC_TTO fc_tto)
{
@ -3224,7 +3224,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
return new Menge<Type>();
*/
//Diese Abfrage sorgt für grArg(a) = {a} //Luar 07-07-31
//Diese Abfrage sorgt für grArg(a) = {a} //Luar 07-07-31
else if(T instanceof TypePlaceholder)
retVec.add(T);
//Diese Abfrage verhindert, dass bei FunN Wildcard-Typen generiert werden //PL 13-05-22
@ -3253,7 +3253,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
Menge<ObjectType> retVec = new Menge<ObjectType>();
/*
* luar 02-05-07: Beschreibung der Funktion:
* Für Jeden Typ aus greater1 durch die FC laufen, und auf der Linken seite einen Match versuchen.
* Für Jeden Typ aus greater1 durch die FC laufen, und auf der Linken seite einen Match versuchen.
* Wenn das Funktioniert, dann ist der Typ auf der rechten Seite auch greater.
* */
Hashtable<JavaClassName,Type> ht = new Hashtable<JavaClassName,Type>();
@ -3278,7 +3278,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
RefType TA2neu = ((RefType)p.TA2).clone();
SubstHashtableGeneric(TA2neu,ht);
//TA2neu ist greater als T. Einfügen in retVec
//TA2neu ist greater als T. Einfügen in retVec
if(!retVec.contains(TA2neu))
retVec.add(TA2neu);
}
@ -3308,12 +3308,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
//Von hier an Smaller implementierung luar 28-03-07
/**
* Der Komplette Ablauf von smaller und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen
* im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden.
* Der Komplette Ablauf von smaller und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen
* im Inovator Projekt, oder in der Studienarbeit Arne Lüdtke, 2007 nachgelesen werden.
*/
/**
* Erzeugt alle Typen die smaller sind als T. Gibt diese zurück.
* Erzeugt alle Typen die smaller sind als T. Gibt diese zurück.
*/
private static Menge<ObjectType> smaller(ObjectType T, FC_TTO fc_tto)
//an die Aenderungen im Skript anpassen 07-11-03
@ -3349,18 +3349,18 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
if(!smaller12Erg.contains(T))
smaller12Erg.add(T);
//Ergebnise in retVec einfügen. Doppelte werden gelöscht.
//Ergebnise in retVec einfügen. Doppelte werden gelöscht.
for(ObjectType t : smaller12Erg)
if(!retVec.contains(t))
retVec.add(t);
//Ergebnis von smaller1 und smaller2 an smaller3 weitergeben, Ergebnisse einfügen.
//Ergebnis von smaller1 und smaller2 an smaller3 weitergeben, Ergebnisse einfügen.
Menge<ObjectType> smaller3Erg = smaller3(smaller12Erg,fc_tto);
for(ObjectType t : smaller3Erg)
if(!retVec.contains(t))
retVec.add(t);
//Ergebnisse von smaller3 an smaller4 weitergeben, Ergebnisse einfügen.
//Ergebnisse von smaller3 an smaller4 weitergeben, Ergebnisse einfügen.
Menge<ObjectType> smaller4Erg = smaller4(smaller3Erg);
for(ObjectType t : smaller4Erg)
if(!retVec.contains(t))
@ -3409,7 +3409,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
Menge<Type> retVec = new Menge<Type>();
if(T instanceof ExtendsWildcardType)
{
//Für eine ExtendsWildcard rekursiv smaller0 aufrufen, und neue Wildcards erzeugen.
//Für eine ExtendsWildcard rekursiv smaller0 aufrufen, und neue Wildcards erzeugen.
ExtendsWildcardType exT = (ExtendsWildcardType)T;
Menge<ObjectType> smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto);
for(ObjectType t : smallerTypes)
@ -3420,7 +3420,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
}
else if(T instanceof SuperWildcardType)
{
//Für eine SuperWildcard rekursiv greater0 aufrufen, unr neue Wildcards erzeugen.
//Für eine SuperWildcard rekursiv greater0 aufrufen, unr neue Wildcards erzeugen.
SuperWildcardType suT = (SuperWildcardType)T;
Menge<ObjectType> greaterTypes = greater0(suT.get_SuperType(),fc_tto);
for(ObjectType t : greaterTypes)
@ -3459,7 +3459,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
Menge<ObjectType> retVec = new Menge<ObjectType>();
/*
* luar 02-05-07: Beschreibung der Funktion:
* Für Jeden Typ aus Smaller12 durch die FC laufen, und auf der Rechten seite einen Match versuchen.
* Für Jeden Typ aus Smaller12 durch die FC laufen, und auf der Rechten seite einen Match versuchen.
* Wenn das Funktioniert, dann ist der Typ auf der linken Seite auch smaller.
* */
Hashtable<JavaClassName,Type> ht = new Hashtable<JavaClassName,Type>();
@ -3482,7 +3482,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
//Macht hat funktioniert. In Linker Seite Typen substituieren
RefType TA1neu = ((RefType)p.TA1).clone();
SubstHashtableGeneric(TA1neu,ht);
//TA1neu ist smaller als T. Einfügen in retVec
//TA1neu ist smaller als T. Einfügen in retVec
if(!retVec.contains(TA1neu))
retVec.add(TA1neu);
}
@ -3532,12 +3532,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
}
/**
* Gibt True zurück, wenn T eine FreshWildcard ist, oder im Falle eines RefTypes oder WildcardTypes eine FreshWildcard enthält.
* Gibt True zurück, wenn T eine FreshWildcard ist, oder im Falle eines RefTypes oder WildcardTypes eine FreshWildcard enthält.
*/
private static boolean DelFreshWildcardTypeVar(Type T)
{
//luar 29-05-2007
//Überprüft rekursiv ob in dem RefType ein FreshWildcardType enthalten ist.
//Überprüft rekursiv ob in dem RefType ein FreshWildcardType enthalten ist.
if(T instanceof RefType)
{
RefType refT = (RefType)T;
@ -3546,7 +3546,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
if(DelFreshWildcardTypeVar(t))
return true;
}
//Im Falle einer Wildcard, Typen aus der WC rausnehmen und diesen rekursiv prüfen.
//Im Falle einer Wildcard, Typen aus der WC rausnehmen und diesen rekursiv prüfen.
if(T instanceof ExtendsWildcardType)
return DelFreshWildcardTypeVar(((ExtendsWildcardType)T).get_ExtendsType());