forked from JavaTX/JavaCompilerCore
Encoding auf UTF-8 geändert
This commit is contained in:
parent
76ee7bb549
commit
ae40372a8b
@ -48,7 +48,7 @@ public class ClassFile
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.class.ClassFile.21492.body
|
// 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
|
// ino.attribute.codegenlog.21495.decldescription type=line
|
||||||
// Logger fuer Code-Gen
|
// Logger fuer Code-Gen
|
||||||
@ -391,15 +391,15 @@ public class ClassFile
|
|||||||
//aload_0 zuwening im Konstruktor erzeugt. Deshalb schreibe ich
|
//aload_0 zuwening im Konstruktor erzeugt. Deshalb schreibe ich
|
||||||
//es hier hard rein.
|
//es hier hard rein.
|
||||||
//Test Workaround: Das eigentliche Problem: "Warum fehlt das aload_0" ist
|
//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
|
//noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case
|
||||||
//in allen anderen F<EFBFBD>llen wird f<EFBFBD>lschlicher Weise das aload_0 einef<EFBFBD>gt.
|
//in allen anderen F�llen wird f�lschlicher Weise das aload_0 einef�gt.
|
||||||
if(this.hamaAload0 == true)
|
if(this.hamaAload0 == true)
|
||||||
{
|
{
|
||||||
byte b2 = 42;
|
byte b2 = 42;
|
||||||
Byte b1 = new Byte(b2);
|
Byte b1 = new Byte(b2);
|
||||||
code.add_code(b1);
|
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
|
//hama: bis hier experimentell
|
||||||
if(block != null)
|
if(block != null)
|
||||||
@ -418,9 +418,9 @@ public class ClassFile
|
|||||||
//aload_0 zuwening in der set Methode erzeugt. Deshalb schreibe ich
|
//aload_0 zuwening in der set Methode erzeugt. Deshalb schreibe ich
|
||||||
//es hier hard rein.
|
//es hier hard rein.
|
||||||
//Test Workaround: Das eigentliche Problem: "Warum fehlt das aload_0" ist
|
//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
|
//noch nicht behoben. Au�erdem stimmt das hier nur f�r den einen Use Case
|
||||||
//in allen anderen F<EFBFBD>llen einer Set Methode wird f<EFBFBD>lschlicher Weise das
|
//in allen anderen F�llen einer Set Methode wird f�lschlicher Weise das
|
||||||
//aload_0 einef<EFBFBD>gt.
|
//aload_0 einef�gt.
|
||||||
if(this.hamaAload0 == true)
|
if(this.hamaAload0 == true)
|
||||||
{
|
{
|
||||||
if(name.equals("set"))
|
if(name.equals("set"))
|
||||||
@ -429,7 +429,7 @@ public class ClassFile
|
|||||||
Byte b1 = new Byte(b2);
|
Byte b1 = new Byte(b2);
|
||||||
code.add_code(b1);
|
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.
|
//hama: bis hier experimentell.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//PL 14-03-21: calculate_max_stack() duerfte nicht stimmen
|
//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
|
//in codegen "short max_stack = calculate_max_stack();" auskommentiert
|
||||||
//muss wieder einkommentiert werden
|
//muss wieder einkommentiert werden
|
||||||
|
|
||||||
|
@ -1083,7 +1083,7 @@ public class JVMCode
|
|||||||
String type_neu = ((GenericTypeVar)paralist.elementAt(i)).getName();
|
String type_neu = ((GenericTypeVar)paralist.elementAt(i)).getName();
|
||||||
if(type_neu.equals(type))
|
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";
|
type = "Object";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ public class ConsoleInterface {
|
|||||||
for(String file : args){
|
for(String file : args){
|
||||||
filenames.add(file);
|
filenames.add(file);
|
||||||
}
|
}
|
||||||
Logger.setStandardConfiguration(new LoggerConfiguration()); // sämtliches Logging unterdrücken
|
Logger.setStandardConfiguration(new LoggerConfiguration()); // sämtliches Logging unterdrücken
|
||||||
|
|
||||||
run(filenames);
|
run(filenames);
|
||||||
}
|
}
|
||||||
@ -47,7 +47,7 @@ public class ConsoleInterface {
|
|||||||
///////////////////////
|
///////////////////////
|
||||||
// Ausgabe:
|
// 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>();
|
ArrayList<String> resultJavaCodes = new ArrayList<String>();
|
||||||
for(TypeinferenceResultSet result : resultSet){
|
for(TypeinferenceResultSet result : resultSet){
|
||||||
String javaCode = result.getInterferedClass().printJavaCode(result);
|
String javaCode = result.getInterferedClass().printJavaCode(result);
|
||||||
@ -55,7 +55,7 @@ public class ConsoleInterface {
|
|||||||
}
|
}
|
||||||
for(String out : resultJavaCodes){
|
for(String out : resultJavaCodes){
|
||||||
|
|
||||||
System.out.println("\nMögliche Typisierung:\n\n");
|
System.out.println("\nMögliche Typisierung:\n\n");
|
||||||
System.out.println(out);
|
System.out.println(out);
|
||||||
}
|
}
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
|
@ -83,7 +83,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
// ino.attribute.m_AbstractSyntaxTree.21280.decldescription type=javadoc
|
// ino.attribute.m_AbstractSyntaxTree.21280.decldescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Der abstrake Syntaxbaum
|
* Der abstrake Syntaxbaum
|
||||||
* <br/>Autor: J�rg B�uerle
|
* <br/>Autor: J�rg B�uerle
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.attribute.m_AbstractSyntaxTree.21280.declaration
|
// ino.attribute.m_AbstractSyntaxTree.21280.declaration
|
||||||
@ -92,10 +92,10 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.MyCompiler.21283.defdescription type=javadoc
|
// ino.method.MyCompiler.21283.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden
|
* Der private Konstruktor. Es soll von au�en kein Compiler angelegt werden
|
||||||
* k�nnen, sondern nur eine API zur Verf�gung gestellt werden.
|
* k�nnen, sondern nur eine API zur Verf�gung gestellt werden.
|
||||||
* @param logger Konfiguration für Debug Ausgabe TODO
|
* @param logger Konfiguration für Debug Ausgabe TODO
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.MyCompiler.21283.definition
|
// ino.method.MyCompiler.21283.definition
|
||||||
@ -109,8 +109,8 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.getAPI.21286.defdescription type=javadoc
|
// ino.method.getAPI.21286.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
|
* Stellt eine neue Instanz der CompilerAPI zur Verf�gung.
|
||||||
* Diese Methode sollte von der IDE aus aufgerufen werden,
|
* Diese Methode sollte von der IDE aus aufgerufen werden,
|
||||||
* um eine Quellcode-Datei zu kompilieren.
|
* um eine Quellcode-Datei zu kompilieren.
|
||||||
* @return Die Compiler-API
|
* @return Die Compiler-API
|
||||||
@ -132,8 +132,8 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
/**
|
/**
|
||||||
* Author: Thomas Ott<br/>
|
* Author: Thomas Ott<br/>
|
||||||
* Ersetzt in der Superklassenparameterliste einer Klasse, diejenigen
|
* Ersetzt in der Superklassenparameterliste einer Klasse, diejenigen
|
||||||
* <code>GenericTypeVars</code>, zu denen es eine Klasse gibt, die gleich hei�t.
|
* <code>GenericTypeVars</code>, zu denen es eine Klasse gibt, die gleich hei�t.
|
||||||
* Beim Parsen werden n�mlich vom Jay nur GenericTypeVars erzeugt und keine
|
* Beim Parsen werden n�mlich vom Jay nur GenericTypeVars erzeugt und keine
|
||||||
* RefTypes. Dies wird durch diese Methode nachgeholt.<br/>
|
* RefTypes. Dies wird durch diese Methode nachgeholt.<br/>
|
||||||
* Bsp.: class JoergsTolleKlasse<A> extends MartinsSuperklasse<Integer, B>
|
* Bsp.: class JoergsTolleKlasse<A> extends MartinsSuperklasse<Integer, B>
|
||||||
* <br/>Wie man an diesem Beispiel sieht, kann nur eine Superklasse instantiierte
|
* <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
|
//wandleGeneric2RefType SOLLTE NICHT NUR FUER LISTEN
|
||||||
//VON TYPEN FUNKTIONIEREN PL 05-01-19
|
//VON TYPEN FUNKTIONIEREN PL 05-01-19
|
||||||
// otth: GenericTypeVar in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln,
|
// otth: GenericTypeVar in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln,
|
||||||
// falls: f�r GenericTypeVar existiert eine gleichnamige Klasse
|
// falls: f�r GenericTypeVar existiert eine gleichnamige Klasse
|
||||||
if(Parameter == null) return;
|
if(Parameter == null) return;
|
||||||
|
|
||||||
for( int i = 0; i < Parameter.size(); i++)
|
for( int i = 0; i < Parameter.size(); i++)
|
||||||
@ -165,7 +165,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
if ( TempParameter instanceof GenericTypeVar)
|
if ( TempParameter instanceof GenericTypeVar)
|
||||||
{
|
{
|
||||||
inferencelog.debug("Generic, WANDLE: " + TempParameter.getName());
|
inferencelog.debug("Generic, WANDLE: " + TempParameter.getName());
|
||||||
// existiert f�r GenericTypeVar eine deklarierte Klasse
|
// existiert f�r GenericTypeVar eine deklarierte Klasse
|
||||||
for( int k = 0; k < KlassenVektor.size(); k++)
|
for( int k = 0; k < KlassenVektor.size(); k++)
|
||||||
{
|
{
|
||||||
if( KlassenVektor.elementAt(k).getSimpleName().equals(TempParameter.getSimpleName()) )
|
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
|
* Parst den Quellcode und baut den abstrakten Syntaxbaum auf. Danach wird
|
||||||
* automatisch der von Thomas Ott implementierte Algorithmus
|
* 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.
|
* aufgerufen.
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param reader
|
* @param reader
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
* @throws JavaParser.yyException
|
* @throws JavaParser.yyException
|
||||||
@ -248,7 +248,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
parserlog.info("#########################################\n");
|
parserlog.info("#########################################\n");
|
||||||
|
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
// Alte Daten l�schen:
|
// Alte Daten l�schen:
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
m_AbstractSyntaxTree = null;
|
m_AbstractSyntaxTree = null;
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
//PL 05-07-31 verschoben nach SourceFile.java in Methode typeReconstruction
|
//PL 05-07-31 verschoben nach SourceFile.java in Methode typeReconstruction
|
||||||
// otth: TypePlaceholders in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln,
|
// otth: TypePlaceholders in Superklassenparameterlisten in RefTypes mit Parameterlsite = NULL umwandeln,
|
||||||
// falls: f�r TypePlaceholder existiert eine gleichnamige Klasse
|
// falls: f�r TypePlaceholder existiert eine gleichnamige Klasse
|
||||||
// Superklasse suchen
|
// Superklasse suchen
|
||||||
//for( int i = 0; i < srcFile.KlassenVektor.size(); i++ )
|
//for( int i = 0; i < srcFile.KlassenVektor.size(); i++ )
|
||||||
//{
|
//{
|
||||||
@ -309,10 +309,10 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
if ( tempKlassBody != null )
|
if ( tempKlassBody != null )
|
||||||
{
|
{
|
||||||
strKlasse = tempKlasse.getName();
|
strKlasse = tempKlasse.getName();
|
||||||
parserlog.debug("T->Felddeklarationen f�r die Klasse:" + strKlasse);
|
parserlog.debug("T->Felddeklarationen f�r die Klasse:" + strKlasse);
|
||||||
parserlog.debug( "------------------------------------");
|
parserlog.debug( "------------------------------------");
|
||||||
|
|
||||||
// Schleife �ber alle fielddeclarations
|
// Schleife �ber alle fielddeclarations
|
||||||
tempMengeFieldDecl = tempKlassBody.getFields();
|
tempMengeFieldDecl = tempKlassBody.getFields();
|
||||||
for( int k = 0; k < tempMengeFieldDecl.size(); k++ )
|
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());
|
//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
|
String strConstName = ((DeclId)tempFieldDecl.get_Name().elementAt(0)).get_Name(); // Konstruktorname
|
||||||
if ( !strConstName.equals( strKlasse ) )
|
if ( !strConstName.equals( strKlasse ) )
|
||||||
{
|
{
|
||||||
@ -336,9 +336,9 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
Methode.set_ExceptionList( Konstruktor.get_ExceptionList() );
|
Methode.set_ExceptionList( Konstruktor.get_ExceptionList() );
|
||||||
Methode.setReturnType( Konstruktor.getReturnType() );
|
Methode.setReturnType( Konstruktor.getReturnType() );
|
||||||
Methode.setDeclIdMenge( Konstruktor.getDeclIdMenge() );
|
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
|
||||||
|
|
||||||
// R�ckgabetyp = Objekt der Klasse 'TypePlaceholder'
|
// R�ckgabetyp = Objekt der Klasse 'TypePlaceholder'
|
||||||
|
|
||||||
// #JB# 31.03.2005
|
// #JB# 31.03.2005
|
||||||
// ###########################################################
|
// ###########################################################
|
||||||
@ -359,7 +359,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
// Debugg-Infos
|
// Debugg-Infos
|
||||||
parserlog.debug("");
|
parserlog.debug("");
|
||||||
parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse);
|
parserlog.debug("T->NEUE Felddeklarationen f�r die Klasse:" + strKlasse);
|
||||||
parserlog.debug( "-----------------------------------------");
|
parserlog.debug( "-----------------------------------------");
|
||||||
for( int k = 0; k < tempMengeFieldDecl.size(); k++ )
|
for( int k = 0; k < tempMengeFieldDecl.size(); k++ )
|
||||||
{
|
{
|
||||||
@ -389,14 +389,14 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
tempMethod = (Method)tempFieldDecl;
|
tempMethod = (Method)tempFieldDecl;
|
||||||
tempReturn = tempMethod.getReturnType();
|
tempReturn = tempMethod.getReturnType();
|
||||||
|
|
||||||
// Funktionen ohne definierten R�ckgabetyp suchen!!!
|
// Funktionen ohne definierten R�ckgabetyp suchen!!!
|
||||||
if( tempReturn instanceof TypePlaceholder )
|
if( tempReturn instanceof TypePlaceholder )
|
||||||
{
|
{
|
||||||
// Methode mit nicht-definiertem R�ckgabetyp gefunden!
|
// Methode mit nicht-definiertem R�ckgabetyp gefunden!
|
||||||
|
|
||||||
// #JB# 31.03.2005
|
// #JB# 31.03.2005
|
||||||
// ###########################################################
|
// ###########################################################
|
||||||
// Wird bereits �ber fresh() gemacht!!
|
// Wird bereits �ber fresh() gemacht!!
|
||||||
//tempReturn.setName( TypePlaceholder.makeNewName() );
|
//tempReturn.setName( TypePlaceholder.makeNewName() );
|
||||||
// ###########################################################
|
// ###########################################################
|
||||||
parserlog.debug("");
|
parserlog.debug("");
|
||||||
@ -425,7 +425,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
// #JB# 31.03.2005
|
// #JB# 31.03.2005
|
||||||
// ###########################################################
|
// ###########################################################
|
||||||
// Wird bereits �ber fresh() gemacht!!
|
// Wird bereits �ber fresh() gemacht!!
|
||||||
//tempType.setName( TypePlaceholder.makeNewName() );
|
//tempType.setName( TypePlaceholder.makeNewName() );
|
||||||
// ###########################################################
|
// ###########################################################
|
||||||
}
|
}
|
||||||
@ -458,7 +458,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// ino.method.init.21295.defdescription type=javadoc
|
// ino.method.init.21295.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* Initialisiert den Compiler
|
* Initialisiert den Compiler
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -476,11 +476,11 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.parse.21298.defdescription type=javadoc
|
// ino.method.parse.21298.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* Ruft die Parse-Methode.
|
* Ruft die Parse-Methode.
|
||||||
* @param file Die Quellcode-Datei
|
* @param file Die Quellcode-Datei
|
||||||
* @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert.
|
* @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.
|
* @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -500,9 +500,9 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.typeReconstruction.21304.defdescription type=javadoc
|
// ino.method.typeReconstruction.21304.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* Ruft den Typrekonstruktionsalgorithmus auf.
|
* 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
|
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
|
||||||
* ist. @throws CTypeReconstructionException Wenn ein Fehler bei der
|
* ist. @throws CTypeReconstructionException Wenn ein Fehler bei der
|
||||||
* Typrekonstruktion auftritt.
|
* Typrekonstruktion auftritt.
|
||||||
@ -538,13 +538,13 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Erstellt die FunN-Assumptions
|
* Erstellt die FunN-Assumptions
|
||||||
* Fun0-FunN (momentan für N = 6)
|
* Fun0-FunN (momentan für N = 6)
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private TypeAssumptions makeFunNAssumptions(){
|
private TypeAssumptions makeFunNAssumptions(){
|
||||||
TypeAssumptions ret = new TypeAssumptions();
|
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
|
//TODO: Hier mehr als Fun1-Fun5 implementieren
|
||||||
for(int i = 0; i<6; i++){
|
for(int i = 0; i<6; i++){
|
||||||
FunNInterface funN = new FunNInterface(i);
|
FunNInterface funN = new FunNInterface(i);
|
||||||
@ -556,8 +556,8 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
|
* Generiert den Bytecode und das Class-File f�r den Syntaxbaum.
|
||||||
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
|
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
|
||||||
* ist.
|
* ist.
|
||||||
|
|
||||||
@ -583,7 +583,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.main.21313.defdescription type=javadoc
|
// 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.
|
* werden kann.
|
||||||
* @param args Klassendatei
|
* @param args Klassendatei
|
||||||
*/
|
*/
|
||||||
@ -696,7 +696,7 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
for( int i = 0; i < containedTypes.size(); i++)
|
for( int i = 0; i < containedTypes.size(); i++)
|
||||||
{
|
{
|
||||||
Type tempParameter = (Type)(containedTypes.elementAt(i));
|
Type tempParameter = (Type)(containedTypes.elementAt(i));
|
||||||
// Nat�rlich nur RefTypes updaten
|
// Nat�rlich nur RefTypes updaten
|
||||||
if(tempParameter instanceof RefType){
|
if(tempParameter instanceof RefType){
|
||||||
RefType typ=(RefType)tempParameter;
|
RefType typ=(RefType)tempParameter;
|
||||||
UsedId fullyQualifiedName=UsedId.createFromQualifiedName(typ.getTypeName(),typ.getOffset());
|
UsedId fullyQualifiedName=UsedId.createFromQualifiedName(typ.getTypeName(),typ.getOffset());
|
||||||
@ -717,9 +717,9 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
// ino.end
|
// ino.end
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @author Arne Lüdtke
|
* @author Arne Lüdtke
|
||||||
* Ersetzt alle GTVs durch TPHs mit gleichem Namen. Arbeitet Rekursiv.
|
* 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.
|
* @param T - Typ, bei welchem die GTVs ersetzt werden sollen.
|
||||||
*/
|
*/
|
||||||
public static Type makeGenericTypeVars2TypePlaceHolders(Type T)
|
public static Type makeGenericTypeVars2TypePlaceHolders(Type T)
|
||||||
@ -811,12 +811,12 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
|
|
||||||
StringReader srcreader = new StringReader(fileData.toString());
|
StringReader srcreader = new StringReader(fileData.toString());
|
||||||
//Den aus der Datei ausgelesenen Quellcode zu einem Syntaxbaum parsen:
|
//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 = "";
|
String gesamterSrc = "";
|
||||||
//Hier werden alle übergebenen Dateinamen abgearbeitet:
|
//Hier werden alle übergebenen Dateinamen abgearbeitet:
|
||||||
for(String filename : filenames){
|
for(String filename : filenames){
|
||||||
try {
|
try {
|
||||||
StringBuffer fileData = new StringBuffer();
|
StringBuffer fileData = new StringBuffer();
|
||||||
@ -829,15 +829,15 @@ public class MyCompiler implements MyCompilerAPI
|
|||||||
fileData.append(readData);
|
fileData.append(readData);
|
||||||
}
|
}
|
||||||
reader.close();
|
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) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
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 {
|
try {
|
||||||
// und anschließend zum Parsen übergeben.
|
// und anschließend zum Parsen übergeben.
|
||||||
this.parse(gesamterSrc.toString());
|
this.parse(gesamterSrc.toString());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -24,7 +24,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
|
|||||||
* IDE als Compiler-API zum Kompilieren einer Quellcode-Datei
|
* IDE als Compiler-API zum Kompilieren einer Quellcode-Datei
|
||||||
* dienen und stellt somit die Schnittstelle zur Studienarbeit
|
* dienen und stellt somit die Schnittstelle zur Studienarbeit
|
||||||
* von Markus Melzer (Eclipse-Plugin) dar.
|
* von Markus Melzer (Eclipse-Plugin) dar.
|
||||||
* @author Jörg Bäuerle
|
* @author Jörg Bäuerle
|
||||||
* @version $Date: 2013/09/09 11:04:24 $
|
* @version $Date: 2013/09/09 11:04:24 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -36,7 +36,7 @@ public interface MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.init.21331.decldescription type=javadoc
|
// ino.method.init.21331.decldescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: Jörg Bäuerle<br/>
|
* Author: Jörg Bäuerle<br/>
|
||||||
* Initialisiert den Compiler
|
* Initialisiert den Compiler
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -46,11 +46,11 @@ public interface MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.parse.21334.decldescription type=javadoc
|
// 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.
|
* Parst eine Quellcodedatei und baut den abstrakten Syntaxbaum auf.
|
||||||
* @param file Die Quellcode-Datei
|
* @param file Die Quellcode-Datei
|
||||||
* @throws FileNotFoundException Wenn die Quellcode-Datei nicht existiert.
|
* @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.
|
* @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -61,10 +61,10 @@ public interface MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.parse.21337.decldescription type=javadoc
|
// 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.
|
* Parst einen String und baut den abstrakten Syntaxbaum auf.
|
||||||
* @param srcCode Der zu parsende Quellcode
|
* @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.
|
* @throws JavaParser.yyException Wenn ein Fehler beim Parsen auftritt.
|
||||||
|
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -76,9 +76,9 @@ public interface MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.typeReconstruction.21340.decldescription type=javadoc
|
// ino.method.typeReconstruction.21340.decldescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: Jörg Bäuerle<br/>
|
* Author: Jörg Bäuerle<br/>
|
||||||
* Ruft den Typrekonstruktionsalgorithmus auf.
|
* 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
|
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
|
||||||
* ist. @throws CTypeReconstructionException Wenn ein Fehler bei der
|
* ist. @throws CTypeReconstructionException Wenn ein Fehler bei der
|
||||||
* Typrekonstruktion auftritt.
|
* Typrekonstruktion auftritt.
|
||||||
@ -91,8 +91,8 @@ public interface MyCompilerAPI
|
|||||||
|
|
||||||
// ino.method.codeGeneration.21346.decldescription type=javadoc
|
// ino.method.codeGeneration.21346.decldescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: Jörg Bäuerle<br/>
|
* Author: Jörg Bäuerle<br/>
|
||||||
* Generiert den Bytecode und das Class-File für den Syntaxbaum.
|
* Generiert den Bytecode und das Class-File für den Syntaxbaum.
|
||||||
* @param syntaxTree Der Syntaxbaum
|
* @param syntaxTree Der Syntaxbaum
|
||||||
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
|
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
|
||||||
* ist. @throws JVMCodeException
|
* ist. @throws JVMCodeException
|
||||||
@ -124,7 +124,7 @@ public interface MyCompilerAPI
|
|||||||
// ino.end
|
// 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
|
* @param filenames - Eine Liste von Quellcodedateien, welche gseparst werden sollen
|
||||||
*/
|
*/
|
||||||
public void parse(Menge<String> filenames) throws ParserError;
|
public void parse(Menge<String> filenames) throws ParserError;
|
||||||
|
@ -34,8 +34,8 @@ public class Logger {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird.
|
* Logt eine Debug Message, welche zusätzlich einer bestimmten Section zugewiesen wird.
|
||||||
* Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten.
|
* Dadurch lässt sich die DEBUG ausgabe übersichtlicher gestalten.
|
||||||
* @param message
|
* @param message
|
||||||
* @param section
|
* @param section
|
||||||
*/
|
*/
|
||||||
@ -45,7 +45,7 @@ public class Logger {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Liefert den Logger mit dem angegebenen Namen.
|
* 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() )
|
* @param name - Name der Klasse ( Ermittelbar mittels <Klasse>.class.getName() )
|
||||||
* @return
|
* @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) {
|
public static void setStandardConfiguration(LoggerConfiguration config) {
|
||||||
Logger.standardConfiguration = config;
|
Logger.standardConfiguration = config;
|
||||||
|
@ -12,7 +12,7 @@ public class LoggerConfiguration{
|
|||||||
|
|
||||||
public LoggerConfiguration setOutput(Section forSection, PrintStream output){
|
public LoggerConfiguration setOutput(Section forSection, PrintStream output){
|
||||||
if(outputs.containsKey(forSection)){
|
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)){
|
if(outputs.get(forSection).equals(output)){
|
||||||
//do nothing
|
//do nothing
|
||||||
}else{
|
}else{
|
||||||
|
@ -3,7 +3,7 @@ package de.dhbwstuttgart.logger;
|
|||||||
import java.util.logging.Level;
|
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
|
* @author janulrich
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -9,7 +9,7 @@ import de.dhbwstuttgart.core.IItemWithOffset;
|
|||||||
|
|
||||||
// ino.class.CTypeReconstructionException.23746.description type=javadoc
|
// ino.class.CTypeReconstructionException.23746.description type=javadoc
|
||||||
/**
|
/**
|
||||||
* @author J<EFBFBD>rg B<EFBFBD>uerle
|
* @author J�rg B�uerle
|
||||||
* @version $Date: 2006/06/13 10:37:31 $
|
* @version $Date: 2006/06/13 10:37:31 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -66,7 +66,7 @@ public class JavaClassName {
|
|||||||
return false;
|
return false;
|
||||||
if (packageName != null && other.packageName != null) {
|
if (packageName != null && other.packageName != null) {
|
||||||
if (!packageName.equals(other.packageName))
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/********************************************
|
/********************************************
|
||||||
* file: JavaLexer.lex *
|
* file: JavaLexer.lex *
|
||||||
* *
|
* *
|
||||||
* enth<EFBFBD>lt die JLex-Spezifikation f<EFBFBD>r die *
|
* enth�lt die JLex-Spezifikation f�r die *
|
||||||
* Generierung des lexical analyzers *
|
* Generierung des lexical analyzers *
|
||||||
* *
|
* *
|
||||||
********************************************/
|
********************************************/
|
||||||
|
@ -46,7 +46,7 @@ void initUsedIdsToCheck() {
|
|||||||
}
|
}
|
||||||
//PL 05-07-30 eingefuegt. ENDE
|
//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>();
|
public Menge<Pair> testPair = new Menge<Pair>();
|
||||||
//LUAR 07-05-29 Ende
|
//LUAR 07-05-29 Ende
|
||||||
// line 53 "-"
|
// line 53 "-"
|
||||||
@ -817,7 +817,7 @@ case 19:
|
|||||||
{
|
{
|
||||||
UsedId UI = new UsedId(((Token)yyVals[0+yyTop]).getOffset());
|
UsedId UI = new UsedId(((Token)yyVals[0+yyTop]).getOffset());
|
||||||
UI.set_Name( ((Token)yyVals[0+yyTop]).getLexem() );
|
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;
|
yyVal = UI;
|
||||||
}
|
}
|
||||||
break;
|
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 GenericTypeVar(((Token)yyVals[0+yyTop]).getLexem(),null, ((Token)yyVals[0+yyTop]).getOffset()));
|
||||||
/*pl.getParalist().addElement( new TypePlaceholder($1.getLexem()) );*/
|
/*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;
|
yyVal = pl;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -991,7 +991,7 @@ case 37:
|
|||||||
RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null,((Token)yyVals[-3+yyTop]).getOffset() );
|
RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null,((Token)yyVals[-3+yyTop]).getOffset() );
|
||||||
t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() );
|
t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() );
|
||||||
pl.getParalist().addElement(t);
|
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;
|
yyVal = pl;
|
||||||
}
|
}
|
||||||
break;
|
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()));
|
((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()));*/
|
/*$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);
|
de.dhbwstuttgart.logger.Logger.getLogger("parser").debug( "paralist: " + ((ParaList)yyVals[-2+yyTop]).getParalist(), Section.PARSER);
|
||||||
yyVal=((ParaList)yyVals[-2+yyTop]);
|
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() );
|
RefType t = new RefType( ((Token)yyVals[-3+yyTop]).getLexem(),null ,((Token)yyVals[-3+yyTop]).getOffset() );
|
||||||
t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() );
|
t.set_ParaList( ((ParaList)yyVals[-1+yyTop]).get_ParaList() );
|
||||||
((ParaList)yyVals[-5+yyTop]).getParalist().addElement(t);
|
((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]);
|
yyVal=((ParaList)yyVals[-5+yyTop]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1252,7 +1252,7 @@ case 71:
|
|||||||
{
|
{
|
||||||
if (((Menge)yyVals[0+yyTop]) != null) {
|
if (((Menge)yyVals[0+yyTop]) != null) {
|
||||||
/*$1.set_ParaList($2.get_ParaList());*/
|
/*$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 */
|
/* otth: originale (also diese) Parameterliste retten */
|
||||||
/*((UsedId)$1).vParaOrg = new Menge<Type>( $2.get_ParaList() );*/
|
/*((UsedId)$1).vParaOrg = new Menge<Type>( $2.get_ParaList() );*/
|
||||||
}
|
}
|
||||||
@ -1410,7 +1410,7 @@ case 91:
|
|||||||
break;
|
break;
|
||||||
case 92:
|
case 92:
|
||||||
// line 863 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
// 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]).setType(((Type)yyVals[-2+yyTop]));
|
||||||
((FieldDeclaration)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop]));
|
((FieldDeclaration)yyVals[-1+yyTop]).setGenericParameter(((GenericDeclarationList)yyVals[-3+yyTop]));
|
||||||
yyVal=((FieldDeclaration)yyVals[-1+yyTop]);
|
yyVal=((FieldDeclaration)yyVals[-1+yyTop]);
|
||||||
@ -1906,7 +1906,7 @@ case 153:
|
|||||||
/* #JB# 10.04.2005 */
|
/* #JB# 10.04.2005 */
|
||||||
/* ########################################################### */
|
/* ########################################################### */
|
||||||
met.setLineNumber(((Token)yyVals[-2+yyTop]).getLineNumber());
|
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();
|
DeclId DImethod = new DeclId();
|
||||||
DImethod.set_Name(((Token)yyVals[-2+yyTop]).getLexem());
|
DImethod.set_Name(((Token)yyVals[-2+yyTop]).getLexem());
|
||||||
@ -1921,7 +1921,7 @@ case 154:
|
|||||||
/* #JB# 10.04.2005 */
|
/* #JB# 10.04.2005 */
|
||||||
/* ########################################################### */
|
/* ########################################################### */
|
||||||
met_para.setLineNumber(((Token)yyVals[-3+yyTop]).getLineNumber());
|
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();
|
DeclId Dimet_para = new DeclId();
|
||||||
Dimet_para.set_Name(((Token)yyVals[-3+yyTop]).getLexem());
|
Dimet_para.set_Name(((Token)yyVals[-3+yyTop]).getLexem());
|
||||||
@ -1990,7 +1990,7 @@ case 161:
|
|||||||
{
|
{
|
||||||
FormalParameter FP = new FormalParameter(((DeclId)yyVals[0+yyTop]));
|
FormalParameter FP = new FormalParameter(((DeclId)yyVals[0+yyTop]));
|
||||||
FP.setType(((Type)yyVals[-1+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;
|
yyVal=FP;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2042,7 +2042,7 @@ case 166:
|
|||||||
/* #JB# 10.04.2005 */
|
/* #JB# 10.04.2005 */
|
||||||
/* ########################################################### */
|
/* ########################################################### */
|
||||||
DI.setLineNumber(((Token)yyVals[0+yyTop]).getLineNumber());
|
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());
|
DI.set_Name(((Token)yyVals[0+yyTop]).getLexem());
|
||||||
yyVal=DI;
|
yyVal=DI;
|
||||||
|
@ -16,7 +16,7 @@ public class Token
|
|||||||
private int m_LineNumber;
|
private int m_LineNumber;
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.attribute.m_Offset.24871.declaration
|
// 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
|
// ino.end
|
||||||
|
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ public class Token
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
// ino.method.Token.24883.defdescription type=line
|
// ino.method.Token.24883.defdescription type=line
|
||||||
// hinzugefügt hoth: 14.04.2006
|
// hinzugefügt hoth: 14.04.2006
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.Token.24883.definition
|
// ino.method.Token.24883.definition
|
||||||
Token (int tok, String s, int lineNumber, int charOffset)
|
Token (int tok, String s, int lineNumber, int charOffset)
|
||||||
@ -69,7 +69,7 @@ public class Token
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
// ino.method.Token.24886.defdescription type=line
|
// ino.method.Token.24886.defdescription type=line
|
||||||
// hinzugefügt hoth: 14.04.2006
|
// hinzugefügt hoth: 14.04.2006
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.Token.24886.definition
|
// ino.method.Token.24886.definition
|
||||||
Token (int tok, char c, int lineNumber, int charOffset)
|
Token (int tok, char c, int lineNumber, int charOffset)
|
||||||
|
@ -125,7 +125,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
// ino.attribute.containedTypes.23032.decldescription type=line
|
// ino.attribute.containedTypes.23032.decldescription type=line
|
||||||
// PL 05-07-30 eingefuegt. Vektor aller Typdeklarationen, die in der Klasse
|
// 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.end
|
||||||
// ino.attribute.containedTypes.23032.declaration
|
// ino.attribute.containedTypes.23032.declaration
|
||||||
private Menge<Type> containedTypes = new Menge<Type>();
|
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>();
|
private Menge<UsedId> usedIdsToCheck = new Menge<UsedId>();
|
||||||
// ino.end
|
// 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
|
// ino.attribute.parserlog.23038.declaration
|
||||||
//protected Logger parselog = Logger.getLogger("parser");
|
//protected Logger parselog = Logger.getLogger("parser");
|
||||||
@ -157,14 +157,14 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
superclassid=null;
|
superclassid=null;
|
||||||
}
|
}
|
||||||
this.offset = offset;
|
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();
|
this.superClass = new Class("Object", -1).getType();
|
||||||
}
|
}
|
||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Erstellt eine Klasse, welche nur für die Assumptions verwendet wird.
|
* Erstellt eine Klasse, welche nur für die Assumptions verwendet wird.
|
||||||
* Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody.
|
* Sie enthält keine unnötigen Informationen, wie Offset oder ClassBody.
|
||||||
* @param name
|
* @param name
|
||||||
* @param superClass
|
* @param superClass
|
||||||
* @param modifiers
|
* @param modifiers
|
||||||
@ -285,8 +285,8 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Fügt der Klasse eine Feld hinzu.
|
* Fügt der Klasse eine Feld hinzu.
|
||||||
* Prüft dabei, ob es sich um einen Constructor handelt und wandelt diesen direkt um.
|
* Prüft dabei, ob es sich um einen Constructor handelt und wandelt diesen direkt um.
|
||||||
* @param feld
|
* @param feld
|
||||||
*/
|
*/
|
||||||
public void addField(Field i)
|
public void addField(Field i)
|
||||||
@ -328,7 +328,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
// ino.method.complete_paralist.23062.body
|
// ino.method.complete_paralist.23062.body
|
||||||
{
|
{
|
||||||
|
|
||||||
//Diese Funktion vervollt�ndigt die Parameterliste f�r vererbte Klassen
|
//Diese Funktion vervollt�ndigt die Parameterliste f�r vererbte Klassen
|
||||||
Menge<Type> child = paralist;
|
Menge<Type> child = paralist;
|
||||||
|
|
||||||
paralist = (Menge<Type>)superclassid.get_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.
|
* @param typeinferenceResult - Das ResultSet einer Typinferierung oder null, falls alle Typen eindeutig feststehen.
|
||||||
* @return
|
* @return
|
||||||
* @throws JVMCodeException
|
* @throws JVMCodeException
|
||||||
@ -371,7 +371,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
// pkgName = sf.getPackageName().get_codegen_UsedId() + "/";
|
// 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 = "";
|
String packageName = "";
|
||||||
if(pkgName != null) packageName = pkgName.get_Name_1Element();
|
if(pkgName != null) packageName = pkgName.get_Name_1Element();
|
||||||
classfile.add_class(getName(), superClass, getAccessFlags());
|
classfile.add_class(getName(), superClass, getAccessFlags());
|
||||||
@ -409,36 +409,36 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt.
|
* Setzt den ClassBody dieser Klasse. Wird zum Parsen benötigt.
|
||||||
* Der ClassBody enthält sämtliche Felder dieser Klasse.
|
* Der ClassBody enthält sämtliche Felder dieser Klasse.
|
||||||
* Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen.
|
* Mit dem Aufruf dieser Methode werden alle Felder des ClassBody in diese Class übertragen.
|
||||||
* (Nur einmal während des Parsens aufrufen!)
|
* (Nur einmal während des Parsens aufrufen!)
|
||||||
*/
|
*/
|
||||||
public void set_ClassBody(ClassBody body)
|
public void set_ClassBody(ClassBody body)
|
||||||
{
|
{
|
||||||
Menge<Field> tempFields=body.getFields();
|
Menge<Field> tempFields=body.getFields();
|
||||||
for(Field f : this.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;
|
Method m = (Method)f;
|
||||||
/*
|
/*
|
||||||
* Ermitteln ob es sich bei der Methode um einen Konstruktor handelt:
|
* Ermitteln ob es sich bei der Methode um einen Konstruktor handelt:
|
||||||
* (Parser kann nicht zwischen Methode und Konstruktor unterscheiden.
|
* (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)
|
* -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)
|
* -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()))) {
|
if((m.get_Method_Name().equals(this.getName()))) {
|
||||||
Constructor constructor = new Constructor(m);
|
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{
|
}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);
|
tempFields.add(m);
|
||||||
}
|
}
|
||||||
}else{
|
}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
|
// ino.method.TRProg.23110.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst
|
* Ausgangspunkt f�r den Typrekonstruktionsalgorithmus. Hier werden zun�chst
|
||||||
* die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe
|
* die Mengen von Typannahmen V_fields_methods und V_i erstellt, die als Eingabe
|
||||||
* f�r den Algorithmus dienen.<br/>
|
* f�r den Algorithmus dienen.<br/>
|
||||||
* (siehe Algorithmus 5.17 TRProg, Martin Pl�micke)
|
* (siehe Algorithmus 5.17 TRProg, Martin Pl�micke)
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param supportData
|
* @param supportData
|
||||||
* @param globalAssumptions
|
* @param globalAssumptions
|
||||||
* @return Liste aller bisher berechneten, m�glichen Typkombinationen
|
* @return Liste aller bisher berechneten, m�glichen Typkombinationen
|
||||||
* @throws CTypeReconstructionException
|
* @throws CTypeReconstructionException
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -671,16 +671,16 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//Erzeuge Assumptions:
|
//Erzeuge Assumptions:
|
||||||
TypeAssumptions assumptions = this.getPrivateFieldAssumptions();
|
TypeAssumptions assumptions = this.getPrivateFieldAssumptions();
|
||||||
//Globale Assumptions anfügen:
|
//Globale Assumptions anfügen:
|
||||||
assumptions.add(globalAssumptions);
|
assumptions.add(globalAssumptions);
|
||||||
|
|
||||||
ConstraintsSet oderConstraints = new ConstraintsSet();
|
ConstraintsSet oderConstraints = new ConstraintsSet();
|
||||||
|
|
||||||
for(Type gparam : this.get_ParaList()){
|
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()){
|
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);
|
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);
|
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
|
// Neu Ergebnismenge A aller
|
||||||
// Typannahmen erzeugen:
|
// Typannahmen erzeugen:
|
||||||
@ -717,12 +717,12 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
inferencelog.debug("Erstelle Ergebnismenge...");
|
inferencelog.debug("Erstelle Ergebnismenge...");
|
||||||
Menge<CTypeReconstructionResult> newA = new Menge<CTypeReconstructionResult>();
|
Menge<CTypeReconstructionResult> newA = new Menge<CTypeReconstructionResult>();
|
||||||
|
|
||||||
// Alle bisherigen M�glichkeiten an Typkombinationen durchgehen:
|
// Alle bisherigen M�glichkeiten an Typkombinationen durchgehen:
|
||||||
Menge<CTypeReconstructionResult> oldA = supportData.getA();
|
Menge<CTypeReconstructionResult> oldA = supportData.getA();
|
||||||
for(int i=0; i<oldA.size(); i++){
|
for(int i=0; i<oldA.size(); i++){
|
||||||
CTypeReconstructionResult oneReconResult = oldA.elementAt(i);
|
CTypeReconstructionResult oneReconResult = oldA.elementAt(i);
|
||||||
|
|
||||||
// Und mit den neuen m�glichen Typkombinationen vereinigen:
|
// Und mit den neuen m�glichen Typkombinationen vereinigen:
|
||||||
Iterator<CReconstructionTuple> retTupleIt = retTupleSet.getIterator();
|
Iterator<CReconstructionTuple> retTupleIt = retTupleSet.getIterator();
|
||||||
while(retTupleIt.hasNext()){
|
while(retTupleIt.hasNext()){
|
||||||
CReconstructionTuple possibleTuple = retTupleIt.next();
|
CReconstructionTuple possibleTuple = retTupleIt.next();
|
||||||
@ -745,7 +745,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
}
|
}
|
||||||
newReconResult.addGenericTypeVars(this.getName(), genericsList);
|
newReconResult.addGenericTypeVars(this.getName(), genericsList);
|
||||||
|
|
||||||
//Hinzuf�gen:
|
//Hinzuf�gen:
|
||||||
newA.addElement(newReconResult);
|
newA.addElement(newReconResult);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -761,7 +761,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
|
|
||||||
if(this.methodList != null) return this.methodList;
|
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:
|
// Die Eingabedaten bauen:
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
@ -774,7 +774,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
// Alle Felder durchgehen:
|
// Alle Felder durchgehen:
|
||||||
// Zuerst alle Attribute, dann Methoden
|
// Zuerst alle Attribute, dann Methoden
|
||||||
// ge�ndert: hoth 06.04.2006
|
// ge�ndert: hoth 06.04.2006
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
for(Field field : this.getFields())
|
for(Field field : this.getFields())
|
||||||
@ -813,7 +813,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
methodList.addElement(method);
|
methodList.addElement(method);
|
||||||
|
|
||||||
// F�r V_fields_methods:
|
// F�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...
|
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());
|
method.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID());
|
||||||
|
|
||||||
|
|
||||||
// F�r die V_i:
|
// F�r die V_i:
|
||||||
CTypeAssumptionSet localAssum = new CTypeAssumptionSet();
|
CTypeAssumptionSet localAssum = new CTypeAssumptionSet();
|
||||||
|
|
||||||
// Bauen...
|
// Bauen...
|
||||||
@ -834,7 +834,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
if(parameterList!=null){
|
if(parameterList!=null){
|
||||||
for(int i=0; i<parameterList.sc_get_Formalparalist().size(); i++){
|
for(int i=0; i<parameterList.sc_get_Formalparalist().size(); i++){
|
||||||
FormalParameter para = parameterList.sc_get_Formalparalist().elementAt(i);
|
FormalParameter para = parameterList.sc_get_Formalparalist().elementAt(i);
|
||||||
// F�r V_fields_methods:
|
// F�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>());
|
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
|
//fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006
|
||||||
Class.isFirstLocalVarDecl=false;
|
Class.isFirstLocalVarDecl=false;
|
||||||
@ -847,13 +847,13 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// F�r die V_i:
|
// F�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>());
|
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);
|
localAssum.addElement(varAssum);
|
||||||
rememberLocals.addElement(varAssum);
|
rememberLocals.addElement(varAssum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ...und hinzuf�gen:
|
// ...und hinzuf�gen:
|
||||||
|
|
||||||
V.addElement(localAssum);
|
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.
|
* 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.
|
* Bemerkung: Momentan werden noch alle Felder dieser Klasse zurückgegeben.
|
||||||
* @return Die erstellten TypeAssumptions
|
* @return Die erstellten TypeAssumptions
|
||||||
*/
|
*/
|
||||||
private TypeAssumptions getPrivateFieldAssumptions() {
|
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());
|
TypeAssumptions assumptions = new TypeAssumptions(this.getName());
|
||||||
//this.getMethodList(); //Diese Funktion muss zuerst ausgeführt werden.
|
//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.
|
//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);
|
//CLocalVarTypeAssumption thisAssumption = new CLocalVarTypeAssumption(this.name, name, 0, 0, name, "this", new RefType(name,0), 0, 0, null);
|
||||||
//assumptions.setThisV(thisAssumption);
|
//assumptions.setThisV(thisAssumption);
|
||||||
|
|
||||||
@ -882,20 +882,20 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
if(!field.isPublic())assumptions.add(field.createTypeAssumptions(this));
|
if(!field.isPublic())assumptions.add(field.createTypeAssumptions(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Eine Assumption für den Standardkonstruktor:
|
//Eine Assumption für den Standardkonstruktor:
|
||||||
// (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt)
|
// (Ein Standardkonstruktor wird immer angefügt, da es momentan keine statischen Klassen gibt)
|
||||||
//auskommentiert, da der Standardkonstruktor beim Parser-Postprocessing angefügt wird.
|
//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:
|
//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>());
|
// 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;
|
return assumptions;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
public ConstraintsSet TYPE(Menge<Method> methodList, Menge<Expr> fielddeclarationList, TypeAssumptions assumptions){
|
public ConstraintsSet TYPE(Menge<Method> methodList, Menge<Expr> fielddeclarationList, TypeAssumptions assumptions){
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
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);
|
//TypeAssumptions assumptionsPlusFieldAssumptions = new TypeAssumptions(assumptions);
|
||||||
for(Expr expr : fielddeclarationList){
|
for(Expr expr : fielddeclarationList){
|
||||||
//ret.add(expr.TYPEStmt(assumptionsPlusFieldAssumptions));
|
//ret.add(expr.TYPEStmt(assumptionsPlusFieldAssumptions));
|
||||||
@ -912,9 +912,9 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
// ino.method.RetType.23119.defdescription type=javadoc
|
// ino.method.RetType.23119.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Liefert den berechneten R�ckgabetyp f�r die �bergebene Methode zur�ck.<br/>
|
* Liefert den berechneten R�ckgabetyp f�r die �bergebene Methode zur�ck.<br/>
|
||||||
* (siehe Algorithmus RetType, Martin Pl�micke)
|
* (siehe Algorithmus RetType, Martin Pl�micke)
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param me
|
* @param me
|
||||||
* @param V
|
* @param V
|
||||||
* @return
|
* @return
|
||||||
@ -936,7 +936,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
*/
|
*/
|
||||||
// ino.method.toString.23125.defdescription type=javadoc
|
// ino.method.toString.23125.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -954,7 +954,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
// ino.method.wandleRefTypeAttributes2GenericAttributes.23128.defdescription type=javadoc
|
// 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
|
* RefType deklarierte Attribute haben, die aber GenericTypeVars sind
|
||||||
* und ggf. ersetzen
|
* 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.
|
* Dem ResultSet entsprechend werden in diesem Java-Code die TypePlaceholder durch die in ResultSet stehenden Typen ersetzt.
|
||||||
* @return Java-Sourcefile
|
* @return Java-Sourcefile
|
||||||
*/
|
*/
|
||||||
@ -1073,7 +1073,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
classBodyCode.attach(bodyString);
|
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());
|
//this.createGenericTypeVars(classBodyCode.getUnresolvedTPH());
|
||||||
|
|
||||||
if(this.genericClassParameters != null && this.genericClassParameters.size()>0){
|
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.
|
* 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.
|
* Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben.
|
||||||
* @param tphs : Alle übriggebliebenen TypePLaceholder
|
* @param tphs : Alle übriggebliebenen TypePLaceholder
|
||||||
|
|
||||||
private void createGenericTypeVars(Menge<TypePlaceholder> tphs){
|
private void createGenericTypeVars(Menge<TypePlaceholder> tphs){
|
||||||
this.genericClassParameters = new GenericDeclarationList(new Menge<GenericTypeVar>());
|
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.
|
* 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.
|
* Die berechneten Variablen werden anschließend in die this.genericTypeVars eingesetzt. Dabei werden alte genericTypeVars überschrieben.
|
||||||
* @param reconstructionResult
|
* @param reconstructionResult
|
||||||
|
|
||||||
public void createGenericTypeVars(TypeinferenceResultSet reconstructionResult){
|
public void createGenericTypeVars(TypeinferenceResultSet reconstructionResult){
|
||||||
@ -1193,7 +1193,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
}
|
}
|
||||||
this.fielddecl = tempFields;
|
this.fielddecl = tempFields;
|
||||||
|
|
||||||
//Prüfen ob ein Konstruktor vorhanden ist:
|
//Prüfen ob ein Konstruktor vorhanden ist:
|
||||||
boolean constructorVorhanden = false;
|
boolean constructorVorhanden = false;
|
||||||
for(Field f : this.getFields()){
|
for(Field f : this.getFields()){
|
||||||
if(f instanceof Constructor){
|
if(f instanceof Constructor){
|
||||||
@ -1201,7 +1201,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
break;
|
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));
|
Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName().toString(), this));
|
||||||
this.addField(standardKonstruktor);
|
this.addField(standardKonstruktor);
|
||||||
}
|
}
|
||||||
@ -1289,7 +1289,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getGenericVarDeclarationOffset(){
|
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){
|
if(this.genericClassParameters != null){
|
||||||
return this.genericClassParameters.getEndOffset();
|
return this.genericClassParameters.getEndOffset();
|
||||||
}else{
|
}else{
|
||||||
@ -1299,7 +1299,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Die Super Klasse dieser Klasse.
|
* Die Super Klasse dieser Klasse.
|
||||||
* @return null für Klasse Object
|
* @return null für Klasse Object
|
||||||
*/
|
*/
|
||||||
public Type getSuperClass(){
|
public Type getSuperClass(){
|
||||||
return this.superClass;
|
return this.superClass;
|
||||||
|
@ -103,7 +103,7 @@ Paratyp gesetzt."); }
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Fügt der Klasse eine Feld hinzu.
|
* Fügt der Klasse eine Feld hinzu.
|
||||||
* @param feld
|
* @param feld
|
||||||
*/
|
*/
|
||||||
public void addField(Field i)
|
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() )
|
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 );
|
System.exit( 1 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -332,7 +332,7 @@ public void istParameterOK( Menge Parameter, Menge<Class> KlassenVektor )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Tylose Variablen d�rfen nicht deklariert sein
|
// Tylose Variablen d�rfen nicht deklariert sein
|
||||||
for( int k = 0; k < KlassenVektor.size(); k++)
|
for( int k = 0; k < KlassenVektor.size(); k++)
|
||||||
{
|
{
|
||||||
if( KlassenVektor.elementAt(k).getName().equals(TempParameter.getName()) )
|
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
|
// ino.method.toString.23203.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -18,8 +18,8 @@ public class ClassHelper
|
|||||||
/**
|
/**
|
||||||
* HOTI
|
* HOTI
|
||||||
* Diese Methode sucht in der Klassendefinition nach einen GTV, die
|
* Diese Methode sucht in der Klassendefinition nach einen GTV, die
|
||||||
* so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden
|
* 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
|
* 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
|
* angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert
|
||||||
* die Methode <b>null</b>.
|
* die Methode <b>null</b>.
|
||||||
* @param type
|
* @param type
|
||||||
|
@ -79,7 +79,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta
|
|||||||
|
|
||||||
public Menge<DeclId> getDeclIdMenge()
|
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;
|
return declid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta
|
|||||||
public abstract JavaCodeResult printJavaCode(ResultSet resultSet);
|
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
|
* @param classmember
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -150,7 +150,7 @@ public abstract class Field extends GTVDeclarationContext implements TypeInserta
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getGenericVarDeclarationOffset(){
|
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){
|
if(this.genericParameters != null){
|
||||||
return this.genericParameters.getEndOffset();
|
return this.genericParameters.getEndOffset();
|
||||||
}else{
|
}else{
|
||||||
|
@ -21,7 +21,7 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
|||||||
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
|
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;'
|
* Beispiel: 'public Feld FeldVar = FeldWert;'
|
||||||
* @author janulrich
|
* @author janulrich
|
||||||
*
|
*
|
||||||
@ -33,8 +33,8 @@ public class FieldDeclaration extends Field{
|
|||||||
//private Menge<GenericTypeVar> parameter;
|
//private Menge<GenericTypeVar> parameter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig.
|
* Dieser Konstruktor der FieldDeclaration erstellt den Syntaxknoten vollständig.
|
||||||
* Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig.
|
* Kein nachträgliches hinzfügen von Informationen oder aufrufen von parserPostProcessing ist notwendig.
|
||||||
*/
|
*/
|
||||||
public FieldDeclaration(String name, Type typ){
|
public FieldDeclaration(String name, Type typ){
|
||||||
super(0);//Dieser Deklarator wird nicht vom Parser aufgerufen. Dadurch gibt es auch keinen Offset
|
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();
|
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.
|
* 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);
|
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
|
@Override
|
||||||
public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) {
|
public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) {
|
||||||
if(this.wert == null && (this.getType() == null || this.getType() instanceof TypePlaceholder))
|
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();
|
ConstraintsSet ret = new ConstraintsSet();
|
||||||
TypeAssumptions localAssumptions = publicAssumptions.clone();
|
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
|
ret.add(c1); //Damit die TypVariable des Felds in den Constraints auftaucht
|
||||||
|
|
||||||
if(this.wert!=null){
|
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(this.wert.TYPEExpr(localAssumptions));
|
||||||
ret.add(new SingleConstraint(this.wert.getType().TYPE(localAssumptions,this), thisType));
|
ret.add(new SingleConstraint(this.wert.getType().TYPE(localAssumptions,this), thisType));
|
||||||
}
|
}
|
||||||
@ -161,7 +161,7 @@ public class FieldDeclaration extends Field{
|
|||||||
@Override
|
@Override
|
||||||
public void wandleRefTypeAttributes2GenericAttributes(Menge<Type> paralist){
|
public void wandleRefTypeAttributes2GenericAttributes(Menge<Type> paralist){
|
||||||
super.wandleRefTypeAttributes2GenericAttributes(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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object object) {
|
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;
|
if(!(object instanceof FormalParameter))return false;
|
||||||
FormalParameter equals = (FormalParameter)object;
|
FormalParameter equals = (FormalParameter)object;
|
||||||
if((this.type==null)!=(equals.type == null))return false;
|
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
|
// ino.method.setType.23404.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param t
|
* @param t
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -142,7 +142,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns
|
|||||||
|
|
||||||
// ino.method.getLineNumber.23425.defdescription type=javadoc
|
// ino.method.getLineNumber.23425.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -158,7 +158,7 @@ public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeIns
|
|||||||
|
|
||||||
// ino.method.getTypeLineNumber.23431.defdescription type=javadoc
|
// ino.method.getTypeLineNumber.23431.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -6,7 +6,7 @@ import de.dhbwstuttgart.typeinference.Menge;
|
|||||||
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
|
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
|
* @author janulrich
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -14,7 +14,7 @@ import de.dhbwstuttgart.syntaxtree.misc.UsedId;
|
|||||||
* HOTI 4.5.06
|
* HOTI 4.5.06
|
||||||
* Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-)
|
* Auch wenn es nicht so aussieht, hat diese Klasse einen Sinn :-)
|
||||||
* Der Parser kann keine Generischen Typen darstellen, damit trotzdem
|
* 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.end
|
||||||
// ino.class.ImportDeclarations.23434.declaration
|
// ino.class.ImportDeclarations.23434.declaration
|
||||||
|
@ -86,7 +86,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
// ino.attribute.m_LineNumber.23512.declaration
|
// ino.attribute.m_LineNumber.23512.declaration
|
||||||
private int m_LineNumber = MyCompiler.NO_LINENUMBER;
|
private int m_LineNumber = MyCompiler.NO_LINENUMBER;
|
||||||
// ino.end
|
// 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
|
// ino.attribute.inferencelog.23515.declaration
|
||||||
protected static Logger inferencelog = Logger.getLogger("inference");
|
protected static Logger inferencelog = Logger.getLogger("inference");
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -389,7 +389,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
// ino.method.getOffset.23590.defdescription type=line
|
// ino.method.getOffset.23590.defdescription type=line
|
||||||
// hinzugef�gt hoth: 07.04.2006
|
// hinzugef�gt hoth: 07.04.2006
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.getOffset.23590.definition
|
// ino.method.getOffset.23590.definition
|
||||||
public int getOffset()
|
public int getOffset()
|
||||||
@ -410,7 +410,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
// ino.method.setOffset.23596.defdescription type=line
|
// ino.method.setOffset.23596.defdescription type=line
|
||||||
// hinzugef�gt hoth: 07.04.2006
|
// hinzugef�gt hoth: 07.04.2006
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.setOffset.23596.definition
|
// ino.method.setOffset.23596.definition
|
||||||
public void setOffset(int Offset)
|
public void setOffset(int Offset)
|
||||||
@ -439,7 +439,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
|
|
||||||
// ino.method.toString.23605.defdescription type=javadoc
|
// ino.method.toString.23605.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -529,8 +529,8 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
public ConstraintsSet TYPE(TypeAssumptions ass) {
|
public ConstraintsSet TYPE(TypeAssumptions ass) {
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
ConstraintsSet ret = new ConstraintsSet();
|
||||||
TypeAssumptions localAss = new TypeAssumptions();
|
TypeAssumptions localAss = new TypeAssumptions();
|
||||||
localAss.add(ass); //Die globalen Assumptions anhängen
|
localAss.add(ass); //Die globalen Assumptions anhängen
|
||||||
//Generische Parameterdeklarationen den Assumptions anfügen:
|
//Generische Parameterdeklarationen den Assumptions anfügen:
|
||||||
for(GenericTypeVar gtv : this.getGenericParameter()){
|
for(GenericTypeVar gtv : this.getGenericParameter()){
|
||||||
localAss.add(gtv.createAssumptions());
|
localAss.add(gtv.createAssumptions());
|
||||||
}
|
}
|
||||||
@ -549,7 +549,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
this.returntype = replaceType;
|
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){
|
if(this.parameterlist!=null)for(FormalParameter param : this.parameterlist){
|
||||||
|
|
||||||
param.setType(param.getType().checkTYPE(localAss, this));
|
param.setType(param.getType().checkTYPE(localAss, this));
|
||||||
@ -567,7 +567,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
localAss.addAssumption(new ParameterAssumption(param));
|
localAss.addAssumption(new ParameterAssumption(param));
|
||||||
}
|
}
|
||||||
ret.add(this.block.TYPEStmt(localAss));
|
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)));
|
ret.add(new SingleConstraint(this.block.getType().TYPE(localAss, this), this.returntype.TYPE(localAss, this)));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -629,7 +629,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
|
|
||||||
//methodList.addElement(method);
|
//methodList.addElement(method);
|
||||||
|
|
||||||
//F�r V_fields_methods:
|
//F�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...
|
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());
|
this.setOverloadedID(methodAssum.getHashSetKey().getOverloadedMethodID());
|
||||||
|
|
||||||
|
|
||||||
//F�r die V_i:
|
//F�r die V_i:
|
||||||
CTypeAssumptionSet localAssum = new CTypeAssumptionSet();
|
CTypeAssumptionSet localAssum = new CTypeAssumptionSet();
|
||||||
|
|
||||||
//Bauen...
|
//Bauen...
|
||||||
@ -650,7 +650,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
if(parameterList!=null){
|
if(parameterList!=null){
|
||||||
for(int i=0; i<parameterList.sc_get_Formalparalist().size(); i++){
|
for(int i=0; i<parameterList.sc_get_Formalparalist().size(); i++){
|
||||||
FormalParameter para = parameterList.sc_get_Formalparalist().elementAt(i);
|
FormalParameter para = parameterList.sc_get_Formalparalist().elementAt(i);
|
||||||
// F�r V_fields_methods:
|
// F�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>());
|
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
|
//fuege Offsets fuer Parameter hinzu, hoth: 06.04.2006
|
||||||
Class.isFirstLocalVarDecl=false;
|
Class.isFirstLocalVarDecl=false;
|
||||||
@ -660,15 +660,15 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
|
|
||||||
methodAssum.addParaAssumption(paraAssum);
|
methodAssum.addParaAssumption(paraAssum);
|
||||||
|
|
||||||
// F�r die V_i:
|
// F�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>());
|
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);
|
localAssum.addElement(varAssum);
|
||||||
//rememberLocals.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:
|
//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
|
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
|
@Override
|
||||||
public void parserPostProcessing(SyntaxTreeNode parent){
|
public void parserPostProcessing(SyntaxTreeNode parent){
|
||||||
if(this.getType()==null)this.setType(TypePlaceholder.fresh(this));
|
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;
|
//Class parentClass = (Class)parent;
|
||||||
if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this);
|
if(this.returntype == null)this.returntype = TypePlaceholder.fresh(this);
|
||||||
super.parserPostProcessing(parent);
|
super.parserPostProcessing(parent);
|
||||||
@ -714,7 +714,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
// Methode und Block teilen sich einen ReturnType:
|
// Methode und Block teilen sich einen ReturnType:
|
||||||
//this.block.setType(t);
|
//this.block.setType(t);
|
||||||
this.returntype = 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)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,7 +105,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterable<FormalPara
|
|||||||
|
|
||||||
// ino.method.getParameterCount.23641.defdescription type=javadoc
|
// ino.method.getParameterCount.23641.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @return Die Anzahl der Parameter
|
* @return Die Anzahl der Parameter
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -132,7 +132,7 @@ public class ParameterList extends SyntaxTreeNode implements Iterable<FormalPara
|
|||||||
|
|
||||||
public String toString(){
|
public String toString(){
|
||||||
if(formalparameter == null)return "[]"; //"Leere Parameterliste";
|
if(formalparameter == null)return "[]"; //"Leere Parameterliste";
|
||||||
//String ret = "ParameterListe, "+formalparameter.size()+" Einträge [ ";
|
//String ret = "ParameterListe, "+formalparameter.size()+" Einträge [ ";
|
||||||
String ret = " [ ";
|
String ret = " [ ";
|
||||||
for(FormalParameter param : this.formalparameter){
|
for(FormalParameter param : this.formalparameter){
|
||||||
ret += param.toString()+", ";
|
ret += param.toString()+", ";
|
||||||
|
@ -74,9 +74,9 @@ public class SourceFile
|
|||||||
/**
|
/**
|
||||||
* @autor HOTI
|
* @autor HOTI
|
||||||
* Wenn dieses Flag auf <b>true</b> gesetzt ist, wird immer als Superklasse Object
|
* 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
|
* 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
|
* 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
|
* Checkbox o.ä. ausblendbar macht kann es aktiviert werden. Ebenso beeinflusst es
|
||||||
* die superclass von allen Class-Objekten. (Wenn true ist jede Class automatisch
|
* die superclass von allen Class-Objekten. (Wenn true ist jede Class automatisch
|
||||||
* wenn nicht anders eingegeben Subclass von Object (Wie es sein muss))
|
* 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
|
// 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.
|
* durch die Hashtable baseTypeTranslationTable) KEINE Superklassen geladen. D.h.
|
||||||
* Integer hat bspw. nicht die Superklasse Number sondern OBJECT.
|
* Integer hat bspw. nicht die Superklasse Number sondern OBJECT.
|
||||||
* Dies verursacht bei den Int-Operationen ein Problem
|
* Dies verursacht bei den Int-Operationen ein Problem
|
||||||
@ -100,7 +100,7 @@ public class SourceFile
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @autor PL
|
* @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.
|
* KEINE Superklassen geladen.
|
||||||
*/
|
*/
|
||||||
private static final boolean READ_IMPORTED_SUPERCLASSES_FROM_JRE = false;
|
private static final boolean READ_IMPORTED_SUPERCLASSES_FROM_JRE = false;
|
||||||
@ -128,7 +128,7 @@ public class SourceFile
|
|||||||
// ino.end
|
// 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.
|
* SourceFile stellt dabei den Wurzelknoten des Syntaxbaumes dar.
|
||||||
*/
|
*/
|
||||||
public SourceFile(){
|
public SourceFile(){
|
||||||
@ -178,12 +178,12 @@ public class SourceFile
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.attribute.baseTypeTranslationTable.21385.decldescription type=javadoc
|
// ino.attribute.baseTypeTranslationTable.21385.decldescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Table zum Übersetzen der nicht implementierten Base-Types:
|
* Table zum Übersetzen der nicht implementierten Base-Types:
|
||||||
* Überall im Compiler wird statt bspw. int Integer verwendet
|
* Überall im Compiler wird statt bspw. int Integer verwendet
|
||||||
* d.h. 1+2 liefert ein Integer
|
* 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-
|
* der JRE gelieferten Base-Typen (int,char, etc) und die Objekt-
|
||||||
* Typen umwandeln können
|
* Typen umwandeln können
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.attribute.baseTypeTranslationTable.21385.declaration
|
// ino.attribute.baseTypeTranslationTable.21385.declaration
|
||||||
@ -295,7 +295,7 @@ public class SourceFile
|
|||||||
// ino.method.makeFC.21403.defdescription type=javadoc
|
// ino.method.makeFC.21403.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Erstellt die Finite Closure
|
* 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.end
|
||||||
// ino.method.makeFC.21403.definition
|
// ino.method.makeFC.21403.definition
|
||||||
@ -311,7 +311,7 @@ public class SourceFile
|
|||||||
globalAssumptions.add(this.getPublicFieldAssumptions());
|
globalAssumptions.add(this.getPublicFieldAssumptions());
|
||||||
// 1. Menge <= in FC aufnehmen --> Iteration ueber alle Klassen
|
// 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("Long",null,-1).TYPE(globalAssumptions, parent).getType());
|
||||||
ignoreTypes.add(new RefType("Float",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());
|
ignoreTypes.add(new RefType("Double",null,-1).TYPE(globalAssumptions, parent).getType());
|
||||||
@ -327,10 +327,10 @@ public class SourceFile
|
|||||||
//System.out.println("FCPair: "+p);
|
//System.out.println("FCPair: "+p);
|
||||||
if(! t1.equals(t2)){//Um FC_TTO darf kein T <. T stehen.
|
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
|
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);
|
vFC.add(p);
|
||||||
}
|
}
|
||||||
basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen
|
basicAssumptionsClassMenge.add(cAss.getAssumedClass());//Klasse ohne die Superklasse anfügen
|
||||||
}else{
|
}else{
|
||||||
//System.out.println("Wurde nicht aufgenommen");
|
//System.out.println("Wurde nicht aufgenommen");
|
||||||
}
|
}
|
||||||
@ -403,7 +403,7 @@ public class SourceFile
|
|||||||
// konkret: rechte Seite von FC nach Typkonstruktoren in der Parameterliste durchsuchen
|
// konkret: rechte Seite von FC nach Typkonstruktoren in der Parameterliste durchsuchen
|
||||||
for( int n = 0; n < vFC.size(); n++ )
|
for( int n = 0; n < vFC.size(); n++ )
|
||||||
{
|
{
|
||||||
// Elemente in FC k�nnen nur Pair's sein --> Cast ohne Abfrage
|
// Elemente in FC k�nnen nur Pair's sein --> Cast ohne Abfrage
|
||||||
Pair PTypKonst = vFC.elementAt(n);
|
Pair PTypKonst = vFC.elementAt(n);
|
||||||
|
|
||||||
// Parameter des rechten Typausdrucks des betrachteten Paars extrahieren
|
// 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 links: " + ((RefType)(PSuchen.TA1)).getName(), Section.FINITECLOSURE );
|
||||||
inferencelog.debug(" gefundener Typ rechts: " + ((RefType)(PSuchen.TA2)).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
|
// Substitution
|
||||||
//Pair P = new Pair( PSuchen.getTA1Copy( ), PSuchen.getTA2Copy( ) );
|
//Pair P = new Pair( PSuchen.getTA1Copy( ), PSuchen.getTA2Copy( ) );
|
||||||
//linker Typterm bleibt gleich
|
//linker Typterm bleibt gleich
|
||||||
@ -498,7 +498,7 @@ public class SourceFile
|
|||||||
// new RefType( (RefType)vPara.elementAt(u) ),
|
// new RefType( (RefType)vPara.elementAt(u) ),
|
||||||
// false ); // rechte Seite substituieren
|
// false ); // rechte Seite substituieren
|
||||||
//Es genuegt die rechte Seite zu substituieren, da
|
//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
|
//Typvariablen ist
|
||||||
}
|
}
|
||||||
//Unify.SubstHashtableGeneric(((RefType)P.TA1), hts); //funktioniert nicht
|
//Unify.SubstHashtableGeneric(((RefType)P.TA1), hts); //funktioniert nicht
|
||||||
@ -597,7 +597,7 @@ public class SourceFile
|
|||||||
}
|
}
|
||||||
} // end for: linke Seite suchen
|
} // end for: linke Seite suchen
|
||||||
} // end if: Element ist RefType
|
} // end if: Element ist RefType
|
||||||
} // end for: Transitivit�ten berechnen
|
} // end for: Transitivit�ten berechnen
|
||||||
//PL HIER REFLEXIVE HUELLE EINFUEGEN
|
//PL HIER REFLEXIVE HUELLE EINFUEGEN
|
||||||
// 05-01-07
|
// 05-01-07
|
||||||
|
|
||||||
@ -658,13 +658,13 @@ public class SourceFile
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// ino.method.typeReconstruction.21406.defdescription type=javadoc
|
// ino.method.typeReconstruction.21406.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf.
|
* Tyrekonstruktionsalgorithmus: ruft f�r jede Klasse den Algorithmus TRProg auf.
|
||||||
* Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als
|
* Dessen Ergebnismenge A, die Menge aller Typannahmen, f�r eine Klasse dient als
|
||||||
* Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen
|
* Eingabe f�r TRProg der n�chsten Klasse. Am Ende enth�lt A alle m�glichen
|
||||||
* Typkombinationen f�r alle Klassen zusammen.
|
* Typkombinationen f�r alle Klassen zusammen.
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return Liste aller m�glichen Typkombinationen
|
* @return Liste aller m�glichen Typkombinationen
|
||||||
* @throws CTypeReconstructionException Wenn was schief l�uft
|
* @throws CTypeReconstructionException Wenn was schief l�uft
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.typeReconstruction.21406.definition
|
// ino.method.typeReconstruction.21406.definition
|
||||||
@ -678,7 +678,7 @@ public class SourceFile
|
|||||||
//Logger initialisieren:
|
//Logger initialisieren:
|
||||||
Logger typinferenzLog = Logger.getLogger("Typeinference");
|
Logger typinferenzLog = Logger.getLogger("Typeinference");
|
||||||
|
|
||||||
//Alle Assumptions für diese SourceFile sammeln:
|
//Alle Assumptions für diese SourceFile sammeln:
|
||||||
for(Class klasse : this.KlassenVektor){
|
for(Class klasse : this.KlassenVektor){
|
||||||
globalAssumptions.add(klasse.getPublicFieldAssumptions());
|
globalAssumptions.add(klasse.getPublicFieldAssumptions());
|
||||||
}
|
}
|
||||||
@ -703,14 +703,14 @@ public class SourceFile
|
|||||||
//Karthesisches Produkt bilden:
|
//Karthesisches Produkt bilden:
|
||||||
////////////////
|
////////////////
|
||||||
|
|
||||||
//Unmögliche ConstraintsSets aussortieren durch Unifizierung
|
//Unmögliche ConstraintsSets aussortieren durch Unifizierung
|
||||||
Unifier unifier = (pairs)->{
|
Unifier unifier = (pairs)->{
|
||||||
Menge<Menge<Pair>> retValue = new Menge<>();
|
Menge<Menge<Pair>> retValue = new Menge<>();
|
||||||
retValue = Unify.unify(pairs, finiteClosure);
|
retValue = Unify.unify(pairs, finiteClosure);
|
||||||
return retValue;};
|
return retValue;};
|
||||||
//oderConstraints.filterWrongConstraints(unifier);
|
//oderConstraints.filterWrongConstraints(unifier);
|
||||||
oderConstraints.unifyUndConstraints(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):
|
//Die Constraints in Pair's umwandeln (Karthesisches Produkt bilden):
|
||||||
Menge<Menge<Pair>> xConstraints = oderConstraints.cartesianProduct();
|
Menge<Menge<Pair>> xConstraints = oderConstraints.cartesianProduct();
|
||||||
/*
|
/*
|
||||||
@ -731,10 +731,10 @@ public class SourceFile
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
boolean unifyFail = true;
|
boolean unifyFail = true;
|
||||||
for(Menge<Pair> constraints : xConstraints){
|
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>>();
|
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){
|
for(Pair p : constraints){
|
||||||
if(p.TA1 instanceof FunN){
|
if(p.TA1 instanceof FunN){
|
||||||
p.TA1 = p.TA1.clone();
|
p.TA1 = p.TA1.clone();
|
||||||
@ -802,7 +802,7 @@ public class SourceFile
|
|||||||
).collect(Menge::new, Menge::add, Menge::addAll);
|
).collect(Menge::new, Menge::add, Menge::addAll);
|
||||||
|
|
||||||
//Schritt 2: Schnittmengen jedes Elements mit jedem Elememt von vars bilden und dann index zusammenfassen
|
//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<>();
|
Menge<Menge<Integer>> indexeset = new Menge<>();
|
||||||
if (constraintsclonevars != null && constraintsclonevars.size()>0) {
|
if (constraintsclonevars != null && constraintsclonevars.size()>0) {
|
||||||
indexeset = Unify.schnitt(constraintsclonevars);
|
indexeset = Unify.schnitt(constraintsclonevars);
|
||||||
@ -880,7 +880,7 @@ public class SourceFile
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Menge<Menge<Pair>> unifyResult = Unify.unify(constraintsClone, finiteClosure);
|
//Menge<Menge<Pair>> unifyResult = Unify.unify(constraintsClone, finiteClosure);
|
||||||
//Dann den Ergebnissen anfügen
|
//Dann den Ergebnissen anfügen
|
||||||
result.addAll(unifyResult);
|
result.addAll(unifyResult);
|
||||||
|
|
||||||
// Debugoutput:Menge<Menge<Pair>>
|
// Debugoutput:Menge<Menge<Pair>>
|
||||||
@ -888,10 +888,10 @@ public class SourceFile
|
|||||||
//typinferenzLog.debug("Unifiziertes Ergebnis: "+result, Section.TYPEINFERENCE);
|
//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))){
|
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){
|
}else if(result.size()>1){
|
||||||
|
|
||||||
@ -912,9 +912,9 @@ public class SourceFile
|
|||||||
//typinferenzLog.debug(this.printJavaCode(new ResultSet(new Menge<Pair>())));
|
//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){
|
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){
|
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)
|
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:
|
//Add Result set as a new ReconstructionResult to ret:
|
||||||
@ -922,7 +922,7 @@ public class SourceFile
|
|||||||
ret.add(reconstructionResult);
|
ret.add(reconstructionResult);
|
||||||
|
|
||||||
//ResultSet res = new ResultSet(resultSet);
|
//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);
|
typinferenzLog.debug(klasse.printJavaCode(reconstructionResult), Section.TYPEINFERENCE);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -934,8 +934,8 @@ public class SourceFile
|
|||||||
return ret;
|
return ret;
|
||||||
/*
|
/*
|
||||||
// HOTI: Nur zur Info.Ich habe den Loglevel auf Info geschaltet, damit
|
// HOTI: Nur zur Info.Ich habe den Loglevel auf Info geschaltet, damit
|
||||||
// in der GUI (Eclipse-Plugin) die Console nicht zugemüllt wird.
|
// in der GUI (Eclipse-Plugin) die Console nicht zugemüllt wird.
|
||||||
// Wers braucht kanns natürlich ausschalten
|
// Wers braucht kanns natürlich ausschalten
|
||||||
|
|
||||||
// inferencelog.setLevel(Level.INFO);
|
// inferencelog.setLevel(Level.INFO);
|
||||||
|
|
||||||
@ -966,7 +966,7 @@ public class SourceFile
|
|||||||
this.KlassenVektor);
|
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
|
// RefType deklarierte Attribute haben, die aber GenericTypeVars sind
|
||||||
// Bsp.:
|
// Bsp.:
|
||||||
// bei public E elementAt(i){...} wird E vorerst als RefType erkannt
|
// 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("Rufe \"SourceFile.makeFC()\"...");
|
||||||
inferencelog.info("������������������������������������");
|
inferencelog.info("������������������������������������");
|
||||||
FC_TTO finiteClosure = this.makeFC();
|
FC_TTO finiteClosure = this.makeFC();
|
||||||
inferencelog.info("������������������������������������");
|
inferencelog.info("������������������������������������");
|
||||||
inferencelog.info("Bin aus \"SourceFile.makeFC()\" zur�ck.");
|
inferencelog.info("Bin aus \"SourceFile.makeFC()\" zur�ck.");
|
||||||
this.removeBasicAssumptions();
|
this.removeBasicAssumptions();
|
||||||
|
|
||||||
// PL 05-08-02
|
// PL 05-08-02
|
||||||
@ -1031,19 +1031,19 @@ public class SourceFile
|
|||||||
Interface intf = intf_it.next();
|
Interface intf = intf_it.next();
|
||||||
|
|
||||||
// HOTI In diesem Moment gibt es nur _eine_ potentielle CTypeReconstructionResult, d.h.
|
// HOTI In diesem Moment gibt es nur _eine_ potentielle CTypeReconstructionResult, d.h.
|
||||||
// dort können die Definitionen der Interfaces (Methodintersectiontypes, FieldDecls) abgelegt werden
|
// dort können die Definitionen der Interfaces (Methodintersectiontypes, FieldDecls) abgelegt werden
|
||||||
|
|
||||||
|
|
||||||
//intf.addThisToAssumptions(basics);
|
//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();
|
TypeAssumptions publicFieldsAssumptions = new TypeAssumptions();
|
||||||
for(Class cl : KlassenVektor){
|
for(Class cl : KlassenVektor){
|
||||||
publicFieldsAssumptions.add(cl.getPublicFieldAssumptions());
|
publicFieldsAssumptions.add(cl.getPublicFieldAssumptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Die BasicAssumptions anfügen:
|
// Die BasicAssumptions anfügen:
|
||||||
publicFieldsAssumptions.add(this.getBasicAssumptions());
|
publicFieldsAssumptions.add(this.getBasicAssumptions());
|
||||||
|
|
||||||
// Fuer jede Klasse separat den TRA aufrufen
|
// Fuer jede Klasse separat den TRA aufrufen
|
||||||
@ -1064,7 +1064,7 @@ public class SourceFile
|
|||||||
* Erstellt die Basic Assumptions (siehe MakeBasicAssumptions) als AssumptionSet
|
* Erstellt die Basic Assumptions (siehe MakeBasicAssumptions) als AssumptionSet
|
||||||
* @return
|
* @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() {
|
private TypeAssumptions getBasicAssumptions() {
|
||||||
TypeAssumptions ret = new TypeAssumptions(null);
|
TypeAssumptions ret = new TypeAssumptions(null);
|
||||||
|
|
||||||
@ -1077,7 +1077,7 @@ public class SourceFile
|
|||||||
mod.addModifier(new Public());
|
mod.addModifier(new Public());
|
||||||
|
|
||||||
|
|
||||||
// Für jede einzelne Klasse
|
// Für jede einzelne Klasse
|
||||||
while (imports.size()>0) {
|
while (imports.size()>0) {
|
||||||
UsedId importDecl = imports.get(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 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
|
* @return
|
||||||
*/
|
*/
|
||||||
private TypeAssumptions makeBasicAssumptionsFromJRE(Menge<UsedId> imports, boolean withSubtypes)
|
private TypeAssumptions makeBasicAssumptionsFromJRE(Menge<UsedId> imports, boolean withSubtypes)
|
||||||
@ -1228,10 +1228,10 @@ public class SourceFile
|
|||||||
Modifiers mod = new Modifiers();
|
Modifiers mod = new Modifiers();
|
||||||
mod.addModifier(new Public());
|
mod.addModifier(new Public());
|
||||||
|
|
||||||
//Für Object:
|
//Für Object:
|
||||||
imports.add(new UsedId("java.lang.Object",-1));
|
imports.add(new UsedId("java.lang.Object",-1));
|
||||||
|
|
||||||
// Für jede einzelne Klasse
|
// Für jede einzelne Klasse
|
||||||
while (imports.size()>0) {
|
while (imports.size()>0) {
|
||||||
UsedId importDecl = imports.get(0);
|
UsedId importDecl = imports.get(0);
|
||||||
|
|
||||||
@ -1394,7 +1394,7 @@ public class SourceFile
|
|||||||
return new Class("java.lang.Object",new Modifiers(), 0);
|
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();
|
java.lang.reflect.TypeVariable[] superclassTVS=s.getTypeParameters();
|
||||||
for(int tvi=0;tvi<superclassTVS.length;tvi++){
|
for(int tvi=0;tvi<superclassTVS.length;tvi++){
|
||||||
supertypeGenPara.addElement(superclassTVS[tvi].getName());
|
supertypeGenPara.addElement(superclassTVS[tvi].getName());
|
||||||
@ -1404,7 +1404,7 @@ public class SourceFile
|
|||||||
ret = new Class(s.getName(),ss.getType(),new Modifiers(),supertypeGenPara);
|
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));
|
ass.addClassAssumption(new ClassAssumption(ret));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -1439,7 +1439,7 @@ public class SourceFile
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.createTypeFromJavaGenericType.21415.body
|
// 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){
|
if(type instanceof TypeVariableImpl){
|
||||||
TypeVariableImpl tvi=((TypeVariableImpl)type);
|
TypeVariableImpl tvi=((TypeVariableImpl)type);
|
||||||
return(new GenericTypeVar(jreSpiderRegistry.get(tvi.getName()).getName().toString(),parentClass,-1));
|
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
|
// ino.method.makeBasicAssumptions.21418.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Erzeugt die Anfangsinformationen �ber bereits bekannte Klassen.
|
* Erzeugt die Anfangsinformationen �ber bereits bekannte Klassen.
|
||||||
* <br/>Achtung Workaround: Die RefTypes m�ssen sp�ter noch durch BaseTypes
|
* <br/>Achtung Workaround: Die RefTypes m�ssen sp�ter noch durch BaseTypes
|
||||||
* ersetzt werden. <br>
|
* ersetzt werden. <br>
|
||||||
* Author: J�rg B�uerle
|
* Author: J�rg B�uerle
|
||||||
*
|
*
|
||||||
* @return A priori Typinformationen
|
* @return A priori Typinformationen
|
||||||
* @throws ClassNotFoundException
|
* @throws ClassNotFoundException
|
||||||
@ -1599,7 +1599,7 @@ public class SourceFile
|
|||||||
// Menge bauen:
|
// Menge bauen:
|
||||||
//------------------------
|
//------------------------
|
||||||
foo.addClassName("java.lang.Menge"); //PL 05-08-01 eingefuegt
|
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>();
|
Menge<GenericTypeVar> typeGenPara = new Menge<GenericTypeVar>();
|
||||||
typeGenPara.addElement(new GenericTypeVar(E.getName(),-1));
|
typeGenPara.addElement(new GenericTypeVar(E.getName(),-1));
|
||||||
foo.addGenericTypeVars("java.lang.Menge", typeGenPara);
|
foo.addGenericTypeVars("java.lang.Menge", typeGenPara);
|
||||||
@ -1641,7 +1641,7 @@ public class SourceFile
|
|||||||
*/
|
*/
|
||||||
TypeAssumptions ret = new TypeAssumptions();
|
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
|
//TODO: Hier mehr als Fun1-Fun5 implementieren
|
||||||
for(int i = 0; i<6; i++){
|
for(int i = 0; i<6; i++){
|
||||||
FunNInterface funN = new FunNInterface(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
|
// ino.end
|
||||||
|
|
||||||
@ -1666,8 +1666,8 @@ public class SourceFile
|
|||||||
|
|
||||||
// ino.method.removeBasicAssumptions.21424.defdescription type=javadoc
|
// ino.method.removeBasicAssumptions.21424.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* L�scht die Anfangsinformation wieder aus dem Klassenvektor
|
* L�scht die Anfangsinformation wieder aus dem Klassenvektor
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.removeBasicAssumptions.21424.definition
|
// ino.method.removeBasicAssumptions.21424.definition
|
||||||
@ -1687,11 +1687,11 @@ public class SourceFile
|
|||||||
|
|
||||||
// ino.method.getPackageName.21427.defdescription type=javadoc
|
// ino.method.getPackageName.21427.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars
|
* Erzeugt f�r jede Klasse einen Menge, in den Referenzen auf die GenericTypeVars
|
||||||
* dieser Klasse gespeichert werden. Diese Mengeen werden unter den Klassennamen
|
* dieser Klasse gespeichert werden. Diese Mengeen werden unter den Klassennamen
|
||||||
* in der
|
* in der
|
||||||
* Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert.
|
* Ergebnisdatenstruktur abgelegt. Au�erdem werden alle Klassennamen gespeichert.
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param res
|
* @param res
|
||||||
* /
|
* /
|
||||||
* /*private void addClassNamesAndGenericsToRR(CTypeReconstructionResult res){
|
* /*private void addClassNamesAndGenericsToRR(CTypeReconstructionResult res){
|
||||||
|
@ -21,11 +21,11 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Wird nach dem Parsen aufgerufen.
|
* Wird nach dem Parsen aufgerufen.
|
||||||
* Erfüllt folgenden Aufgaben:
|
* Erfüllt folgenden Aufgaben:
|
||||||
* 1. Füllt fehlende Typangaben mit TPHs auf.
|
* 1. Füllt fehlende Typangaben mit TPHs auf.
|
||||||
* 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent)
|
* 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent)
|
||||||
* 3. Wechselt RefTypes gegebenenfalls mit GenericTypeVars aus.
|
* 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) {
|
public void parserPostProcessing(SyntaxTreeNode parent) {
|
||||||
@ -63,13 +63,13 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
|
|||||||
SyntaxTreeNode equal = (SyntaxTreeNode)object;
|
SyntaxTreeNode equal = (SyntaxTreeNode)object;
|
||||||
if(!equal.getDescription().equals(this.getDescription()))return false;
|
if(!equal.getDescription().equals(this.getDescription()))return false;
|
||||||
if(this.getParent()!=null)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Methode zur Generierung der TypeInsertPoints
|
* 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
|
* @param result - Das ResultSet auf dessen Basis die InsertPoints generiert werden
|
||||||
*/
|
*/
|
||||||
public void addTypeInsertPoints(TypeInsertSet insertSet,ResultSet result) {
|
public void addTypeInsertPoints(TypeInsertSet insertSet,ResultSet result) {
|
||||||
@ -77,7 +77,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
|
|||||||
node.addTypeInsertPoints(insertSet, result);
|
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.
|
//Fall der Knoten ein TypeInsertable ist, kann direkt der TypeInsertPoint generiert werden.
|
||||||
if(this instanceof TypeInsertable){
|
if(this instanceof TypeInsertable){
|
||||||
TypeInsertable that = (TypeInsertable)this;
|
TypeInsertable that = (TypeInsertable)this;
|
||||||
@ -87,7 +87,7 @@ public abstract class SyntaxTreeNode implements IItemWithOffset{
|
|||||||
insertSet.add(tip);//ret.addAll(((TypePlaceholder)t).getTypeInsertPoints(result));
|
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){
|
if(that instanceof Generic && that.getOffset()>=0){
|
||||||
//Alle unresolvedTPHs ermitteln und GenericTypeVarInsertPoints bilden:
|
//Alle unresolvedTPHs ermitteln und GenericTypeVarInsertPoints bilden:
|
||||||
Menge<TypePlaceholder> uTPHs = insertSet.getUnresolvedTPHs();
|
Menge<TypePlaceholder> uTPHs = insertSet.getUnresolvedTPHs();
|
||||||
|
@ -54,7 +54,7 @@ public class DeclId
|
|||||||
// ino.attribute.m_LineNumber.23295.declaration
|
// ino.attribute.m_LineNumber.23295.declaration
|
||||||
private int m_LineNumber = MyCompiler.NO_LINENUMBER;
|
private int m_LineNumber = MyCompiler.NO_LINENUMBER;
|
||||||
// ino.end
|
// 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
|
// ino.attribute.codegenlog.23298.decldescription type=line
|
||||||
// Logger fuer Code-Gen
|
// Logger fuer Code-Gen
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -199,7 +199,7 @@ public class DeclId
|
|||||||
Constant ct = new Constant(name, modifiers);
|
Constant ct = new Constant(name, modifiers);
|
||||||
ct.setType(type);
|
ct.setType(type);
|
||||||
if (!(wert instanceof Expr))
|
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.setValue((Expr) wert);
|
||||||
|
|
||||||
ct.codegen( classfile, paralist);
|
ct.codegen( classfile, paralist);
|
||||||
@ -277,7 +277,7 @@ public class DeclId
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
// ino.method.getOffset.23349.defdescription type=line
|
// ino.method.getOffset.23349.defdescription type=line
|
||||||
// hinzugef�gt hoth: 07.04.2006
|
// hinzugef�gt hoth: 07.04.2006
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.getOffset.23349.definition
|
// ino.method.getOffset.23349.definition
|
||||||
public int getOffset()
|
public int getOffset()
|
||||||
@ -289,7 +289,7 @@ public class DeclId
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
// ino.method.setOffset.23352.defdescription type=line
|
// ino.method.setOffset.23352.defdescription type=line
|
||||||
// hinzugef�gt hoth: 07.04.2006
|
// hinzugef�gt hoth: 07.04.2006
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.setOffset.23352.definition
|
// ino.method.setOffset.23352.definition
|
||||||
public void setOffset(int Offset)
|
public void setOffset(int Offset)
|
||||||
@ -302,7 +302,7 @@ public class DeclId
|
|||||||
|
|
||||||
// ino.method.toString.23355.defdescription type=javadoc
|
// ino.method.toString.23355.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -31,7 +31,7 @@ public class UsedId implements IItemWithOffset
|
|||||||
// ino.attribute.vParaOrg.23672.declaration
|
// ino.attribute.vParaOrg.23672.declaration
|
||||||
public Menge<Type> vParaOrg = null; // otth: originale Parameterliste
|
public Menge<Type> vParaOrg = null; // otth: originale Parameterliste
|
||||||
// ino.end
|
// 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
|
// ino.method.UsedId.23675.definition
|
||||||
public UsedId(int offset)
|
public UsedId(int offset)
|
||||||
@ -49,7 +49,7 @@ public class UsedId implements IItemWithOffset
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ino.method.getOffset.23678.defdescription type=line
|
// ino.method.getOffset.23678.defdescription type=line
|
||||||
// hinzugef�gt hoth: 07.04.2006
|
// hinzugef�gt hoth: 07.04.2006
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.getOffset.23678.definition
|
// ino.method.getOffset.23678.definition
|
||||||
public int getOffset()
|
public int getOffset()
|
||||||
@ -70,7 +70,7 @@ public class UsedId implements IItemWithOffset
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
// ino.method.setOffset.23684.defdescription type=line
|
// ino.method.setOffset.23684.defdescription type=line
|
||||||
// hinzugef�gt hoth: 07.04.2006
|
// hinzugef�gt hoth: 07.04.2006
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.setOffset.23684.definition
|
// ino.method.setOffset.23684.definition
|
||||||
public void setOffset(int Offset)
|
public void setOffset(int Offset)
|
||||||
@ -219,7 +219,7 @@ public class UsedId implements IItemWithOffset
|
|||||||
|
|
||||||
// ino.method.toString.23723.defdescription type=javadoc
|
// ino.method.toString.23723.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -228,7 +228,7 @@ public class UsedId implements IItemWithOffset
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.toString.23723.body
|
// 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 = "";
|
/*String s = "";
|
||||||
for(int i = 0; i<name.size();i++)
|
for(int i = 0; i<name.size();i++)
|
||||||
{
|
{
|
||||||
|
@ -210,7 +210,7 @@ public class Assign extends Expr
|
|||||||
|
|
||||||
// ino.method.toString.24960.defdescription type=javadoc
|
// ino.method.toString.24960.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl<EFBFBD>micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -251,8 +251,8 @@ public class Binary extends BinaryExpr
|
|||||||
ret.add(this.expr1.TYPEExpr(assumptions));
|
ret.add(this.expr1.TYPEExpr(assumptions));
|
||||||
ret.add(this.expr2.TYPEExpr(assumptions));
|
ret.add(this.expr2.TYPEExpr(assumptions));
|
||||||
/**
|
/**
|
||||||
* Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter
|
* Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter
|
||||||
* Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints.
|
* Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints.
|
||||||
* @param expr1
|
* @param expr1
|
||||||
* @param expr2
|
* @param expr2
|
||||||
* @return
|
* @return
|
||||||
|
@ -128,7 +128,7 @@ public class Block extends Statement
|
|||||||
|
|
||||||
// ino.method.toString.25083.defdescription type=javadoc
|
// ino.method.toString.25083.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -174,7 +174,7 @@ public class Block extends Statement
|
|||||||
typinferenceLog.debug("Prozessing statement: "+stmt, Section.TYPEINFERENCE);
|
typinferenceLog.debug("Prozessing statement: "+stmt, Section.TYPEINFERENCE);
|
||||||
ret.add(stmt.TYPEStmt(assumptions));
|
ret.add(stmt.TYPEStmt(assumptions));
|
||||||
/* if((stmt instanceof Return)){
|
/* 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 (!(stmt.getReturnType() instanceof Void))
|
||||||
if (this.getReturnType() instanceof Void) {
|
if (this.getReturnType() instanceof Void) {
|
||||||
//this.setTypeVariable(stmt.getTypeVariable());
|
//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 {
|
else {
|
||||||
TypePlaceholder tph = TypePlaceholder.fresh(this);
|
TypePlaceholder tph = TypePlaceholder.fresh(this);
|
||||||
@ -212,7 +212,7 @@ public class Block extends Statement
|
|||||||
typinferenceLog.debug("Prozessing statement: "+stmt);
|
typinferenceLog.debug("Prozessing statement: "+stmt);
|
||||||
ret.add(stmt.TYPEStmt(assumptions));
|
ret.add(stmt.TYPEStmt(assumptions));
|
||||||
if((stmt instanceof Return)){
|
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;
|
return ret;
|
||||||
|
@ -79,7 +79,7 @@ public class DoubleLiteral extends Literal
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.sc_check.25466.body
|
// 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
|
// ino.end
|
||||||
*/
|
*/
|
||||||
@ -142,7 +142,7 @@ public class DoubleLiteral extends Literal
|
|||||||
|
|
||||||
// ino.method.toString.25484.defdescription type=javadoc
|
// ino.method.toString.25484.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl<EFBFBD>micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -95,15 +95,15 @@ public abstract class Expr extends ExprStmt
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author AI10023 - Andreas Stadelmeier
|
* @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.
|
* Jede Expression wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen.
|
||||||
*/
|
*/
|
||||||
public abstract ConstraintsSet TYPEExpr(TypeAssumptions assumptions);
|
public abstract ConstraintsSet TYPEExpr(TypeAssumptions assumptions);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author AI10023 - Andreas Stadelmeier
|
* @author AI10023 - Andreas Stadelmeier
|
||||||
* Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss.
|
* Die Funktion überschreiben, damit sie von Expressions nicht mehr spezifiziert werden muss.
|
||||||
* Denn Expressions müssen diese Funktion nicht implementieren.
|
* Denn Expressions müssen diese Funktion nicht implementieren.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions){
|
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions){
|
||||||
|
@ -52,7 +52,7 @@ public abstract class ExprStmt extends Statement
|
|||||||
|
|
||||||
// ino.method.getTypeLineNumber.25291.defdescription type=javadoc
|
// ino.method.getTypeLineNumber.25291.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -74,7 +74,7 @@ public class FloatLiteral extends Literal
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.sc_check.25466.body
|
// 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
|
// ino.end
|
||||||
*/
|
*/
|
||||||
@ -138,7 +138,7 @@ public class FloatLiteral extends Literal
|
|||||||
|
|
||||||
// ino.method.toString.25484.defdescription type=javadoc
|
// ino.method.toString.25484.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl<EFBFBD>micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -197,18 +197,18 @@ public class IfStmt extends Statement
|
|||||||
int breakpoint2 = code.get_code_length();
|
int breakpoint2 = code.get_code_length();
|
||||||
if(!(else_block==null || else_block instanceof EmptyStmt))
|
if(!(else_block==null || else_block instanceof EmptyStmt))
|
||||||
{
|
{
|
||||||
//hama: Die zwei folgenen if-Abfragen wurden eingef�gt und beheben den Bug,
|
//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
|
//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,
|
//letzte Befehl in einem if-Block ein return war. Trifft dieser Fall zu,
|
||||||
//so wird kein goto Befehl (f�r das �berspringen des else-Blocks eingef�gt)
|
//so wird kein goto Befehl (f�r das �berspringen des else-Blocks eingef�gt)
|
||||||
//-> das verlangt die vm ->der code w�re nicht erreichbar.
|
//-> das verlangt die vm ->der code w�re nicht erreichbar.
|
||||||
//Allerdings k�nnte das return-Statement nat�rlich auch an einer anderen
|
//Allerdings k�nnte das return-Statement nat�rlich auch an einer anderen
|
||||||
//Stelle (nicht als letzter Befehl) stehen, f�r diesen Fall d�rfte die
|
//Stelle (nicht als letzter Befehl) stehen, f�r diesen Fall d�rfte die
|
||||||
//Codegenerierung noch nicht funktionieren. Hab versucht diesen Fall mit
|
//Codegenerierung noch nicht funktionieren. Hab versucht diesen Fall mit
|
||||||
//Toggle3 zu erzeugen - wird aber richtig generiert.
|
//Toggle3 zu erzeugen - wird aber richtig generiert.
|
||||||
//letztes Statement im Menge in s schreiben
|
//letztes Statement im Menge in s schreiben
|
||||||
//Statement s = (Statement)(((Block)this.then_block).statements.lastElement());
|
//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());
|
Return r = new Return(getOffset(),getVariableLength());
|
||||||
|
|
||||||
if( !(((Block)this.then_block).statements.lastElement()).getClass().equals(r.getClass()) )
|
if( !(((Block)this.then_block).statements.lastElement()).getClass().equals(r.getClass()) )
|
||||||
@ -252,7 +252,7 @@ public class IfStmt extends Statement
|
|||||||
ConstraintsSet ret = new ConstraintsSet();
|
ConstraintsSet ret = new ConstraintsSet();
|
||||||
this.setType(TypePlaceholder.fresh(this));
|
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));
|
ret.add(this.then_block.TYPEStmt(assumptions));
|
||||||
if(else_block!=null){
|
if(else_block!=null){
|
||||||
ret.add(this.else_block.TYPEStmt(assumptions));
|
ret.add(this.else_block.TYPEStmt(assumptions));
|
||||||
|
@ -80,7 +80,7 @@ public class InstVar extends Expr
|
|||||||
// ino.method.InstVar.25414.defdescription type=javadoc
|
// ino.method.InstVar.25414.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* macht aus einem UsedId mit einem Menge von Strings eine InstVar
|
* 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
|
* @param ui
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -180,7 +180,7 @@ public class InstVar extends Expr
|
|||||||
|
|
||||||
// ino.method.toString.25441.defdescription type=javadoc
|
// ino.method.toString.25441.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl<EFBFBD>micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -77,7 +77,7 @@ public class IntLiteral extends Literal
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.sc_check.25466.body
|
// 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
|
// ino.end
|
||||||
*/
|
*/
|
||||||
@ -138,7 +138,7 @@ public class IntLiteral extends Literal
|
|||||||
|
|
||||||
// ino.method.toString.25484.defdescription type=javadoc
|
// ino.method.toString.25484.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl<EFBFBD>micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -129,32 +129,32 @@ public class LambdaExpression extends Expr{
|
|||||||
* TYPEExpr( Ass, Lambda( (x1 , . . . , xN ), expr|stmt ) ) =
|
* TYPEExpr( Ass, Lambda( (x1 , . . . , xN ), expr|stmt ) ) =
|
||||||
* let
|
* let
|
||||||
* AssArgs = { xi : ai | ai fresh type variables }
|
* 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 )
|
* | (stmtt : rty, ConS) = TYPEStmt( Ass u AssArgs, stmt )
|
||||||
* in
|
* in
|
||||||
* (Lambda( (x1 : a1 , . . . , xN : aN ), exprt : rty|stmtt : rty ) : a,
|
* (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
|
* where a is a fresh type variable
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
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());
|
TypeAssumptions ArgumentAssumptions = new TypeAssumptions(this.getParentClass().getName());
|
||||||
Menge<Type> paramTypes = new Menge<Type>();
|
Menge<Type> paramTypes = new Menge<Type>();
|
||||||
|
|
||||||
for(FormalParameter param : params.formalparameter){
|
for(FormalParameter param : params.formalparameter){
|
||||||
if(param.getType()==null)param.setType(TypePlaceholder.fresh(this));
|
if(param.getType()==null)param.setType(TypePlaceholder.fresh(this));
|
||||||
int offset = 0;
|
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));
|
ArgumentAssumptions.addAssumption(new ParameterAssumption(param));
|
||||||
paramTypes.add(param.getType());
|
paramTypes.add(param.getType());
|
||||||
}
|
}
|
||||||
this.setType(TypePlaceholder.fresh(this));
|
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
|
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<>();
|
Menge<Type> modifiedParamTypes = new Menge<>();
|
||||||
for(Type pT : paramTypes){
|
for(Type pT : paramTypes){
|
||||||
if(pT instanceof WildcardType){
|
if(pT instanceof WildcardType){
|
||||||
@ -175,7 +175,7 @@ public class LambdaExpression extends Expr{
|
|||||||
if(retType instanceof SuperWildcardType){
|
if(retType instanceof SuperWildcardType){
|
||||||
throw new TypeinferenceException("Typfehler von Parametertyp "+retType,this);
|
throw new TypeinferenceException("Typfehler von Parametertyp "+retType,this);
|
||||||
}else{
|
}else{
|
||||||
//retType bleibt unverändert
|
//retType bleibt unverändert
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
retType = new ExtendsWildcardType((ObjectType) retType);
|
retType = new ExtendsWildcardType((ObjectType) retType);
|
||||||
|
@ -148,7 +148,7 @@ public class LocalOrFieldVar extends Expr
|
|||||||
|
|
||||||
// ino.method.toString.25534.defdescription type=javadoc
|
// ino.method.toString.25534.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -174,7 +174,7 @@ public class LocalOrFieldVar extends Expr
|
|||||||
@Override
|
@Override
|
||||||
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
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());
|
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);
|
if(thisTypeAssumption == null)throw new TypeinferenceException("Eine Variable "+this.get_Name()+" ist in den Assumptions nicht vorhanden",this);
|
||||||
Type thisType = thisTypeAssumption.checkTYPE(assumptions, this);
|
Type thisType = thisTypeAssumption.checkTYPE(assumptions, this);
|
||||||
|
@ -214,7 +214,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable
|
|||||||
parserlog.debug(c.getName()+" "+c.get_ParaList().size());
|
parserlog.debug(c.getName()+" "+c.get_ParaList().size());
|
||||||
SCStatementException ex = new SCStatementException();
|
SCStatementException ex = new SCStatementException();
|
||||||
SCExcept e = new SCExcept();
|
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_function("complete_parahashtable() --> check_anz()");
|
||||||
e.set_statement(type.getName().toString());
|
e.set_statement(type.getName().toString());
|
||||||
ex.addException(e);
|
ex.addException(e);
|
||||||
@ -279,7 +279,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable
|
|||||||
|
|
||||||
// ino.method.getLineNumber.25602.defdescription type=javadoc
|
// ino.method.getLineNumber.25602.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -319,7 +319,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable
|
|||||||
|
|
||||||
// ino.method.getTypeLineNumber.25611.defdescription type=javadoc
|
// ino.method.getTypeLineNumber.25611.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -335,7 +335,7 @@ public class LocalVarDecl extends Statement implements TypeInsertable
|
|||||||
|
|
||||||
// ino.method.toString.25617.defdescription type=javadoc
|
// ino.method.toString.25617.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -371,8 +371,8 @@ public class LocalVarDecl extends Statement implements TypeInsertable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Der Typ der Variablendeklaration wird den Assumptions angefügt.
|
* Der Typ der Variablendeklaration wird den Assumptions angefügt.
|
||||||
* Bei einer Deklaration ohne Typangabe wird ein TypePlaceholder den Assumptions hinzugefügt.
|
* Bei einer Deklaration ohne Typangabe wird ein TypePlaceholder den Assumptions hinzugefügt.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) {
|
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) {
|
||||||
|
@ -78,7 +78,7 @@ public class LongLiteral extends Literal
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.sc_check.25466.body
|
// 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
|
// ino.end
|
||||||
*/
|
*/
|
||||||
@ -140,7 +140,7 @@ public class LongLiteral extends Literal
|
|||||||
|
|
||||||
// ino.method.toString.25484.defdescription type=javadoc
|
// ino.method.toString.25484.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl<EFBFBD>micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -149,7 +149,7 @@ public class MethodCall extends Expr
|
|||||||
|
|
||||||
// ino.method.toString.25738.defdescription type=javadoc
|
// ino.method.toString.25738.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -182,16 +182,16 @@ public class MethodCall extends Expr
|
|||||||
/**
|
/**
|
||||||
* @author AI10023 - Andreas Stadelmeier
|
* @author AI10023 - Andreas Stadelmeier
|
||||||
*
|
*
|
||||||
* Mögliche Probleme:
|
* Mögliche Probleme:
|
||||||
* Wenn die Methode ohne Angabe eines Receivers im Quelltext steht:
|
* Wenn die Methode ohne Angabe eines Receivers im Quelltext steht:
|
||||||
* methodCall(param); -> (bedeutet:) this.methodCall(param);
|
* 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
|
@Override
|
||||||
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
||||||
//Hier der Ablauf für einen Methodenaufruf:
|
//Hier der Ablauf für einen Methodenaufruf:
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
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));
|
this.setType(TypePlaceholder.fresh(this));
|
||||||
//Berechne die Constraints des Receivers
|
//Berechne die Constraints des Receivers
|
||||||
if(receiver == null){
|
if(receiver == null){
|
||||||
@ -199,19 +199,19 @@ public class MethodCall extends Expr
|
|||||||
}
|
}
|
||||||
ret.add(receiver.get_Expr().TYPEExpr(assumptions));
|
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){
|
if(this.arglist != null)for(Expr arg : this.arglist.expr){
|
||||||
ret.add(arg.TYPEExpr(assumptions));
|
ret.add(arg.TYPEExpr(assumptions));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Noch das Overloading-Constraint anhängen:
|
//Noch das Overloading-Constraint anhängen:
|
||||||
ret.add(overloading(assumptions));
|
ret.add(overloading(assumptions));
|
||||||
|
|
||||||
return ret;
|
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.
|
* Sucht in den Assumptions nach passenden Methoden und erstellt ein OderConstraintSet.
|
||||||
* @param assumptions
|
* @param assumptions
|
||||||
* @return
|
* @return
|
||||||
@ -222,9 +222,9 @@ public class MethodCall extends Expr
|
|||||||
OderConstraint oCons = new OderConstraint();
|
OderConstraint oCons = new OderConstraint();
|
||||||
Menge<MethodAssumption> methodAssumptions = assumptions.getMethodAssumptions(this.getName(), this.getArgumentList().size());
|
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);
|
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){
|
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;
|
if(!(this.type instanceof TypePlaceholder) && !this.type.equals(methodAssumption.getAssumedType()))break;
|
||||||
oCons.addConstraint(constraintsFromMethodAssumption(methodAssumption, assumptions));
|
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
|
* method, where the argument types are supertypes of a minimal type
|
||||||
* assumption.
|
* 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
|
* @return
|
||||||
*/
|
*/
|
||||||
public UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){
|
public UndConstraint constraintsFromMethodAssumption(MethodAssumption methodAssumption, TypeAssumptions assumptions){
|
||||||
UndConstraint methodConstraint = new UndConstraint();
|
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));
|
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++){
|
for(int i=0; i<methodAssumption.getParaCount();i++){
|
||||||
//Type der Argument Expressions <. AssumedType der Parameter
|
//Type der Argument Expressions <. AssumedType der Parameter
|
||||||
ConstraintType ct1 = this.getArgumentList().argumentAt(i).getType().TYPE(assumptions, this);
|
ConstraintType ct1 = this.getArgumentList().argumentAt(i).getType().TYPE(assumptions, this);
|
||||||
ConstraintType ct2 = methodAssumption.getParameterType(i).TYPE(assumptions, this);
|
ConstraintType ct2 = methodAssumption.getParameterType(i).TYPE(assumptions, this);
|
||||||
methodConstraint.addConstraint(ct1 , ct2);
|
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){
|
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").
|
//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));
|
methodConstraint.addConstraint(this.get_Receiver().get_Expr().getType().TYPE(assumptions, this), methodAssumption.getParentClassType().TYPE(assumptions, this));
|
||||||
|
@ -51,7 +51,7 @@ public class NewArray extends Expr
|
|||||||
|
|
||||||
// ino.method.getType.25803.defdescription type=javadoc
|
// ino.method.getType.25803.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @return Returns the type.
|
* @return Returns the type.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -66,7 +66,7 @@ public class NewArray extends Expr
|
|||||||
|
|
||||||
// ino.method.setType.25806.defdescription type=javadoc
|
// ino.method.setType.25806.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param type The type to set.
|
* @param type The type to set.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -131,7 +131,7 @@ public class NewClass extends Expr
|
|||||||
|
|
||||||
// ino.method.toString.25867.defdescription type=javadoc
|
// ino.method.toString.25867.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl�micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -158,10 +158,10 @@ public class NewClass extends Expr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
||||||
//TODO: Das hier noch vervollständigen
|
//TODO: Das hier noch vervollständigen
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
ConstraintsSet ret = new ConstraintsSet();
|
||||||
UndConstraint callConstraints = new UndConstraint();
|
UndConstraint callConstraints = new UndConstraint();
|
||||||
//Die Auskommentierten Zeilen gehören zu MethodRefNew
|
//Die Auskommentierten Zeilen gehören zu MethodRefNew
|
||||||
//Menge<Type> argumentTypeList = new Menge<Type>();
|
//Menge<Type> argumentTypeList = new Menge<Type>();
|
||||||
//for(Expr expr : this.arglist.expr){
|
//for(Expr expr : this.arglist.expr){
|
||||||
// argumentTypeList.add(expr.getTypeVariable());
|
// argumentTypeList.add(expr.getTypeVariable());
|
||||||
|
@ -34,7 +34,7 @@ public class Receiver
|
|||||||
|
|
||||||
// ino.method.Receiver.26132.defdescription type=javadoc
|
// ino.method.Receiver.26132.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Autor: J<EFBFBD>rg B<EFBFBD>uerle
|
* Autor: J�rg B�uerle
|
||||||
* @param expr
|
* @param expr
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -76,7 +76,7 @@ public class Receiver
|
|||||||
|
|
||||||
// ino.method.toString.26147.defdescription type=javadoc
|
// ino.method.toString.26147.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl<EFBFBD>micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -83,7 +83,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author AI10023 - Andreas Stadelmeier
|
* @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.
|
* Jedes Statement wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen.
|
||||||
*/
|
*/
|
||||||
public abstract ConstraintsSet TYPEStmt(TypeAssumptions assumptions);
|
public abstract ConstraintsSet TYPEStmt(TypeAssumptions assumptions);
|
||||||
@ -96,7 +96,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Sollte von jedem Statement überschrieben werden.
|
* Sollte von jedem Statement überschrieben werden.
|
||||||
* Liefert Informationen zum Statment und dessen Typ.
|
* Liefert Informationen zum Statment und dessen Typ.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -108,7 +108,7 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
|
|||||||
/**
|
/**
|
||||||
* @author AI10023 - Andreas Stadelmeier
|
* @author AI10023 - Andreas Stadelmeier
|
||||||
* Jedem Statement und jeder Expression wird im Zuge des Typinferenzalgorithmus eine Typvariable zugewiesen.
|
* 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)
|
public void setType(Type t)
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,7 @@ public class SuperCall extends ThisCall
|
|||||||
return ret;
|
return ret;
|
||||||
}else{
|
}else{
|
||||||
//Ansonsten Fehler ausgeben:
|
//Ansonsten Fehler ausgeben:
|
||||||
throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this);
|
throw new TypeinferenceException("super()-Aufruf hier nicht möglich", this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ public class This extends Expr
|
|||||||
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
ConstraintsSet ret = new ConstraintsSet();
|
||||||
//this.set_Type(new);
|
//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());
|
this.setType(this.getParentClass().getType());
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ public class ThisCall extends MethodCall
|
|||||||
return ret;
|
return ret;
|
||||||
}else{
|
}else{
|
||||||
//Ansonsten Fehler ausgeben:
|
//Ansonsten Fehler ausgeben:
|
||||||
throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this);
|
throw new TypeinferenceException("this()-Aufruf hier nicht möglich", this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ public class WhileStmt extends Statement
|
|||||||
|
|
||||||
// ino.method.toString.26360.defdescription type=javadoc
|
// ino.method.toString.26360.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: Martin Pl<EFBFBD>micke
|
* <br/>Author: Martin Pl�micke
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -40,7 +40,7 @@ public abstract class BaseType extends Type
|
|||||||
|
|
||||||
// ino.method.equals.26445.defdescription type=javadoc
|
// ino.method.equals.26445.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -85,7 +85,7 @@ public abstract class BaseType extends Type
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) {
|
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.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ public class BooleanType extends BaseType
|
|||||||
|
|
||||||
// ino.method.equals.26458.defdescription type=javadoc
|
// ino.method.equals.26458.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -43,7 +43,7 @@ public class BooleanType extends BaseType
|
|||||||
|
|
||||||
// ino.method.clone.26461.defdescription type=javadoc
|
// ino.method.clone.26461.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -87,7 +87,7 @@ public class BoundedGenericTypeVar extends GenericTypeVar
|
|||||||
public ConstraintsSet TYPE(TypeAssumptions ass) {
|
public ConstraintsSet TYPE(TypeAssumptions ass) {
|
||||||
ConstraintsSet ret = super.TYPE(ass);
|
ConstraintsSet ret = super.TYPE(ass);
|
||||||
//ass.addGenericVarAssumption(this);
|
//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<>();
|
Menge<ObjectType> tempBounds = new Menge<>();
|
||||||
if(this.bounds != null){
|
if(this.bounds != null){
|
||||||
for(ObjectType ev : this.bounds){
|
for(ObjectType ev : this.bounds){
|
||||||
|
@ -22,7 +22,7 @@ public class CharacterType extends BaseType
|
|||||||
|
|
||||||
// ino.method.equals.26499.defdescription type=javadoc
|
// ino.method.equals.26499.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -43,7 +43,7 @@ public class CharacterType extends BaseType
|
|||||||
|
|
||||||
// ino.method.clone.26502.defdescription type=javadoc
|
// ino.method.clone.26502.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -22,7 +22,7 @@ public class DoubleType extends BaseType
|
|||||||
|
|
||||||
// ino.method.equals.26534.defdescription type=javadoc
|
// ino.method.equals.26534.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -43,7 +43,7 @@ public class DoubleType extends BaseType
|
|||||||
|
|
||||||
// ino.method.clone.26537.defdescription type=javadoc
|
// ino.method.clone.26537.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -21,8 +21,8 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
|||||||
public class ExtendsWildcardType extends WildcardType implements ITypeContainer, IMatchable{
|
public class ExtendsWildcardType extends WildcardType implements ITypeContainer, IMatchable{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Standard Konstruktor für eine ExtendsWildcard
|
* Standard Konstruktor für eine ExtendsWildcard
|
||||||
*/
|
*/
|
||||||
public ExtendsWildcardType (int offset, ObjectType extendsType)
|
public ExtendsWildcardType (int offset, ObjectType extendsType)
|
||||||
{
|
{
|
||||||
@ -35,10 +35,10 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Typen in der Wildcard zurück.
|
* Gibt den Typen in der Wildcard zurück.
|
||||||
* Beispiel: ? extends Integer.
|
* Beispiel: ? extends Integer.
|
||||||
* Integer wird zurückgegeben.
|
* Integer wird zurückgegeben.
|
||||||
*/
|
*/
|
||||||
public ObjectType get_ExtendsType()
|
public ObjectType get_ExtendsType()
|
||||||
{
|
{
|
||||||
@ -46,8 +46,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt String Entsprechung zurück.
|
* Gibt String Entsprechung zurück.
|
||||||
*/
|
*/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
@ -55,8 +55,8 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt einen Klon der Wildcard zurück.
|
* Gibt einen Klon der Wildcard zurück.
|
||||||
* Der Innere Typ wird auch geklont
|
* Der Innere Typ wird auch geklont
|
||||||
*/
|
*/
|
||||||
public ExtendsWildcardType clone()
|
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.
|
* Vergleicht mit einem anderen Objekt.
|
||||||
* @param obj - Object to compare.
|
* @param obj - Object to compare.
|
||||||
*/
|
*/
|
||||||
@ -83,9 +83,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt die passende FreshWildcardType Klasse zurück.
|
* Gibt die passende FreshWildcardType Klasse zurück.
|
||||||
* Wird für CaptureConversion verwendet
|
* Wird für CaptureConversion verwendet
|
||||||
*/
|
*/
|
||||||
public FreshExtendsWildcardType GetFreshWildcardType()
|
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().
|
* Das gleiche wie get_ExtendsType().
|
||||||
* Überschreibt die Methode der Superklasse.
|
* Überschreibt die Methode der Superklasse.
|
||||||
*/
|
*/
|
||||||
public Type GetWildcardType()
|
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
|
* Setzt den Typ in der Wildcard
|
||||||
* @param T - Type to be set
|
* @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().
|
* Das gleiche wie get_ExtendsType().
|
||||||
* Implementiert ITypeContainer
|
* Implementiert ITypeContainer
|
||||||
*/
|
*/
|
||||||
@ -124,9 +124,9 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
||||||
* Wird über IMatchable implementiert.
|
* Wird über IMatchable implementiert.
|
||||||
*/
|
*/
|
||||||
public ObjectType getMatchType()
|
public ObjectType getMatchType()
|
||||||
{
|
{
|
||||||
@ -153,7 +153,7 @@ public class ExtendsWildcardType extends WildcardType implements ITypeContainer,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) {
|
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();
|
this.innerType = (ObjectType) this.innerType.TYPE(ass, parent).getType();
|
||||||
return super.TYPE(ass, parent);
|
return super.TYPE(ass, parent);
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ public class FloatType extends BaseType
|
|||||||
|
|
||||||
// ino.method.equals.26534.defdescription type=javadoc
|
// ino.method.equals.26534.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -43,7 +43,7 @@ public class FloatType extends BaseType
|
|||||||
|
|
||||||
// ino.method.clone.26537.defdescription type=javadoc
|
// ino.method.clone.26537.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -7,8 +7,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
|
|||||||
private ObjectType extendsBoundType;
|
private ObjectType extendsBoundType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Standard Konstruktor für eine FreshExtendsWildcard
|
* Standard Konstruktor für eine FreshExtendsWildcard
|
||||||
*/
|
*/
|
||||||
public FreshExtendsWildcardType(ObjectType extendsBound,SyntaxTreeNode parent ,int offset)
|
public FreshExtendsWildcardType(ObjectType extendsBound,SyntaxTreeNode parent ,int offset)
|
||||||
{
|
{
|
||||||
@ -17,8 +17,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Privater Konstruktor für clone
|
* Privater Konstruktor für clone
|
||||||
*/
|
*/
|
||||||
private FreshExtendsWildcardType(ObjectType extendsBound ,SyntaxTreeNode parent,int offset, String name)
|
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/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt String Entsprechung zurück.
|
* Gibt String Entsprechung zurück.
|
||||||
*/
|
*/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
@ -40,8 +40,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt einen Klon der Wildcard zurück.
|
* Gibt einen Klon der Wildcard zurück.
|
||||||
* Der Innere Typ wird auch geklont
|
* Der Innere Typ wird auch geklont
|
||||||
*/
|
*/
|
||||||
public FreshExtendsWildcardType clone()
|
public FreshExtendsWildcardType clone()
|
||||||
@ -50,8 +50,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt die Grenze der Wildcard zurück
|
* Gibt die Grenze der Wildcard zurück
|
||||||
*/
|
*/
|
||||||
public ObjectType get_ExtendsBound()
|
public ObjectType get_ExtendsBound()
|
||||||
{
|
{
|
||||||
@ -59,8 +59,8 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
|
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
|
||||||
*/
|
*/
|
||||||
public boolean equals(Object obj)
|
public boolean equals(Object obj)
|
||||||
{
|
{
|
||||||
@ -74,9 +74,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt die passende ExtendsWildcardType Klasse zurück.
|
* Gibt die passende ExtendsWildcardType Klasse zurück.
|
||||||
* Wird für smaller4 verwendet
|
* Wird für smaller4 verwendet
|
||||||
*/
|
*/
|
||||||
public ExtendsWildcardType get_WildcardType()
|
public ExtendsWildcardType get_WildcardType()
|
||||||
{
|
{
|
||||||
@ -84,9 +84,9 @@ public class FreshExtendsWildcardType extends FreshWildcardType implements IMatc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
||||||
* Wird über IMatchable implementiert.
|
* Wird über IMatchable implementiert.
|
||||||
*/
|
*/
|
||||||
public Type getMatchType()
|
public Type getMatchType()
|
||||||
{
|
{
|
||||||
|
@ -7,8 +7,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
|
|||||||
private ObjectType superBoundType;
|
private ObjectType superBoundType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Standard Konstruktor für eine FreshSuperWildcard
|
* Standard Konstruktor für eine FreshSuperWildcard
|
||||||
*/
|
*/
|
||||||
public FreshSuperWildcardType(ObjectType superBound ,SyntaxTreeNode parent, int offset)
|
public FreshSuperWildcardType(ObjectType superBound ,SyntaxTreeNode parent, int offset)
|
||||||
{
|
{
|
||||||
@ -17,8 +17,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Privater Konstruktor für clone
|
* Privater Konstruktor für clone
|
||||||
*/
|
*/
|
||||||
private FreshSuperWildcardType(ObjectType superBound,SyntaxTreeNode parent,int offset, String name)
|
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/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt String Entsprechung zurück.
|
* Gibt String Entsprechung zurück.
|
||||||
*/
|
*/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
@ -40,8 +40,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt einen Klon der Wildcard zurück.
|
* Gibt einen Klon der Wildcard zurück.
|
||||||
* Der Innere Typ wird auch geklont
|
* Der Innere Typ wird auch geklont
|
||||||
*/
|
*/
|
||||||
public FreshSuperWildcardType clone()
|
public FreshSuperWildcardType clone()
|
||||||
@ -50,8 +50,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt die Grenze der Wildcard zurück
|
* Gibt die Grenze der Wildcard zurück
|
||||||
*/
|
*/
|
||||||
public ObjectType get_SuperBound()
|
public ObjectType get_SuperBound()
|
||||||
{
|
{
|
||||||
@ -59,8 +59,8 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
|
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
|
||||||
*/
|
*/
|
||||||
public boolean equals(Object obj)
|
public boolean equals(Object obj)
|
||||||
{
|
{
|
||||||
@ -74,9 +74,9 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt die passende SuperWildcardType Klasse zurück.
|
* Gibt die passende SuperWildcardType Klasse zurück.
|
||||||
* Wird für smaller4 verwendet
|
* Wird für smaller4 verwendet
|
||||||
*/
|
*/
|
||||||
public SuperWildcardType get_WildcardType()
|
public SuperWildcardType get_WildcardType()
|
||||||
{
|
{
|
||||||
@ -84,9 +84,9 @@ public class FreshSuperWildcardType extends FreshWildcardType implements IMatcha
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
||||||
* Wird über IMatchable implementiert.
|
* Wird über IMatchable implementiert.
|
||||||
*/
|
*/
|
||||||
public Type getMatchType()
|
public Type getMatchType()
|
||||||
{
|
{
|
||||||
|
@ -14,8 +14,8 @@ public class FreshWildcardType extends Type {
|
|||||||
private Menge<Type> upperBounds = new Menge<Type>();
|
private Menge<Type> upperBounds = new Menge<Type>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Standard Konstruktor für eine FreshWildcard
|
* Standard Konstruktor für eine FreshWildcard
|
||||||
*/
|
*/
|
||||||
public FreshWildcardType(SyntaxTreeNode parent, int offset)
|
public FreshWildcardType(SyntaxTreeNode parent, int offset)
|
||||||
{
|
{
|
||||||
@ -24,9 +24,9 @@ public class FreshWildcardType extends Type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Protected Konstruktor für clone.
|
* Protected Konstruktor für clone.
|
||||||
* Protected, da vererbte Klassen ihn verwenden müssen.
|
* Protected, da vererbte Klassen ihn verwenden müssen.
|
||||||
*/
|
*/
|
||||||
protected FreshWildcardType(SyntaxTreeNode parent, int offset, String name)
|
protected FreshWildcardType(SyntaxTreeNode parent, int offset, String name)
|
||||||
{
|
{
|
||||||
@ -35,8 +35,8 @@ public class FreshWildcardType extends Type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt String Entsprechung zurück.
|
* Gibt String Entsprechung zurück.
|
||||||
*/
|
*/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
@ -56,8 +56,8 @@ public class FreshWildcardType extends Type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt einen Klon der Wildcard zurück.
|
* Gibt einen Klon der Wildcard zurück.
|
||||||
* Der Innere Typ wird auch geklont
|
* Der Innere Typ wird auch geklont
|
||||||
*/
|
*/
|
||||||
public FreshWildcardType clone()
|
public FreshWildcardType clone()
|
||||||
@ -66,19 +66,19 @@ public class FreshWildcardType extends Type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
|
* Prüft, ob zwei Objekte gleich sind. NICHT INSTANZGLEICH
|
||||||
*/
|
*/
|
||||||
public boolean equals(Object obj)
|
public boolean equals(Object obj)
|
||||||
{
|
{
|
||||||
//Da die Namensgebung von Typeplaceholdern und FreshWildcards identisch ist,
|
//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.
|
//Wenn eine FreshWildcard mit einem TypePlaceholder verglichen wird.
|
||||||
return (obj instanceof FreshWildcardType) && super.equals(obj);
|
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
|
* Methode aus TypePlaceholder kopiert
|
||||||
*/
|
*/
|
||||||
private static JavaClassName makeNewName()
|
private static JavaClassName makeNewName()
|
||||||
@ -86,14 +86,14 @@ public class FreshWildcardType extends Type {
|
|||||||
// luar: Methode aus TypePlaceholder kopiert.
|
// luar: Methode aus TypePlaceholder kopiert.
|
||||||
String strReturn = strNextName;
|
String strReturn = strNextName;
|
||||||
|
|
||||||
// n�chster Name berechnen und in strNextName speichern
|
// n�chster Name berechnen und in strNextName speichern
|
||||||
inc( strNextName.length() - 1 );
|
inc( strNextName.length() - 1 );
|
||||||
|
|
||||||
return new JavaClassName(strReturn);
|
return new JavaClassName(strReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hilfsmethode für makeNewName
|
* Hilfsmethode für makeNewName
|
||||||
* Methode aus TypePlaceholder kopiert
|
* Methode aus TypePlaceholder kopiert
|
||||||
*/
|
*/
|
||||||
private static void inc(int i)
|
private static void inc(int i)
|
||||||
@ -112,18 +112,18 @@ public class FreshWildcardType extends Type {
|
|||||||
// aktuelle Stelle: auf A zuruecksetzen
|
// aktuelle Stelle: auf A zuruecksetzen
|
||||||
manipulate( i, 'A' );
|
manipulate( i, 'A' );
|
||||||
|
|
||||||
// vorherige Stelle erh�hen
|
// vorherige Stelle erh�hen
|
||||||
inc( i - 1 );
|
inc( i - 1 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// aktueller Buchstabe �ndern
|
// aktueller Buchstabe �ndern
|
||||||
manipulate( i, cBuchstabe );
|
manipulate( i, cBuchstabe );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hilfsmethode für makeNewName
|
* Hilfsmethode für makeNewName
|
||||||
* Methode aus TypePlaceholder kopiert
|
* Methode aus TypePlaceholder kopiert
|
||||||
*/
|
*/
|
||||||
private static void manipulate( int nStelle, char nWert )
|
private static void manipulate( int nStelle, char nWert )
|
||||||
@ -141,24 +141,24 @@ public class FreshWildcardType extends Type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt die passende WildcardType Klasse zurück.
|
* Gibt die passende WildcardType Klasse zurück.
|
||||||
* Wird für smaller4 verwendet
|
* Wird für smaller4 verwendet
|
||||||
*/
|
*/
|
||||||
public WildcardType get_WildcardType()
|
public WildcardType get_WildcardType()
|
||||||
{
|
{
|
||||||
return new WildcardType(null, this.getParent(),this.getOffset());
|
return new WildcardType(null, this.getParent(),this.getOffset());
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Menge der oberen Grenzen zurück
|
* Gibt den Menge der oberen Grenzen zurück
|
||||||
*/
|
*/
|
||||||
public Menge<Type> get_UpperBounds()
|
public Menge<Type> get_UpperBounds()
|
||||||
{
|
{
|
||||||
return this.upperBounds;
|
return this.upperBounds;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Setzt den Menge der oberen Grenzen
|
* Setzt den Menge der oberen Grenzen
|
||||||
*/
|
*/
|
||||||
public void set_UpperBounds(Menge<Type> bounds)
|
public void set_UpperBounds(Menge<Type> bounds)
|
||||||
|
@ -24,8 +24,8 @@ import de.dhbwstuttgart.syntaxtree.GTVDeclarationContext;
|
|||||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
||||||
// ino.class.GenericTypeVar.26505.description type=javadoc
|
// ino.class.GenericTypeVar.26505.description type=javadoc
|
||||||
/**
|
/**
|
||||||
* TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert.
|
* TODO: Diese Klasse überarbeiten. Pair genericTypeVar ist nicht implementiert.
|
||||||
* @author J�rg B�uerle
|
* @author J�rg B�uerle
|
||||||
* @version $Date: 2013/09/22 20:12:53 $
|
* @version $Date: 2013/09/22 20:12:53 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -38,9 +38,9 @@ public class GenericTypeVar extends ObjectType
|
|||||||
//Menge<Type> extendVars = new Menge<Type>();
|
//Menge<Type> extendVars = new Menge<Type>();
|
||||||
protected Pair genericConstraint;
|
protected Pair genericConstraint;
|
||||||
/**
|
/**
|
||||||
* Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch
|
* Eine Registry f�r alle Generic-Instanzen, die vor der Bytecode-Generierung durch
|
||||||
* Ihre Superklasse ersetzt werden m�ssen. Siehe "Type Erasure" in Sun Spezifikation.
|
* Ihre Superklasse ersetzt werden m�ssen. Siehe "Type Erasure" in Sun Spezifikation.
|
||||||
* <br/>Autor: J�rg B�uerle
|
* <br/>Autor: J�rg B�uerle
|
||||||
*/
|
*/
|
||||||
// ino.method.GenericTypeVar.26509.defdescription type=line
|
// ino.method.GenericTypeVar.26509.defdescription type=line
|
||||||
// private Hashtable<String, Menge<GenericTypeVar>> m_TypeErasureList;
|
// private Hashtable<String, Menge<GenericTypeVar>> m_TypeErasureList;
|
||||||
@ -79,7 +79,7 @@ public class GenericTypeVar extends ObjectType
|
|||||||
*/
|
*/
|
||||||
// ino.method.clone.26512.defdescription type=javadoc
|
// ino.method.clone.26512.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -94,7 +94,7 @@ public class GenericTypeVar extends ObjectType
|
|||||||
|
|
||||||
// ino.method.equals.26515.defdescription type=javadoc
|
// ino.method.equals.26515.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param obj
|
* @param obj
|
||||||
* @return
|
* @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
|
* @param ass
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -212,7 +212,7 @@ public class GenericTypeVar extends ObjectType
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent) {
|
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);
|
return super.TYPE(ass, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ public class GenericTypeVar extends ObjectType
|
|||||||
public void parserPostProcessing(SyntaxTreeNode parent) {
|
public void parserPostProcessing(SyntaxTreeNode parent) {
|
||||||
//SyntaxTreeNode parentTemp = this.parent;
|
//SyntaxTreeNode parentTemp = this.parent;
|
||||||
super.parserPostProcessing(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() {
|
public GTVDeclarationContext getDeclarationContext() {
|
||||||
|
@ -2,17 +2,17 @@ package de.dhbwstuttgart.syntaxtree.type;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Dieses Interface wird von allen Klassen implementiert, die weitere Klassen
|
* 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
|
public interface IMatchable
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
||||||
* Wird über IMatchable implementiert.
|
* Wird über IMatchable implementiert.
|
||||||
*/
|
*/
|
||||||
Type getMatchType();
|
Type getMatchType();
|
||||||
}
|
}
|
||||||
|
@ -2,16 +2,16 @@ package de.dhbwstuttgart.syntaxtree.type;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Dieses Interface wird von allen Klassen implementiert, die weitere Klassen enthalten.
|
* 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
|
public interface ITypeContainer
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Das gleiche wie get_ExtendsType().
|
* Das gleiche wie get_ExtendsType().
|
||||||
* Implementiert ITypeContainer
|
* Implementiert ITypeContainer
|
||||||
*/
|
*/
|
||||||
|
@ -22,7 +22,7 @@ public class IntegerType extends BaseType
|
|||||||
|
|
||||||
// ino.method.equals.26534.defdescription type=javadoc
|
// ino.method.equals.26534.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -43,7 +43,7 @@ public class IntegerType extends BaseType
|
|||||||
|
|
||||||
// ino.method.clone.26537.defdescription type=javadoc
|
// ino.method.clone.26537.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -22,7 +22,7 @@ public class LongType extends BaseType
|
|||||||
|
|
||||||
// ino.method.equals.26534.defdescription type=javadoc
|
// ino.method.equals.26534.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -43,7 +43,7 @@ public class LongType extends BaseType
|
|||||||
|
|
||||||
// ino.method.clone.26537.defdescription type=javadoc
|
// ino.method.clone.26537.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -86,7 +86,7 @@ public class RefType extends ObjectType implements IMatchable
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
int hash = 0;
|
int hash = 0;
|
||||||
hash += super.hashCode();
|
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;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,8 +114,8 @@ public class RefType extends ObjectType implements IMatchable
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Erstellt einen Referenztyp aus dem übergebenen Type.
|
* Erstellt einen Referenztyp aus dem übergebenen Type.
|
||||||
* Dabei wird der Name und der Offset des baseType's übernommen.
|
* Dabei wird der Name und der Offset des baseType's übernommen.
|
||||||
* @param baseType
|
* @param baseType
|
||||||
*/
|
*/
|
||||||
public RefType( Type baseType){
|
public RefType( Type baseType){
|
||||||
@ -229,8 +229,8 @@ public class RefType extends ObjectType implements IMatchable
|
|||||||
/**
|
/**
|
||||||
* HOTI
|
* HOTI
|
||||||
* Diese Methode sucht in der Klassendefinition nach einen GTV, die
|
* Diese Methode sucht in der Klassendefinition nach einen GTV, die
|
||||||
* so heißt wie die im RefType definierte Variable. Wenn sie diese gefunden
|
* 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
|
* 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
|
* angegeben in den Methodenparametern nach. Findet sie dort auch nichts, liefert
|
||||||
* die Methode <b>null</b>.
|
* die Methode <b>null</b>.
|
||||||
* @param type
|
* @param type
|
||||||
@ -314,8 +314,8 @@ public class RefType extends ObjectType implements IMatchable
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus.
|
* Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus.
|
||||||
* In einem RefType dürfen keine GTVs enthalten sein.
|
* In einem RefType dürfen keine GTVs enthalten sein.
|
||||||
* @param v
|
* @param v
|
||||||
*/
|
*/
|
||||||
// ino.method.set_ParaList.26661.definition
|
// ino.method.set_ParaList.26661.definition
|
||||||
@ -336,7 +336,7 @@ public class RefType extends ObjectType implements IMatchable
|
|||||||
// ino.end
|
// 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
|
// ino.method.get_ParaList.26664.definition
|
||||||
public Menge<Type> get_ParaList()
|
public Menge<Type> get_ParaList()
|
||||||
@ -737,9 +737,9 @@ public class RefType extends ObjectType implements IMatchable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
||||||
* Wird über IMatchable implementiert.
|
* Wird über IMatchable implementiert.
|
||||||
*/
|
*/
|
||||||
public Type getMatchType()
|
public Type getMatchType()
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@ public class ReturnType extends Type
|
|||||||
|
|
||||||
// ino.method.equals.26710.defdescription type=javadoc
|
// ino.method.equals.26710.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -42,7 +42,7 @@ public class ReturnType extends Type
|
|||||||
|
|
||||||
// ino.method.clone.26713.defdescription type=javadoc
|
// ino.method.clone.26713.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -23,8 +23,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Standard Konstruktor für eine SuperWildcard
|
* Standard Konstruktor für eine SuperWildcard
|
||||||
*/
|
*/
|
||||||
public SuperWildcardType(int offset, ObjectType innerType)
|
public SuperWildcardType(int offset, ObjectType innerType)
|
||||||
{
|
{
|
||||||
@ -32,10 +32,10 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Typen in der Wildcard zurück.
|
* Gibt den Typen in der Wildcard zurück.
|
||||||
* Beispiel: ? super Integer.
|
* Beispiel: ? super Integer.
|
||||||
* Integer wird zurückgegeben.
|
* Integer wird zurückgegeben.
|
||||||
*/
|
*/
|
||||||
public ObjectType get_SuperType()
|
public ObjectType get_SuperType()
|
||||||
{
|
{
|
||||||
@ -43,8 +43,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt String Entsprechung zurück.
|
* Gibt String Entsprechung zurück.
|
||||||
*/
|
*/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
@ -52,8 +52,8 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt einen Klon der Wildcard zurück.
|
* Gibt einen Klon der Wildcard zurück.
|
||||||
* Der Innere Typ wird auch geklont
|
* Der Innere Typ wird auch geklont
|
||||||
*/
|
*/
|
||||||
public SuperWildcardType clone()
|
public SuperWildcardType clone()
|
||||||
@ -63,9 +63,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt die passende FreshWildcardType Klasse zurück.
|
* Gibt die passende FreshWildcardType Klasse zurück.
|
||||||
* Wird für CaptureConversion verwendet
|
* Wird für CaptureConversion verwendet
|
||||||
*/
|
*/
|
||||||
public FreshSuperWildcardType GetFreshWildcardType()
|
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().
|
* Das gleiche wie get_innerType().
|
||||||
* Überschreibt die Methode der Superklasse
|
* Überschreibt die Methode der Superklasse
|
||||||
*/
|
*/
|
||||||
public Type GetWildcardType()
|
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
|
* Setzt den Typ in der Wildcard
|
||||||
* @param T - Type to be set
|
* @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().
|
* Das gleiche wie get_innerType().
|
||||||
* Implementiert ITypeContainer
|
* Implementiert ITypeContainer
|
||||||
*/
|
*/
|
||||||
@ -104,9 +104,9 @@ public class SuperWildcardType extends WildcardType implements ITypeContainer, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
* Gibt den Typen zurück, der bei einem match im Unify verwendet werden soll.
|
||||||
* Wird über IMatchable implementiert.
|
* Wird über IMatchable implementiert.
|
||||||
*/
|
*/
|
||||||
public Type getMatchType()
|
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.
|
* Vergleicht mit einem anderen Objekt.
|
||||||
* @param obj - Object to compare.
|
* @param obj - Object to compare.
|
||||||
*/
|
*/
|
||||||
|
@ -170,7 +170,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
|
|||||||
|
|
||||||
// ino.method.equals.26765.defdescription type=javadoc
|
// ino.method.equals.26765.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -194,7 +194,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
|
|||||||
|
|
||||||
// ino.method.clone.26768.defdescription type=javadoc
|
// ino.method.clone.26768.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
|
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -212,7 +212,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
|
|||||||
|
|
||||||
// ino.method.toString.26771.defdescription type=javadoc
|
// ino.method.toString.26771.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// 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
|
* @param tph
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -297,9 +297,9 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prüft ob der Typ in den Assumptions ass vorhanden ist.
|
* 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.
|
* 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.
|
* @param ass - Die Assumptions für den jeweiligen Kontext in dem sich der Typ befindet.
|
||||||
|
|
||||||
public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){
|
public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){
|
||||||
ConstraintType t = ass.getTypeFor(this, this);
|
ConstraintType t = ass.getTypeFor(this, this);
|
||||||
@ -308,7 +308,7 @@ public abstract class Type extends SyntaxTreeNode implements IItemWithOffset
|
|||||||
return t;
|
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){
|
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent){
|
||||||
ConstraintType t = ass.getTypeFor(this, parent);
|
ConstraintType t = ass.getTypeFor(this, parent);
|
||||||
if(t==null)
|
if(t==null)
|
||||||
|
@ -20,11 +20,11 @@ import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
|
|||||||
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet;
|
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet;
|
||||||
// ino.class.TypePlaceholder.26780.description type=javadoc
|
// ino.class.TypePlaceholder.26780.description type=javadoc
|
||||||
/**
|
/**
|
||||||
* Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben
|
* Repr�sentiert einen Typparameter f�r einen vom Programmierer nicht angegeben
|
||||||
* Typ. Jede TypePlaceholder besitzt einen eindeutigen Namen aus einem Namenspool
|
* Typ. Jede TypePlaceholder besitzt einen eindeutigen Namen aus einem Namenspool
|
||||||
* und
|
* und
|
||||||
* ist in einer zentralen Registry, d.h. einer <code>Hashtable</code> abgelegt.
|
* ist in einer zentralen Registry, d.h. einer <code>Hashtable</code> abgelegt.
|
||||||
* @author J�rg B�uerle
|
* @author J�rg B�uerle
|
||||||
* @version $Date: 2013/06/19 12:45:37 $
|
* @version $Date: 2013/06/19 12:45:37 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -50,9 +50,9 @@ public class TypePlaceholder extends ObjectType
|
|||||||
|
|
||||||
// ino.method.TypePlaceholder.26794.defdescription type=javadoc
|
// 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.
|
* Factory-Methode <code>fresh()</code> erzeugt.
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @param typeName Der Name der TypePlaceholder-Variablen
|
* @param typeName Der Name der TypePlaceholder-Variablen
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -64,14 +64,14 @@ public class TypePlaceholder extends ObjectType
|
|||||||
super(parent, -1);
|
super(parent, -1);
|
||||||
if(typeName == null)throw new NullPointerException();
|
if(typeName == null)throw new NullPointerException();
|
||||||
this.name = new JavaClassName(typeName);
|
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.end
|
||||||
|
|
||||||
// ino.method.getInstance.26797.defdescription type=javadoc
|
// ino.method.getInstance.26797.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Statische Methode, um einen TypePlaceholder aus der Registry zu holen.
|
* Statische Methode, um einen TypePlaceholder aus der Registry zu holen.
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @param name Der Name des TypePlaceholders
|
* @param name Der Name des TypePlaceholders
|
||||||
* @return Der TypePlaceholder oder <code>null</code>, falls er nicht in der
|
* @return Der TypePlaceholder oder <code>null</code>, falls er nicht in der
|
||||||
* Registry existiert
|
* Registry existiert
|
||||||
@ -88,7 +88,7 @@ public class TypePlaceholder extends ObjectType
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Generiert einen neuen TPH mit einem bestimmten Namen.
|
* 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
|
* @param name
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -110,7 +110,7 @@ public class TypePlaceholder extends ObjectType
|
|||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Ruft die TypePlaceholder.fresh()-Methode auf.
|
* Ruft die TypePlaceholder.fresh()-Methode auf.
|
||||||
* Fügt zusätzlich einen Replacementlistener hinzu.
|
* Fügt zusätzlich einen Replacementlistener hinzu.
|
||||||
* @param listener
|
* @param listener
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -129,8 +129,8 @@ public class TypePlaceholder extends ObjectType
|
|||||||
|
|
||||||
// ino.method.makeNewName.26803.defdescription type=javadoc
|
// ino.method.makeNewName.26803.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Berechnet einen neuen, eindeutigen Namen f�r eine neue
|
* Berechnet einen neuen, eindeutigen Namen f�r eine neue
|
||||||
* <code>TypePlaceholder</code>. <br>Author: J�rg B�uerle
|
* <code>TypePlaceholder</code>. <br>Author: J�rg B�uerle
|
||||||
* @return Der Name
|
* @return Der Name
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -142,7 +142,7 @@ public class TypePlaceholder extends ObjectType
|
|||||||
// otth: Funktion berechnet einen neuen Namen anhand eines alten gespeicherten
|
// otth: Funktion berechnet einen neuen Namen anhand eines alten gespeicherten
|
||||||
String strReturn = strNextName;
|
String strReturn = strNextName;
|
||||||
|
|
||||||
// n�chster Name berechnen und in strNextName speichern
|
// n�chster Name berechnen und in strNextName speichern
|
||||||
inc( strNextName.length() - 1 );
|
inc( strNextName.length() - 1 );
|
||||||
|
|
||||||
return strReturn;
|
return strReturn;
|
||||||
@ -152,7 +152,7 @@ public class TypePlaceholder extends ObjectType
|
|||||||
// ino.method.inc.26806.defdescription type=javadoc
|
// ino.method.inc.26806.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Hilfsfunktion zur Berechnung eines neuen Namens
|
* Hilfsfunktion zur Berechnung eines neuen Namens
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @param i
|
* @param i
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -162,10 +162,10 @@ public class TypePlaceholder extends ObjectType
|
|||||||
// ino.method.inc.26806.body
|
// ino.method.inc.26806.body
|
||||||
{
|
{
|
||||||
// otth: Hilfsfunktion zur Berechnung eines neuen Namens
|
// otth: Hilfsfunktion zur Berechnung eines neuen Namens
|
||||||
// otth: Erh�hung des Buchstabens an der Stelle i im String strNextName
|
// otth: Erh�hung des Buchstabens an der Stelle i im String strNextName
|
||||||
// otth: Nach �berlauf: rekursiver Aufruf
|
// otth: Nach �berlauf: rekursiver Aufruf
|
||||||
|
|
||||||
// falls i = -1 --> neuer Buchstabe vorne anf�gen
|
// falls i = -1 --> neuer Buchstabe vorne anf�gen
|
||||||
if ( i == -1 )
|
if ( i == -1 )
|
||||||
{
|
{
|
||||||
strNextName = "A" + strNextName;
|
strNextName = "A" + strNextName;
|
||||||
@ -179,12 +179,12 @@ public class TypePlaceholder extends ObjectType
|
|||||||
// aktuelle Stelle: auf A zuruecksetzen
|
// aktuelle Stelle: auf A zuruecksetzen
|
||||||
manipulate( i, 'A' );
|
manipulate( i, 'A' );
|
||||||
|
|
||||||
// vorherige Stelle erh�hen
|
// vorherige Stelle erh�hen
|
||||||
inc( i - 1 );
|
inc( i - 1 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// aktueller Buchstabe �ndern
|
// aktueller Buchstabe �ndern
|
||||||
manipulate( i, cBuchstabe );
|
manipulate( i, cBuchstabe );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ public class TypePlaceholder extends ObjectType
|
|||||||
// ino.method.manipulate.26809.defdescription type=javadoc
|
// ino.method.manipulate.26809.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Hilfsfunktion zur Berechnung eines neuen Namens.
|
* Hilfsfunktion zur Berechnung eines neuen Namens.
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @param nStelle
|
* @param nStelle
|
||||||
* @param nWert
|
* @param nWert
|
||||||
*/
|
*/
|
||||||
@ -221,7 +221,7 @@ public class TypePlaceholder extends ObjectType
|
|||||||
|
|
||||||
// ino.method.equals.26812.defdescription type=javadoc
|
// ino.method.equals.26812.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -244,9 +244,9 @@ public class TypePlaceholder extends ObjectType
|
|||||||
|
|
||||||
// ino.method.deleteRegistry.26839.defdescription type=javadoc
|
// ino.method.deleteRegistry.26839.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* L�scht die komplette Registry von TypePlaceholders. Sollte nur und
|
* L�scht die komplette Registry von TypePlaceholders. Sollte nur und
|
||||||
* ausschlie�lich von <code>MyCompiler.init()</code> aufgerufen werden!!!
|
* ausschlie�lich von <code>MyCompiler.init()</code> aufgerufen werden!!!
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.deleteRegistry.26839.definition
|
// ino.method.deleteRegistry.26839.definition
|
||||||
@ -262,12 +262,12 @@ public class TypePlaceholder extends ObjectType
|
|||||||
// ino.method.clone.26842.defdescription type=javadoc
|
// ino.method.clone.26842.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die
|
* 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/>
|
* muss.<br/>
|
||||||
* Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich
|
* 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.
|
* benachrichtigt, d.h. ihre TypePlaceholders werden nicht substituiert.
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -283,7 +283,7 @@ public class TypePlaceholder extends ObjectType
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @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
|
@Override
|
||||||
public String get_Name(){
|
public String get_Name(){
|
||||||
@ -300,15 +300,15 @@ public class TypePlaceholder extends ObjectType
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////
|
||||||
// Spezialfunktionen, f�r makeFC() und unify()
|
// Spezialfunktionen, f�r makeFC() und unify()
|
||||||
// Sollten sonst nicht aufgerufen werden...
|
// Sollten sonst nicht aufgerufen werden...
|
||||||
///////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////
|
||||||
// ino.method.backdoorFresh.26848.defdescription type=javadoc
|
// ino.method.backdoorFresh.26848.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Backdoor-Hilfsfunktion, die f�r <code>makeFC()</code> und <code>unify()</code>
|
* Backdoor-Hilfsfunktion, die f�r <code>makeFC()</code> und <code>unify()</code>
|
||||||
* ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen
|
* ben�tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen
|
||||||
* werden nicht registriert und sind v�llig losgel�st vom abstrakten Syntaxbaum.
|
* werden nicht registriert und sind v�llig losgel�st vom abstrakten Syntaxbaum.
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return Eine neue <code>TypePlaceholder</code>
|
* @return Eine neue <code>TypePlaceholder</code>
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -332,14 +332,14 @@ public class TypePlaceholder extends ObjectType
|
|||||||
|
|
||||||
// ino.method.backdoorSetName.26851.defdescription type=javadoc
|
// ino.method.backdoorSetName.26851.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Backdoor-Hilfsfunktion, die f�r <code>makeFC()</code> und <code>unify()</code>
|
* Backdoor-Hilfsfunktion, die f�r <code>makeFC()</code> und <code>unify()</code>
|
||||||
* ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.<br/>
|
* ben�tigt wird, um den Namen eines TypePlaceholders zu ver�ndern.<br/>
|
||||||
* ACHTUNG: Diese <code>TypePlaceholder</code> darf nicht Teil des abstrakten
|
* ACHTUNG: Diese <code>TypePlaceholder</code> darf nicht Teil des abstrakten
|
||||||
* Syntaxbaumes sein!!! Es muss sicher gestellt werden, dass die betreffende
|
* Syntaxbaumes sein!!! Es muss sicher gestellt werden, dass die betreffende
|
||||||
* <code>TypePlaceholder</code> nicht �ber die Methode <code>fresh()</code>,
|
* <code>TypePlaceholder</code> nicht �ber die Methode <code>fresh()</code>,
|
||||||
* sondern �ber <code>backdoorCreate()</code> oder <code>backdoorClone()</code>
|
* sondern �ber <code>backdoorCreate()</code> oder <code>backdoorClone()</code>
|
||||||
* erzeugt worden ist.
|
* erzeugt worden ist.
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @param varName Der Name des zu erzeugenden <code>TypePlaceholders</code>
|
* @param varName Der Name des zu erzeugenden <code>TypePlaceholders</code>
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -354,10 +354,10 @@ public class TypePlaceholder extends ObjectType
|
|||||||
|
|
||||||
// ino.method.backdoorCreate.26854.defdescription type=javadoc
|
// ino.method.backdoorCreate.26854.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Backdoor-Hilfsfunktion, die f�r <code>makeFC()</code> und <code>unify()</code>
|
* Backdoor-Hilfsfunktion, die f�r <code>makeFC()</code> und <code>unify()</code>
|
||||||
* ben�tigt wird, zum Erzeugen eines <code>TypePlaceholders</code>, der nicht in
|
* ben�tigt wird, zum Erzeugen eines <code>TypePlaceholders</code>, der nicht in
|
||||||
* der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit v�llig
|
* der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit v�llig
|
||||||
* losgel�st vom abstrakten Syntaxbaum. <br>Author: J�rg B�uerle
|
* losgel�st vom abstrakten Syntaxbaum. <br>Author: J�rg B�uerle
|
||||||
* @param name
|
* @param name
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -387,9 +387,9 @@ public class TypePlaceholder extends ObjectType
|
|||||||
public JavaCodeResult printJavaCode(ResultSet resultSet) {
|
public JavaCodeResult printJavaCode(ResultSet resultSet) {
|
||||||
Type equalType = resultSet.getTypeEqualTo(this);
|
Type equalType = resultSet.getTypeEqualTo(this);
|
||||||
if(equalType == null || equalType.equals(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());
|
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);
|
ret.addUnresolvedTPH(this);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -401,9 +401,9 @@ public class TypePlaceholder extends ObjectType
|
|||||||
* Berechnet die InsertPoints dieses TypePlaceholders.
|
* Berechnet die InsertPoints dieses TypePlaceholders.
|
||||||
* Alle an diesem TypePlaceholder registrierten ITypeReplacementListener werden darauf kontrolliert,
|
* Alle an diesem TypePlaceholder registrierten ITypeReplacementListener werden darauf kontrolliert,
|
||||||
* ob sie von TypeInsertable erben.
|
* 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.
|
* 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
|
* @return
|
||||||
* @see TypeInsertPoint
|
* @see TypeInsertPoint
|
||||||
*/
|
*/
|
||||||
|
@ -26,7 +26,7 @@ public class Void extends RefType
|
|||||||
|
|
||||||
// ino.method.equals.26864.defdescription type=javadoc
|
// ino.method.equals.26864.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J�rg B�uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param Object
|
* @param Object
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -57,7 +57,7 @@ public class Void extends RefType
|
|||||||
|
|
||||||
// ino.method.clone.26867.defdescription type=javadoc
|
// ino.method.clone.26867.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br>Author: J�rg B�uerle
|
* <br>Author: J�rg B�uerle
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -77,7 +77,7 @@ public class Void extends RefType
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Type checkTYPE(TypeAssumptions ass, SyntaxTreeNode method) {
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ public class WildcardType extends Type{
|
|||||||
protected ObjectType innerType = null;
|
protected ObjectType innerType = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Standard Konstruktor für eine Wildcard
|
* Standard Konstruktor für eine Wildcard
|
||||||
*/
|
*/
|
||||||
public WildcardType(ObjectType innerType, SyntaxTreeNode parent, int offset)
|
public WildcardType(ObjectType innerType, SyntaxTreeNode parent, int offset)
|
||||||
{
|
{
|
||||||
@ -31,8 +31,8 @@ public class WildcardType extends Type{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt String Entsprechung zurück.
|
* Gibt String Entsprechung zurück.
|
||||||
*/
|
*/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
@ -40,8 +40,8 @@ public class WildcardType extends Type{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt einen Klon der Wildcard zurück.
|
* Gibt einen Klon der Wildcard zurück.
|
||||||
*/
|
*/
|
||||||
public WildcardType clone()
|
public WildcardType clone()
|
||||||
{
|
{
|
||||||
@ -49,9 +49,9 @@ public class WildcardType extends Type{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt die passende FreshWildcardType Klasse zurück.
|
* Gibt die passende FreshWildcardType Klasse zurück.
|
||||||
* Wird für CaptureConversion verwendet
|
* Wird für CaptureConversion verwendet
|
||||||
*/
|
*/
|
||||||
public FreshWildcardType GetFreshWildcardType()
|
public FreshWildcardType GetFreshWildcardType()
|
||||||
{
|
{
|
||||||
@ -59,8 +59,8 @@ public class WildcardType extends Type{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Die Allgemeine Wildcard enthält keinen Typen.
|
* Die Allgemeine Wildcard enthält keinen Typen.
|
||||||
*/
|
*/
|
||||||
public Type GetWildcardType()
|
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.
|
* Setzt den Typ in der Wildcard, Allgemeine Wildcard hat aber keinen Typen.
|
||||||
* @param T - Type to be set
|
* @param T - Type to be set
|
||||||
*/
|
*/
|
||||||
|
@ -15,7 +15,7 @@ import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption;
|
|||||||
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
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); }"
|
* "interface FunN<R,T1, T2, ... ,TN> { R apply(T1 arg1, T2 arg2, ... , TN argN); }"
|
||||||
* @author A10023 - Andreas Stadelmeier
|
* @author A10023 - Andreas Stadelmeier
|
||||||
*
|
*
|
||||||
@ -30,7 +30,7 @@ public class FunN extends RefType {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @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.
|
* Generiert einen RefType auf eine FunN<R,T1,...,TN> - Klasse.
|
||||||
* @param R
|
* @param R
|
||||||
* @param T
|
* @param T
|
||||||
@ -73,8 +73,8 @@ public class FunN extends RefType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Muss nach jeder Änderung von T oder R aufgerufen werden.
|
* 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.
|
* Dabei werden bestimmte, von RefType geerbte, Parameter angepasst. Dies ist wichtig für den Typinferenzalgorithmus.
|
||||||
*/
|
*/
|
||||||
private void calculateNewParalist(){
|
private void calculateNewParalist(){
|
||||||
Menge<Type> t = new Menge<Type>();
|
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
|
@Override
|
||||||
public FunN clone()
|
public FunN clone()
|
||||||
{
|
{
|
||||||
|
@ -20,13 +20,13 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
|||||||
*/
|
*/
|
||||||
public class FunNInterface extends Class{
|
public class FunNInterface extends Class{
|
||||||
//TODO: Diese Klasse sollte eigentlich von Interface erben
|
//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;
|
//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>
|
* @param N - Die Anzahl der Parameter der apply-Methode. Beispiel N = 1 ergibt <code>R apply(T1 par1);</code>
|
||||||
*/
|
*/
|
||||||
public FunNInterface(int N) {
|
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
|
* @return
|
||||||
*/
|
*/
|
||||||
private FunNMethod getApplyFunction(){
|
private FunNMethod getApplyFunction(){
|
||||||
|
@ -18,12 +18,12 @@ public class FunNMethod extends Method{
|
|||||||
*/
|
*/
|
||||||
public FunNMethod(Menge<? extends Type> paralist){
|
public FunNMethod(Menge<? extends Type> paralist){
|
||||||
super(0); //Hat keinen Offset, da nur theoretisch gedachte Methode
|
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.setType(paralist.firstElement());
|
||||||
this.set_DeclId(new DeclId("apply"));
|
this.set_DeclId(new DeclId("apply"));
|
||||||
ParameterList pl = new ParameterList();
|
ParameterList pl = new ParameterList();
|
||||||
Menge<FormalParameter> fpList = new Menge<FormalParameter>();
|
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);
|
DeclId paramName = new DeclId("T"+i);
|
||||||
FormalParameter parameter = new FormalParameter(paramName);
|
FormalParameter parameter = new FormalParameter(paramName);
|
||||||
//parameter.setType(TypePlaceholder.fresh(parameter));
|
//parameter.setType(TypePlaceholder.fresh(parameter));
|
||||||
@ -43,7 +43,7 @@ public class FunNMethod extends Method{
|
|||||||
this.set_DeclId(new DeclId("apply"));
|
this.set_DeclId(new DeclId("apply"));
|
||||||
ParameterList pl = new ParameterList();
|
ParameterList pl = new ParameterList();
|
||||||
Menge<FormalParameter> fpList = new Menge<FormalParameter>();
|
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);
|
DeclId paramName = new DeclId("T"+i);
|
||||||
FormalParameter parameter = new FormalParameter(paramName);
|
FormalParameter parameter = new FormalParameter(paramName);
|
||||||
parameter.setType(TypePlaceholder.fresh(parameter));
|
parameter.setType(TypePlaceholder.fresh(parameter));
|
||||||
|
@ -24,7 +24,7 @@ public class JavaCodeResult{
|
|||||||
|
|
||||||
public JavaCodeResult attach(JavaCodeResult javaCodeResult){
|
public JavaCodeResult attach(JavaCodeResult javaCodeResult){
|
||||||
this.javaCode += javaCodeResult.getJavaCode();
|
this.javaCode += javaCodeResult.getJavaCode();
|
||||||
//Alle TPH anfügen:
|
//Alle TPH anfügen:
|
||||||
for(TypePlaceholder tph : javaCodeResult.getUnresolvedTPH())this.addUnresolvedTPH(tph);
|
for(TypePlaceholder tph : javaCodeResult.getUnresolvedTPH())this.addUnresolvedTPH(tph);
|
||||||
return this;
|
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.
|
* Diese TPHs stehen dadurch im JavaCode als Variablennamen ohne zugeordnetem Typ.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@ -13,7 +13,7 @@ public abstract class KarthesischesProdukt {
|
|||||||
ret.add(v);
|
ret.add(v);
|
||||||
}
|
}
|
||||||
return ret;
|
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);
|
return berechneKarthesischesProdukt(m1, null);
|
||||||
}
|
}
|
||||||
@ -45,7 +45,7 @@ public abstract class KarthesischesProdukt {
|
|||||||
ret = new Menge<Menge<M>>();
|
ret = new Menge<Menge<M>>();
|
||||||
ret.addAll( karthesischesProdukt2(m1.firstElement(), m2) );
|
ret.addAll( karthesischesProdukt2(m1.firstElement(), m2) );
|
||||||
}else{
|
}else{
|
||||||
throw new TypinferenzException("Der übergebene Vektor m1 ist leer.");
|
throw new TypinferenzException("Der übergebene Vektor m1 ist leer.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;*/
|
return ret;*/
|
||||||
@ -53,10 +53,10 @@ public abstract class KarthesischesProdukt {
|
|||||||
|
|
||||||
private static <M> Menge<Menge<M>> karthesischesProdukt(Menge<M> m1, Menge<M> m2){
|
private static <M> Menge<Menge<M>> karthesischesProdukt(Menge<M> m1, Menge<M> m2){
|
||||||
Menge<Menge<M>> ret = new Menge<Menge<M>>();
|
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:
|
if(m2.size() == 0){//Sonderfall, m2 ist leer:
|
||||||
ret.add(m1);
|
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){
|
//for(M o1 : m1){
|
||||||
|
@ -15,7 +15,7 @@ public class OderConstraint extends OderMenge<Pair>{
|
|||||||
private final static Logger logger = Logger.getLogger(OderConstraint.class.getName());
|
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 p1
|
||||||
* @param p2
|
* @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
|
* @return
|
||||||
|
|
||||||
public Menge<Pair> getConstraintPairs(){
|
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 p1
|
||||||
* @param p2
|
* @param p2
|
||||||
*/
|
*/
|
||||||
@ -64,7 +64,7 @@ public class OderConstraint extends OderMenge<Pair>{
|
|||||||
this.addItems(methodConstraint);//oderConstraintPairs.add(methodConstraint);
|
this.addItems(methodConstraint);//oderConstraintPairs.add(methodConstraint);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Funktionalität für filter implementieren
|
//TODO: Funktionalität für filter implementieren
|
||||||
void filterWrongConstraints(Unifier unifier) {
|
void filterWrongConstraints(Unifier unifier) {
|
||||||
/*
|
/*
|
||||||
Menge<UndConstraint> filteredConstraints = new Menge<>();
|
Menge<UndConstraint> filteredConstraints = new Menge<>();
|
||||||
|
@ -43,15 +43,15 @@ public class Pair
|
|||||||
// ino.attribute.bSubst.26552.decldescription type=line
|
// ino.attribute.bSubst.26552.decldescription type=line
|
||||||
// false <--> vorinitialisierter Wert
|
// false <--> vorinitialisierter Wert
|
||||||
// true <--> Dieses Paar entstand durch reduce1-Regel (=.)
|
// 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
|
// Nur noch reduce2-Regel anwendbar
|
||||||
|
|
||||||
// luar 15-04-2007
|
// 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.
|
// Deshalb wurde der boolean durch einen Enum ersetzt.
|
||||||
// Smaller <--> vorinitialisierter Wert
|
// Smaller <--> vorinitialisierter Wert
|
||||||
// SmallerExtends <--> Kleiner extends (wie vorinitialisiert, nur mit einschluss der Wildcard)
|
// 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.end
|
||||||
|
|
||||||
// ino.attribute.bSubst.26552.declaration
|
// ino.attribute.bSubst.26552.declaration
|
||||||
@ -301,7 +301,7 @@ public class Pair
|
|||||||
|
|
||||||
// ino.method.equals.26588.defdescription type=javadoc
|
// ino.method.equals.26588.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* <br/>Author: J�rg B�uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param obj
|
* @param obj
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -321,8 +321,8 @@ public class Pair
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Überprüft ob die Paare die gleichen Instanzen sind.
|
* Überprüft ob die Paare die gleichen Instanzen sind.
|
||||||
*/
|
*/
|
||||||
public boolean instanzeEquals(Object obj)
|
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.
|
* Abfrage, ob Operator vom Typ Equal ist.
|
||||||
*/
|
*/
|
||||||
public boolean OperatorEqual()
|
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.
|
* Abfrage, ob Operator vom Typ Smaller ist.
|
||||||
*/
|
*/
|
||||||
public boolean OperatorSmaller()
|
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.
|
* Abfrage, ob Operator vom Typ SmallerExtends ist.
|
||||||
*/
|
*/
|
||||||
public boolean OperatorSmallerExtends()
|
public boolean OperatorSmallerExtends()
|
||||||
@ -357,8 +357,8 @@ public class Pair
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Gibt den Operator zurück.
|
* Gibt den Operator zurück.
|
||||||
*/
|
*/
|
||||||
public PairOperator GetOperator()
|
public PairOperator GetOperator()
|
||||||
{
|
{
|
||||||
@ -366,7 +366,7 @@ public class Pair
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: Arne Lüdtke<br/>
|
* Author: Arne Lüdtke<br/>
|
||||||
* Setzt den Operator
|
* Setzt den Operator
|
||||||
* @param operator - Operator to set.
|
* @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.
|
* Erzeugt einen Klon des Paares.
|
||||||
*/
|
*/
|
||||||
public Pair clone()
|
public Pair clone()
|
||||||
@ -385,8 +385,8 @@ public class Pair
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück.
|
* Gibt eine Liste aller TypePlaceholder die in diesem Pair enthalten sind zurück.
|
||||||
* (Immer zwischen 0 und 2 Stück ;P)
|
* (Immer zwischen 0 und 2 Stück ;P)
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Menge<TypePlaceholder> getTypePlaceholder() {
|
public Menge<TypePlaceholder> getTypePlaceholder() {
|
||||||
|
@ -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
|
* @param type
|
||||||
* @return
|
* @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.
|
* Es spielt keine Rolle in welchem Kontext der Typ im ResultSet auftaucht.
|
||||||
* @param tA1
|
* @param tA1
|
||||||
* @return true, falls der gesuchte Typ enthalten ist.
|
* @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.
|
* Auch alle Constraints, welche wiederum mit den gesammelten Constraints in Verbindung stehen werden gesammelt.
|
||||||
* @return
|
* @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
|
* @param unresolvedTPH
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@ -11,9 +11,9 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Beschreibung von Herrn Plümicke:
|
* Beschreibung von Herrn Plümicke:
|
||||||
* "The set of constraints consists of constraints of the form θ R θ' , where θ and
|
* "The set of constraints consists of constraints of the form θ R θ' , where θ and
|
||||||
* θ' are Java types and R (R ∈ { < , <? , = }) is a subtyping condition."
|
* θ' are Java types and R (R â { < , <? , = }) is a subtyping condition."
|
||||||
*
|
*
|
||||||
* @author AI10023 - Andreas Stadelmeier
|
* @author AI10023 - Andreas Stadelmeier
|
||||||
*
|
*
|
||||||
@ -21,7 +21,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class SingleConstraint extends EinzelElement<Pair>{
|
public class SingleConstraint extends EinzelElement<Pair>{
|
||||||
//private Pair constraintPair; //entspricht θ condition θ'
|
//private Pair constraintPair; //entspricht θ condition θ'
|
||||||
//private R condition; //entspricht der condition (R)
|
//private R condition; //entspricht der condition (R)
|
||||||
|
|
||||||
public SingleConstraint(ConstraintType p1, ConstraintType p2){
|
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(){
|
public Menge<Pair> getConstraintPairs(){
|
||||||
Menge<Pair> ret = new Menge<Pair>();
|
Menge<Pair> ret = new Menge<Pair>();
|
||||||
ret.add(constraintPair);
|
ret.add(constraintPair);
|
||||||
@ -50,7 +50,7 @@ public class SingleConstraint extends EinzelElement<Pair>{
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public void addConstraint(ConstraintPair toAdd){
|
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 p1 = toAdd.getPair().TA1;
|
||||||
Type p2 = toAdd.getPair().TA2;
|
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((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");//
|
//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(!(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(!(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)))
|
//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");
|
// 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");
|
//if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder))throw new DebugException("Fehler: "+p2+" kann nicht in TPH oder RefType umgewandelt werden");
|
||||||
|
@ -11,11 +11,11 @@ public interface TypeInsertable extends Typeable, IItemWithOffset {
|
|||||||
public String getIdentifier();
|
public String getIdentifier();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Errechnet den TypeInsertPoint für das TypeInsertable.
|
* Errechnet den TypeInsertPoint für das TypeInsertable.
|
||||||
* TypeInsertPoints sollten nur über diese Funktion erstellt werden.
|
* TypeInsertPoints sollten nur über diese Funktion erstellt werden.
|
||||||
* @param tph
|
* @param tph
|
||||||
* @param resultSet
|
* @param resultSet
|
||||||
* @return - kann auch null zurückgeben.
|
* @return - kann auch null zurückgeben.
|
||||||
*/
|
*/
|
||||||
public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, ResultSet resultSet);
|
public TypeInsertPoint createTypeInsertPoint(TypePlaceholder tph, ResultSet resultSet);
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ public interface Typeable {
|
|||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Jede Expression und jedes Statement muss im Zuge des Typinferenzalgorithmus das Interfece Typable einbinden.
|
* 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.
|
* Dabei kann auch eine FreshTypeVariable als Typ vergeben werden.
|
||||||
* @param typ Der Typ der Typable-Expression/Statement
|
* @param typ Der Typ der Typable-Expression/Statement
|
||||||
*/
|
*/
|
||||||
|
@ -19,12 +19,12 @@ import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet;
|
|||||||
|
|
||||||
// ino.class.CTypeReconstructionResult.27238.description type=javadoc
|
// ino.class.CTypeReconstructionResult.27238.description type=javadoc
|
||||||
/**
|
/**
|
||||||
* Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche
|
* Diese Container-Klasse kapselt alle Ergebniswerte f�r eine m�gliche
|
||||||
* Typkombination einer Klasse und deren Methoden sowie lokalen Variablen. Eine
|
* Typkombination einer Klasse und deren Methoden sowie lokalen Variablen. Eine
|
||||||
* Instanz dieser Klasse steht f�r genau eine m�gliche Typkombination.<br/>
|
* Instanz dieser Klasse steht f�r genau eine m�gliche Typkombination.<br/>
|
||||||
* Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die
|
* Objekte dieser Klasse werden vom Typrekonstruktionsalgorithmus �ber die
|
||||||
* Compiler-API zur�ckgegeben.
|
* Compiler-API zur�ckgegeben.
|
||||||
* @author J�rg B�uerle
|
* @author J�rg B�uerle
|
||||||
* @version $Date: 2013/09/22 20:13:02 $
|
* @version $Date: 2013/09/22 20:13:02 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -41,7 +41,7 @@ public class TypeinferenceResultSet
|
|||||||
* Das unifizierte ConstaraintsSet
|
* Das unifizierte ConstaraintsSet
|
||||||
*/
|
*/
|
||||||
private ResultSet unifiedConstraints;
|
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
|
// ino.method.CTypeReconstructionResult.27256.definition
|
||||||
public TypeinferenceResultSet(de.dhbwstuttgart.syntaxtree.Class inferedClass, Menge<Pair> constraints, ResultSet unifiedConstraints)
|
public TypeinferenceResultSet(de.dhbwstuttgart.syntaxtree.Class inferedClass, Menge<Pair> constraints, ResultSet unifiedConstraints)
|
||||||
@ -57,7 +57,7 @@ public class TypeinferenceResultSet
|
|||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Anhand des Syntaxbaums errechnet der Typinferenzalgorithmus ein Set von Constraints.
|
* 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>
|
* Zum abrufen der Unifizierten Constraints siehe <code>getUnifiedConstraints()</code>
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -67,8 +67,8 @@ public class TypeinferenceResultSet
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
* Nach dem Durchführen des Interferenzalgorithmus von Lambda 8 entsteht für jede Lösung ein Set con Constraints.
|
* 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.
|
* Diese Constraints haben bereits den Unify-Algorithmus durchlaufen und weißen die errechneten Typen den Typeplacholdern zu.
|
||||||
* @return Das fertige ConstraintsSet dieser CTypeRecunstructionResult
|
* @return Das fertige ConstraintsSet dieser CTypeRecunstructionResult
|
||||||
*/
|
*/
|
||||||
public ResultSet getUnifiedConstraints() {
|
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
|
* @author Andreas Stadelmeier, a10023
|
||||||
*/
|
*/
|
||||||
public Type getTypeOfPlaceholder(TypePlaceholder tph){
|
public Type getTypeOfPlaceholder(TypePlaceholder tph){
|
||||||
@ -86,7 +86,7 @@ public class TypeinferenceResultSet
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Jedes TypeReconstructionResultSet entstand bei der Typinferierung einer Klasse.
|
* 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(){
|
public de.dhbwstuttgart.syntaxtree.Class getInterferedClass(){
|
||||||
return this.ownerOfResultSet;
|
return this.ownerOfResultSet;
|
||||||
@ -98,8 +98,8 @@ public class TypeinferenceResultSet
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext
|
* Berechnet alle möglichen Punkte zum Einsetzen eines Typs im Quelltext
|
||||||
* Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet.
|
* Dabei entstehen TypeInsertSets. Für jeden gesammelten TypeInsertPoint werden alle Abhängigkeiten berechnet.
|
||||||
*
|
*
|
||||||
* @return
|
* @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.
|
* Dabei wird die codegen-Methode der inferierten Klasse mit diesem ResultSet aufgerufen.
|
||||||
*/
|
*/
|
||||||
public void codegen(){
|
public void codegen(){
|
||||||
|
@ -7,7 +7,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type;
|
|||||||
import de.dhbwstuttgart.typeinference.unify.Unifier;
|
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
|
* @author janulrich
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -34,7 +34,7 @@ public class UndMenge<A> implements KomplexeMenge<A>{
|
|||||||
ret = km.cartesianProduct();
|
ret = km.cartesianProduct();
|
||||||
}else{
|
}else{
|
||||||
Menge<Menge<A>> cartesianProduct = new Menge<>();
|
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>();
|
Menge<A> undElement = new Menge<A>();
|
||||||
undElement.addAll(cloner.deepClone(r));
|
undElement.addAll(cloner.deepClone(r));
|
||||||
undElement.addAll(m);
|
undElement.addAll(m);
|
||||||
|
@ -11,7 +11,7 @@ public class Assumption {
|
|||||||
private TypeInsertable typable;
|
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(){
|
protected Assumption(){
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ package de.dhbwstuttgart.typeinference.assumptions;
|
|||||||
import de.dhbwstuttgart.syntaxtree.FormalParameter;
|
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
|
* @author janulrich
|
||||||
*
|
*
|
||||||
|
@ -24,7 +24,7 @@ import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Eine Sammlung von TypeAssumptions.
|
* 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
|
* @author janulrich
|
||||||
*
|
*
|
||||||
* Es gibt verschiedene Assumptions:
|
* Es gibt verschiedene Assumptions:
|
||||||
@ -52,7 +52,7 @@ public class TypeAssumptions {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Dieser Konstruktor setzt bei der Initialisierung auch den Wert von "this"
|
* 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(){
|
public TypeAssumptions(){
|
||||||
//this.thisClassName = klassenname;
|
//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
|
* @param withName
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -80,7 +80,7 @@ public class TypeAssumptions {
|
|||||||
* Liefert den Typ einer Feldvariable der Klasse inClass
|
* Liefert den Typ einer Feldvariable der Klasse inClass
|
||||||
* @param withName
|
* @param withName
|
||||||
* @param inClass
|
* @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){
|
public Type getTypeOfFieldVar(String withName, Class inClass){
|
||||||
for(FieldAssumption fa : this.getFieldVars(withName)){
|
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
|
* @param withName
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -121,7 +121,7 @@ public class TypeAssumptions {
|
|||||||
* Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern.
|
* Sucht nach Assumptions zu einer Methode mit dem Namen methodName und parameterCount Parametern.
|
||||||
* @param methodName
|
* @param methodName
|
||||||
* @param i Die Parameter, welche die Methode verarbeiten soll
|
* @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){
|
public Menge<MethodAssumption> getMethodAssumptions(String methodName, int parameterCount){
|
||||||
Menge<MethodAssumption> ret = new Menge<MethodAssumption>();
|
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.
|
//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:
|
//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();
|
//CMethodTypeAssumption funNAssumption = new FunN(parameterCount).toCMethodTypeAssumption();
|
||||||
// MethodAssumption funNAssumption = new MethodAssumption(new FunNMethod(parameterCount), new FunNInterface(parameter));
|
// MethodAssumption funNAssumption = new MethodAssumption(new FunNMethod(parameterCount), new FunNInterface(parameter));
|
||||||
// ret.add(funNAssumption);
|
// 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.
|
* 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.
|
* In den Assumptions wird dann in der Reihenfolge LocalVarAssumptions, FieldAssumption nach dem übergebenen Variablennamen gesucht.
|
||||||
* @param variableName - der Identifier der gesuchten Variablen
|
* @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.
|
* @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.
|
* @return - Der Typ für diesen Identifier, oder null, falls kein Typ vorliegt.
|
||||||
*/
|
*/
|
||||||
public Type getVarType(String variableName, Class inScope){
|
public Type getVarType(String variableName, Class inScope){
|
||||||
//Zuerst die Parameter durchsuchen
|
//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
|
* @param className
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -280,7 +280,7 @@ public class TypeAssumptions {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Kontrolliert den vom Parser gesetzten Typ.
|
* Kontrolliert den vom Parser gesetzten Typ.
|
||||||
* Erweitert dessen Bezeichnung, wenn nötig.
|
* Erweitert dessen Bezeichnung, wenn nötig.
|
||||||
* @param t
|
* @param t
|
||||||
* @return null, falls der Typ nicht vorhanden ist.
|
* @return null, falls der Typ nicht vorhanden ist.
|
||||||
*/
|
*/
|
||||||
@ -305,14 +305,14 @@ public class TypeAssumptions {
|
|||||||
match = name.equals(typName);
|
match = name.equals(typName);
|
||||||
if(match && t instanceof RefType){
|
if(match && t instanceof RefType){
|
||||||
RefType tr = (RefType)t;
|
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){
|
if(tr.get_ParaList()!=null && tr.getParaList().size()>0){
|
||||||
ret.set_ParaList(tr.getParaList());
|
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<>();
|
Menge<Type> parameterList = new Menge<>();
|
||||||
if(ret.get_ParaList()!=null)for(Type param : ret.get_ParaList()){
|
if(ret.get_ParaList()!=null)for(Type param : ret.get_ParaList()){
|
||||||
ConstraintType ct = param.TYPE(this, inNode);
|
ConstraintType ct = param.TYPE(this, inNode);
|
||||||
@ -334,7 +334,7 @@ public class TypeAssumptions {
|
|||||||
GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext();
|
GTVDeclarationContext gtvDeclNode = ass.getAssumedType().getDeclarationContext();
|
||||||
//Der GTV-Kontext von inNOde
|
//Der GTV-Kontext von inNOde
|
||||||
GTVDeclarationContext gtvNode = inNode.getGTVDeclarationContext();
|
GTVDeclarationContext gtvNode = inNode.getGTVDeclarationContext();
|
||||||
//Überprüfungen (siehe Dokumentation):
|
//Überprüfungen (siehe Dokumentation):
|
||||||
if(gtvDeclNode.isClass()){ //GTV wurde in Klasse definiert
|
if(gtvDeclNode.isClass()){ //GTV wurde in Klasse definiert
|
||||||
if(! gtvNode.getParentClass().equals(gtvDeclNode))sameContext = false;
|
if(! gtvNode.getParentClass().equals(gtvDeclNode))sameContext = false;
|
||||||
}else{ //GTV wurde in Methode oder Feld definiert:
|
}else{ //GTV wurde in Methode oder Feld definiert:
|
||||||
@ -353,7 +353,7 @@ public class TypeAssumptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(t.getName() == null)throw new DebugException(t.toString());
|
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();
|
String name = t.getName().toString();
|
||||||
switch(name){
|
switch(name){
|
||||||
case "int":
|
case "int":
|
||||||
@ -374,8 +374,8 @@ public class TypeAssumptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fügt eine TypAssumption an.
|
* Fügt eine TypAssumption an.
|
||||||
* Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind.
|
* Dadurch wird ein Pool von Typen aufgebaut, welche überhaupt erlaubt sind.
|
||||||
* Wird genutzt um vom Parser eingelesene Typen auf ihre Korrektheit zu kontrollieren.
|
* Wird genutzt um vom Parser eingelesene Typen auf ihre Korrektheit zu kontrollieren.
|
||||||
* @param classAssumption
|
* @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
|
* @param genericTypeVar
|
||||||
*/
|
*/
|
||||||
public void addGenericVarAssumption(
|
public void addGenericVarAssumption(
|
||||||
@ -410,13 +410,13 @@ public class TypeAssumptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Type checkType(RefType type, SyntaxTreeNode parent) {
|
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
|
type.setName(t.getType().getName()); //Und diesen auf den Typ anwenden
|
||||||
return t.getType();
|
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.
|
* Dabei werden alle Konstruktoren nach diesem Typ durchsucht. Denn jede Klasse hat einen Konstruktor und der muss in den TypeAssumptions vorhanden sein.
|
||||||
* @param t
|
* @param t
|
||||||
* @return
|
* @return
|
||||||
|
@ -4,8 +4,8 @@ import de.dhbwstuttgart.core.IItemWithOffset;
|
|||||||
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Eine RuntimeException, welche bei einem Fehler während des Typinferenzalgorithmus ausgelöst wird.
|
* 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.
|
* Dies wird zum Beispiel durch Programmierfehler in der Java-Eingabedatei ausgelöst.
|
||||||
* @author Andreas Stadelmeier, a10023
|
* @author Andreas Stadelmeier, a10023
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -17,9 +17,9 @@ import de.dhbwstuttgart.typeinference.TypeInsertable;
|
|||||||
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
|
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ein InsertPoint für Generische Variablen
|
* Ein InsertPoint für Generische Variablen
|
||||||
* Wird beim Einsetzen eines TIP generiert.
|
* 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
|
* @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
|
* @return
|
||||||
*/
|
*/
|
||||||
public String getTypeInsertString() {
|
public String getTypeInsertString() {
|
||||||
@ -55,7 +55,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint {
|
|||||||
@Override
|
@Override
|
||||||
public int compareTo(SourcePatchPoint arg0) {
|
public int compareTo(SourcePatchPoint arg0) {
|
||||||
int ret = super.compareTo(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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ class GenericVarPatch {
|
|||||||
private Menge<TypePlaceholder> usedTPHs;
|
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
|
* @param p
|
||||||
*/
|
*/
|
||||||
public void add(Pair p){
|
public void add(Pair p){
|
||||||
@ -112,10 +112,10 @@ class GenericVarPatch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getInsertString(ResultSet rs){
|
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.
|
* Dies geht mit der momentanen Variante nur für die genericVarDeclarations.
|
||||||
* Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind,
|
* Es kann passieren, dass bei den genericVarExtendDeclarations extend-Verknüpfungen enthalten sind,
|
||||||
* welche nicht im eingesetzten Typ auftauchen, aber dennoch notwendig sind.
|
* welche nicht im eingesetzten Typ auftauchen, aber dennoch notwendig sind.
|
||||||
*/
|
*/
|
||||||
Menge<GenericVarDeclarationPatch> tmpGenVars = new Menge<>();
|
Menge<GenericVarDeclarationPatch> tmpGenVars = new Menge<>();
|
||||||
@ -126,7 +126,7 @@ class GenericVarPatch {
|
|||||||
}
|
}
|
||||||
this.genericVarDeclarations = tmpGenVars;
|
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 = "";
|
String ret = "";
|
||||||
Iterator<GenericVarDeclarationPatch> it1 = this.genericVarDeclarations.iterator();
|
Iterator<GenericVarDeclarationPatch> it1 = this.genericVarDeclarations.iterator();
|
||||||
boolean bereitsVorhanden = false;
|
boolean bereitsVorhanden = false;
|
||||||
@ -194,7 +194,7 @@ class GenericVarExtendsDeclarationPatch {
|
|||||||
private Pair genericPair;
|
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
|
* @param tph
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@ -14,7 +14,7 @@ import de.dhbwstuttgart.typeinference.TypeInsertable;
|
|||||||
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
|
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.
|
* Mehrere TypeInsertPoint's werden in einem TypInsertSet zusammengefasst.
|
||||||
* @author janulrich
|
* @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 fileContent - der Quelltext
|
||||||
* @param additionalOffset - Falls mehrere Typen in einen Quellcode eingesetzet werden muss die Verschiebung der Offsets mit einbezogen werden.
|
* @param additionalOffset - Falls mehrere Typen in einen Quellcode eingesetzet werden muss die Verschiebung der Offsets mit einbezogen werden.
|
||||||
* @return
|
* @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(){
|
public int getOffset(){
|
||||||
return this.getInsertPoint().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(){
|
public IItemWithOffset getInsertPoint(){
|
||||||
return this.point;
|
return this.point;
|
||||||
|
@ -19,9 +19,9 @@ import de.dhbwstuttgart.typeinference.ResultSet;
|
|||||||
import de.dhbwstuttgart.typeinference.TypeInsertable;
|
import de.dhbwstuttgart.typeinference.TypeInsertable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bündelt ein Set von TypeInsertPoints, welche zu einem TypeInferenceResultSet gehören.
|
* 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,
|
* 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.
|
* müssen alle mit ihr in Verbindung stehenden Typen ebenfalls eingesetzt werden.
|
||||||
* @author janulrich
|
* @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
|
* @param typeInsertPoint
|
||||||
* @return
|
* @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 tip
|
||||||
* @param fileContent
|
* @param fileContent
|
||||||
* @return
|
* @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 tip
|
||||||
* @param tpj
|
* @param tpj
|
||||||
*/
|
*/
|
||||||
@ -68,8 +68,8 @@ public class TypeInsertSet {
|
|||||||
/*
|
/*
|
||||||
* Ablauf:
|
* Ablauf:
|
||||||
* 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln.
|
* 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln.
|
||||||
* 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen)
|
* 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.
|
* 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen.
|
||||||
* 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind.
|
* 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind.
|
||||||
* 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2)
|
* 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2)
|
||||||
* 6. Alle unbekannten TPHs + Pairs als GenericTypeInsertPoint deklarieren.
|
* 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()){
|
for(Pair pair : pairs)for(Type t : pair.getTypes())for(TypePlaceholder tph : t.getInvolvedTypePlaceholder()){
|
||||||
if(!allTPHs.contains(tph)){
|
if(!allTPHs.contains(tph)){
|
||||||
allTPHs.add(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
|
* @param fileContent
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -160,7 +160,7 @@ public class TypeInsertSet {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param node
|
* @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){
|
public TypeInsertPoint getInsertPointFor(TypeInsertable node){
|
||||||
for(TypeInsertPoint point : points){
|
for(TypeInsertPoint point : points){
|
||||||
@ -179,14 +179,14 @@ public class TypeInsertSet {
|
|||||||
//Jeder TypeInsertPoint muss auch in equals vorkommen:
|
//Jeder TypeInsertPoint muss auch in equals vorkommen:
|
||||||
if(!equals.points.contains(point))
|
if(!equals.points.contains(point))
|
||||||
return false;
|
return false;
|
||||||
//... aber nicht öfter als 1x :
|
//... aber nicht öfter als 1x :
|
||||||
if(equals.points.lastIndexOf(point)!=equals.points.indexOf(point))return false;
|
if(equals.points.lastIndexOf(point)!=equals.points.indexOf(point))return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fügt TypeInsertPoints an
|
* Fügt TypeInsertPoints an
|
||||||
* @param insertPoints
|
* @param insertPoints
|
||||||
*/
|
*/
|
||||||
public void add(Menge<TypeInsertPoint> insertPoints) {
|
public void add(Menge<TypeInsertPoint> insertPoints) {
|
||||||
|
@ -30,7 +30,7 @@ import de.dhbwstuttgart.typeinference.Pair;
|
|||||||
* <code>TypePlaceholder</code> auf einen Substitutions-Typ ab. Instanzen dieser
|
* <code>TypePlaceholder</code> auf einen Substitutions-Typ ab. Instanzen dieser
|
||||||
* Klasse werden in der Regel aus
|
* Klasse werden in der Regel aus
|
||||||
* <code>Pair</code>-Objekten erzeugt.
|
* <code>Pair</code>-Objekten erzeugt.
|
||||||
* @author J<EFBFBD>rg B<EFBFBD>uerle
|
* @author J�rg B�uerle
|
||||||
* @version $Date: 2006/07/10 11:27:04 $
|
* @version $Date: 2006/07/10 11:27:04 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -74,7 +74,7 @@ public class CSubstitution
|
|||||||
// ino.method.CSubstitution.27021.body
|
// ino.method.CSubstitution.27021.body
|
||||||
{
|
{
|
||||||
if(!(unifier.TA1 instanceof TypePlaceholder)){
|
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_TypeVar = (TypePlaceholder)unifier.TA1;
|
||||||
m_Type = unifier.TA2;
|
m_Type = unifier.TA2;
|
||||||
@ -84,7 +84,7 @@ public class CSubstitution
|
|||||||
|
|
||||||
// ino.method.getType.27024.defdescription type=javadoc
|
// ino.method.getType.27024.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @return Returns the Type.
|
* @return Returns the Type.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -99,7 +99,7 @@ public class CSubstitution
|
|||||||
|
|
||||||
// ino.method.setType.27027.defdescription type=javadoc
|
// ino.method.setType.27027.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param type The Type to set.
|
* @param type The Type to set.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -114,7 +114,7 @@ public class CSubstitution
|
|||||||
|
|
||||||
// ino.method.getTypeVar.27030.defdescription type=javadoc
|
// ino.method.getTypeVar.27030.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @return Returns the TypeVar.
|
* @return Returns the TypeVar.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -129,7 +129,7 @@ public class CSubstitution
|
|||||||
|
|
||||||
// ino.method.setTypeVar.27033.defdescription type=javadoc
|
// ino.method.setTypeVar.27033.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @param typeVar The TypeVar to set.
|
* @param typeVar The TypeVar to set.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -184,7 +184,7 @@ public class CSubstitution
|
|||||||
// ino.method.applyUnifier.27048.defdescription type=javadoc
|
// ino.method.applyUnifier.27048.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Wendet den Unifier auf die rechte Seite dieser Substitution an.
|
* Wendet den Unifier auf die rechte Seite dieser Substitution an.
|
||||||
* <br/>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param unifier
|
* @param unifier
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -207,8 +207,8 @@ public class CSubstitution
|
|||||||
|
|
||||||
// ino.method.applySubstitution.27051.defdescription type=javadoc
|
// ino.method.applySubstitution.27051.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Wendet die <EFBFBD>bergebene Substitution rekursiv auf den <EFBFBD>bergebenen Typ an.
|
* Wendet die �bergebene Substitution rekursiv auf den �bergebenen Typ an.
|
||||||
* <br/>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param type Der zu untersuchende Typ
|
* @param type Der zu untersuchende Typ
|
||||||
* @param unifierSub Die anzuwendende Substitution
|
* @param unifierSub Die anzuwendende Substitution
|
||||||
* @return Den ermittelnden Typ
|
* @return Den ermittelnden Typ
|
||||||
|
@ -11,7 +11,7 @@ import de.dhbwstuttgart.syntaxtree.type.Type;
|
|||||||
* <code>TypePlaceholder</code> auf einen Substitutions-Typ ab. Instanzen dieser
|
* <code>TypePlaceholder</code> auf einen Substitutions-Typ ab. Instanzen dieser
|
||||||
* Klasse werden in der Regel aus
|
* Klasse werden in der Regel aus
|
||||||
* <code>Pair</code>-Objekten erzeugt.
|
* <code>Pair</code>-Objekten erzeugt.
|
||||||
* @author Martin Pl<EFBFBD>micke
|
* @author Martin Pl�micke
|
||||||
* @version $Date: 2006/06/13 10:37:32 $
|
* @version $Date: 2006/06/13 10:37:32 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -45,7 +45,7 @@ public class CSubstitutionGenVar extends CSubstitution
|
|||||||
|
|
||||||
// ino.method.getTypeVar.27070.defdescription type=javadoc
|
// ino.method.getTypeVar.27070.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Author: J<EFBFBD>rg B<EFBFBD>uerle<br/>
|
* Author: J�rg B�uerle<br/>
|
||||||
* @return Returns the TypeVar.
|
* @return Returns the TypeVar.
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -12,7 +12,7 @@ import de.dhbwstuttgart.typeinference.Pair;
|
|||||||
|
|
||||||
// ino.class.CSubstitutionSet.27471.description type=javadoc
|
// ino.class.CSubstitutionSet.27471.description type=javadoc
|
||||||
/**
|
/**
|
||||||
* @author J<EFBFBD>rg B<EFBFBD>uerle
|
* @author J�rg B�uerle
|
||||||
* @version $Date: 2013/03/27 18:29:34 $
|
* @version $Date: 2013/03/27 18:29:34 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -71,7 +71,7 @@ public class CSubstitutionSet extends CVectorSet<CSubstitution>
|
|||||||
// ino.method.applyUnifier.27487.defdescription type=javadoc
|
// ino.method.applyUnifier.27487.defdescription type=javadoc
|
||||||
/**
|
/**
|
||||||
* Wendet den Unifier auf die rechten Seiten alle Substitutionen an.
|
* Wendet den Unifier auf die rechten Seiten alle Substitutionen an.
|
||||||
* <br/>Author: J<EFBFBD>rg B<EFBFBD>uerle
|
* <br/>Author: J�rg B�uerle
|
||||||
* @param unifier
|
* @param unifier
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -9,7 +9,7 @@ import de.dhbwstuttgart.typeinference.Menge;
|
|||||||
|
|
||||||
// ino.class.CMengeSet.27519.description type=javadoc
|
// ino.class.CMengeSet.27519.description type=javadoc
|
||||||
/**
|
/**
|
||||||
* @author J�rg B�uerle
|
* @author J�rg B�uerle
|
||||||
* @version $Date: 2013/02/07 05:08:51 $
|
* @version $Date: 2013/02/07 05:08:51 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -85,9 +85,9 @@ public abstract class CVectorSet<E> extends CSet<E>
|
|||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fügt ein CMengeSet an!
|
* Fügt ein CMengeSet an!
|
||||||
* Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen)
|
* Es handelt sich um eine Vereinigung (es werden keine bereits vorhandenen Elemente übernommen)
|
||||||
* @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert)
|
* @param anotherSet Das hinzuzufügende CMengeSet (CSet wird ignoriert)
|
||||||
*/
|
*/
|
||||||
// ino.method.unite.27544.definition
|
// ino.method.unite.27544.definition
|
||||||
public void unite(CSet<E> anotherSet)
|
public void unite(CSet<E> anotherSet)
|
||||||
@ -99,7 +99,7 @@ public abstract class CVectorSet<E> extends CSet<E>
|
|||||||
}
|
}
|
||||||
CVectorSet<E> MengeSet = (CVectorSet<E>)anotherSet;
|
CVectorSet<E> MengeSet = (CVectorSet<E>)anotherSet;
|
||||||
|
|
||||||
// Elemente der anderen Menge hinzuf�gen:
|
// Elemente der anderen Menge hinzuf�gen:
|
||||||
Iterator<E> it = MengeSet.getIterator();
|
Iterator<E> it = MengeSet.getIterator();
|
||||||
while(it.hasNext()){
|
while(it.hasNext()){
|
||||||
E elem = it.next();
|
E elem = it.next();
|
||||||
|
@ -11,8 +11,8 @@ import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
|||||||
|
|
||||||
// ino.class.FC_TTO.28013.description type=javadoc
|
// ino.class.FC_TTO.28013.description type=javadoc
|
||||||
/**
|
/**
|
||||||
* Hilfsklasse f<EFBFBD>r den Unifizierungsalgorithmus
|
* Hilfsklasse f�r den Unifizierungsalgorithmus
|
||||||
* @author Martin Pl<EFBFBD>micke
|
* @author Martin Pl�micke
|
||||||
* @version $Date: 2013/05/12 14:00:05 $
|
* @version $Date: 2013/05/12 14:00:05 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
|
@ -46,7 +46,7 @@ import de.dhbwstuttgart.typeinference.UndConstraint;
|
|||||||
// ino.class.Unify.28049.description type=javadoc
|
// ino.class.Unify.28049.description type=javadoc
|
||||||
/**
|
/**
|
||||||
* Implementierung des Unifizierungsalgorithmus
|
* Implementierung des Unifizierungsalgorithmus
|
||||||
* @author Martin Pl�micke, Thomas Ott
|
* @author Martin Pl�micke, Thomas Ott
|
||||||
* @version $Date: 2013/05/22 22:23:50 $
|
* @version $Date: 2013/05/22 22:23:50 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -116,7 +116,7 @@ public class Unify
|
|||||||
* Entweder alle Elemente in solved Form [A =. type, B =. type2, ...]
|
* 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 alle Elemente in der Form [A <. B, C <. D, ..., E <? F, G <? H, .... I =. type, J =. type2, ...]
|
||||||
* oder [] = fail
|
* 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)
|
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))
|
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.");
|
inferencelog.debug("UNIFY FAIL:" + p.TA1 + " <. " + p.TA2 + " muesste mindestens einen TPH enthalten.");
|
||||||
return new Menge<Menge<Pair>>();
|
return new Menge<Menge<Pair>>();
|
||||||
}
|
}
|
||||||
@ -152,8 +152,8 @@ public class Unify
|
|||||||
if(!Eq1.contains(p))
|
if(!Eq1.contains(p))
|
||||||
Eq2.add(p);
|
Eq2.add(p);
|
||||||
}
|
}
|
||||||
/* Schritt 4, Teil 1: Einsammeln der Sets für das Kartesiche Produkt.
|
/* 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
|
* Hier werden die Paare verglichen. Je nach Struktur können neue Paare erzeugt
|
||||||
* werden, aus denen dann das kartesische Produkt gebildet wird.*/
|
* werden, aus denen dann das kartesische Produkt gebildet wird.*/
|
||||||
Menge<Menge<Menge<Pair>>> cartProduktSets = new Menge<Menge<Menge<Pair>>>();
|
Menge<Menge<Menge<Pair>>> cartProduktSets = new Menge<Menge<Menge<Pair>>>();
|
||||||
for(Pair p : Eq2)
|
for(Pair p : Eq2)
|
||||||
@ -165,7 +165,7 @@ public class Unify
|
|||||||
p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType();
|
p.TA2 = ((SuperWildcardType)p.TA2).get_SuperType();
|
||||||
//HIER GIBT ES EIN PROBLEM, WENN get_SuperType ein TPH LIEFERT PL 15-03-12
|
//HIER GIBT ES EIN PROBLEM, WENN get_SuperType ein TPH LIEFERT PL 15-03-12
|
||||||
//Dann ist THP <. TPH in Eq2 anstatt in Eq1
|
//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) {
|
if (p.TA2 instanceof TypePlaceholder) {
|
||||||
Eq1.addElement(p);
|
Eq1.addElement(p);
|
||||||
// Eq2.remove(p);
|
// Eq2.remove(p);
|
||||||
@ -216,7 +216,7 @@ public class Unify
|
|||||||
unifyErgs.add(unifyErgsElement.firstElement());
|
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())
|
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
|
|| 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)
|
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<Menge<Pair>> setofsetofpairs = new Menge<Menge<Pair>>();
|
||||||
Menge<Pair> vTmp = new Menge<Pair>();
|
Menge<Pair> vTmp = new Menge<Pair>();
|
||||||
vTmp.add(p);
|
vTmp.add(p);
|
||||||
@ -357,7 +357,7 @@ public class Unify
|
|||||||
unifyErgs.add(unifyErgsElement.firstElement());
|
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())
|
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
|
|| 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());
|
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())
|
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
|
|| 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.
|
//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:
|
//cartProduktSets kontrollieren:
|
||||||
ConstraintsSet cSet = new ConstraintsSet();
|
ConstraintsSet cSet = new ConstraintsSet();
|
||||||
for (Menge<Menge<Pair>> vecvecpair : cartProduktSets){
|
for (Menge<Menge<Pair>> vecvecpair : cartProduktSets){
|
||||||
@ -688,7 +688,7 @@ public class Unify
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Schritt 5: Einsetzen der Subst Regel
|
//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>> changedSets = new Menge<Menge<Pair>>();
|
||||||
Menge<Menge<Pair>> notChangedSets = new Menge<Menge<Pair>>();
|
Menge<Menge<Pair>> notChangedSets = new Menge<Menge<Pair>>();
|
||||||
for(Menge<Pair> vecpair : bigCartProductErg)
|
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>>();
|
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)
|
for(Menge<Pair> vecpair : changedSets)
|
||||||
{
|
{
|
||||||
Menge<Menge<Pair>> unifyErgs = unify(vecpair,fc_tto);
|
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);
|
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
|
//Schritt 7: Aussortieren der falschen Sets
|
||||||
/*
|
/*
|
||||||
* Durch die Rekursion in Schritt 6A sind die Ergebnisse, welche in 6A dazukommen auf jeden Fall korrekt.
|
* 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)
|
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
|
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;
|
boolean foundFresh = false;
|
||||||
for(Pair p : vecpair)
|
for(Pair p : vecpair)
|
||||||
{
|
{
|
||||||
@ -782,14 +782,14 @@ public class Unify
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Ergebnis zurückgeben.
|
//Ergebnis zurückgeben.
|
||||||
return Eq2Set;
|
return Eq2Set;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PL 2014-10-25
|
* PL 2014-10-25
|
||||||
* schnitt1 checkt ob die Typeplaceholders aus in den Elemeneten aus vars enthalten sind
|
* 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 var
|
||||||
* @param vars
|
* @param vars
|
||||||
* @param indexe
|
* @param indexe
|
||||||
@ -840,10 +840,10 @@ public class Unify
|
|||||||
* Beispiel: unifyERgs = [[a = Integer, b = Number ]], test = Menge<a>
|
* Beispiel: unifyERgs = [[a = Integer, b = Number ]], test = Menge<a>
|
||||||
* In diesm fall wird b = Number aus dem Menge entfernt.
|
* 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 unifyErgs - Ergebnisse des Unify, die geprüft werden sollen.
|
||||||
* @param test - RefType gegen den geprüft werden soll.
|
* @param test - RefType gegen den geprüft werden soll.
|
||||||
*/
|
*/
|
||||||
private static void testUnifyErg(Menge<Menge<Pair>> unifyErgs, RefType test)
|
private static void testUnifyErg(Menge<Menge<Pair>> unifyErgs, RefType test)
|
||||||
{
|
{
|
||||||
@ -857,7 +857,7 @@ public class Unify
|
|||||||
vec--;
|
vec--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Gleiche Mengeen löschen
|
//Gleiche Mengeen löschen
|
||||||
for(int i = 0; i < unifyErgs.size(); i++)
|
for(int i = 0; i < unifyErgs.size(); i++)
|
||||||
{
|
{
|
||||||
Menge<Pair> p1 = unifyErgs.elementAt(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.
|
* Beispiel: otherPairTypes = [Integer, Number, Menge<Integer>], TA1 = TPH a.
|
||||||
* return: [[TPH a = Integer],[TPH a = Number],[TPH a = Menge<Integer>]]
|
* return: [[TPH a = Integer],[TPH a = Number],[TPH a = Menge<Integer>]]
|
||||||
*
|
*
|
||||||
* @param TA1 - Der Typ der immer vorne steht
|
* @param TA1 - Der Typ der immer vorne steht
|
||||||
* @param otherPairTypes - Die anderen Typen
|
* @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)
|
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 wird geclont, Elemente nicht
|
||||||
//Menge<RefType> Mub = (Menge<RefType>)ub.clone();
|
//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
|
//FUNKTIONIERT NICHT. SIEHE iftest.java PL 08-08-13
|
||||||
for (int i = 0; i < ub.size(); i++) {
|
for (int i = 0; i < ub.size(); i++) {
|
||||||
for (int j = 0; j < ub.size(); j++) {
|
for (int j = 0; j < ub.size(); j++) {
|
||||||
@ -1049,7 +1049,7 @@ throws MatchException
|
|||||||
// ino.method.match.28064.body
|
// ino.method.match.28064.body
|
||||||
{
|
{
|
||||||
//PL 05-01-22
|
//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
|
//die Typterme aus tomatch zu ordnet. Es wird davon ausgegangen, dass
|
||||||
//FCtype gegen tomatch gematcht werden kann.
|
//FCtype gegen tomatch gematcht werden kann.
|
||||||
if (FCtype.getTypeName().equals(tomatch.getTypeName())) {
|
if (FCtype.getTypeName().equals(tomatch.getTypeName())) {
|
||||||
@ -1093,7 +1093,7 @@ throws MatchException
|
|||||||
// ino.method.sub_unify.28067.body
|
// ino.method.sub_unify.28067.body
|
||||||
{
|
{
|
||||||
//PL 05-01-21 umbenannt in sub_unify
|
//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 :-)
|
// otth: Unifikation - Versuch 1 :-)
|
||||||
|
|
||||||
//Menge FC = fc_tto.getFC();
|
//Menge FC = fc_tto.getFC();
|
||||||
@ -1118,7 +1118,7 @@ throws MatchException
|
|||||||
inferencelog.debug("Ausgewaehltes Paar = " + P.toString() + "");
|
inferencelog.debug("Ausgewaehltes Paar = " + P.toString() + "");
|
||||||
inferencelog.debug( "--------------------------------------------------");
|
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
|
//ERASE3
|
||||||
if( P.isEqual() && P.OperatorEqual() )
|
if( P.isEqual() && P.OperatorEqual() )
|
||||||
{
|
{
|
||||||
@ -1240,13 +1240,13 @@ throws MatchException
|
|||||||
}
|
}
|
||||||
catch( SCException Ex )
|
catch( SCException Ex )
|
||||||
{
|
{
|
||||||
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!");
|
inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1297,13 +1297,13 @@ throws MatchException
|
|||||||
}
|
}
|
||||||
catch( SCException Ex )
|
catch( SCException Ex )
|
||||||
{
|
{
|
||||||
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!");
|
inferencelog.info("---- Unifikation nicht m�glich: Anzahl der Parameter verschieden!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1374,7 +1374,7 @@ throws MatchException
|
|||||||
|
|
||||||
RefType TA1 = null;
|
RefType TA1 = null;
|
||||||
RefType TA2 = 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)
|
if(P.TA1 instanceof RefType && P.TA2 instanceof RefType)
|
||||||
{
|
{
|
||||||
TA1 = (RefType)P.TA1;
|
TA1 = (RefType)P.TA1;
|
||||||
@ -1396,7 +1396,7 @@ throws MatchException
|
|||||||
}
|
}
|
||||||
catch( SCException Ex )
|
catch( SCException Ex )
|
||||||
{
|
{
|
||||||
inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1429,7 +1429,7 @@ throws MatchException
|
|||||||
}
|
}
|
||||||
catch( SCException Ex )
|
catch( SCException Ex )
|
||||||
{
|
{
|
||||||
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
inferencelog.debug("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1449,7 +1449,7 @@ throws MatchException
|
|||||||
}
|
}
|
||||||
catch( SCException Ex )
|
catch( SCException Ex )
|
||||||
{
|
{
|
||||||
inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
inferencelog.error("---- Unifikation nicht m�glich: Permutation fehlgeschlagen!");
|
||||||
break;
|
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 )
|
if( P.TA1 instanceof TypePlaceholder && P.OperatorEqual() && useSubst) //&& P.TA2 instanceof RefType )
|
||||||
//PL 05-02-09 P.TA@ duerfen auch TypePlaceholder sein
|
//PL 05-02-09 P.TA@ duerfen auch TypePlaceholder sein
|
||||||
/* BEISPIEL:
|
/* BEISPIEL:
|
||||||
@ -1716,7 +1716,7 @@ throws MatchException
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementiert die reduceEq Regel des sub_unify
|
* 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
|
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("---- Parameteranzahl gleich");
|
||||||
inferencelog.debug("---- Reduce !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)");
|
inferencelog.debug("---- Reduce !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" + L1.size() + ") neue(s) Paar(e)");
|
||||||
|
|
||||||
// hier mu� die PERMUTATION erfolgen
|
// hier mu� die PERMUTATION erfolgen
|
||||||
inferencelog.debug("---- PAARBILDUNG ");
|
inferencelog.debug("---- PAARBILDUNG ");
|
||||||
for( int k = 0; k < L1.size(); k++ )
|
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.
|
//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 );
|
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() + ")");
|
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
|
//LIEGT
|
||||||
//erlegigt 06-04-28
|
//erlegigt 06-04-28
|
||||||
Menge<Pair> res = sub_unify(subunifypair, fc_tto);
|
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: ");
|
inferencelog.debug("HasSolvedForm: ");
|
||||||
printMenge("RES_SMALLER", res, 6);
|
printMenge("RES_SMALLER", res, 6);
|
||||||
ht = MengePair2SubstHashtableMengePair(res);
|
ht = MengePair2SubstHashtableMengePair(res);
|
||||||
@ -2222,7 +2222,7 @@ throws MatchException
|
|||||||
{
|
{
|
||||||
// otth: Funktion, die prueft, ob Paar( R1, R2 ) in FC liegt,
|
// otth: Funktion, die prueft, ob Paar( R1, R2 ) in FC liegt,
|
||||||
// bzw. deren rechten Seiten, ohne die TypePlaceholder-Variablen zu beachten
|
// bzw. deren rechten Seiten, ohne die TypePlaceholder-Variablen zu beachten
|
||||||
// z.B. Menge<A> w�re hier gleich wie Menge<Integer>
|
// z.B. Menge<A> w�re hier gleich wie Menge<Integer>
|
||||||
|
|
||||||
// z.B. FC = { ( AA<a, b> <=* CC< DD<b, a> > ) ,...}
|
// z.B. FC = { ( AA<a, b> <=* CC< DD<b, a> > ) ,...}
|
||||||
// R1 = AA<Integer, b>
|
// R1 = AA<Integer, b>
|
||||||
@ -2270,7 +2270,7 @@ throws MatchException
|
|||||||
{
|
{
|
||||||
// otth: Funktion, die prueft, ob Paar( R1, \sigma(R2) ) in FC liegt,
|
// otth: Funktion, die prueft, ob Paar( R1, \sigma(R2) ) in FC liegt,
|
||||||
// bzw. deren rechten Seiten, ohne die TypePlaceholders zu beachten
|
// bzw. deren rechten Seiten, ohne die TypePlaceholders zu beachten
|
||||||
// z.B. Menge<A> w�re hier gleich wie Menge<Integer>
|
// z.B. Menge<A> w�re hier gleich wie Menge<Integer>
|
||||||
|
|
||||||
// z.B. FC = { ( AA<a, b> <=* CC< DD<b, a> > ) ,...}
|
// z.B. FC = { ( AA<a, b> <=* CC< DD<b, a> > ) ,...}
|
||||||
// R1 = AA<Integer, b>
|
// R1 = AA<Integer, b>
|
||||||
@ -2308,7 +2308,7 @@ throws MatchException
|
|||||||
Menge<Pair> vp = sub_unify(R2vec, fc_tto);
|
Menge<Pair> vp = sub_unify(R2vec, fc_tto);
|
||||||
|
|
||||||
printMenge("VP", vp, 6);
|
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 ) )
|
//if( isRXSimilarRY( RFC, R2 ) )
|
||||||
{
|
{
|
||||||
inferencelog.debug("SIMILAR2");
|
inferencelog.debug("SIMILAR2");
|
||||||
@ -2405,7 +2405,7 @@ throws MatchException
|
|||||||
if (o instanceof RefType) {//PL 05-02-09 eingefuegt siehe Methodenkopf
|
if (o instanceof RefType) {//PL 05-02-09 eingefuegt siehe Methodenkopf
|
||||||
if( bMitVorbedingung && isTVinRefType( a, (RefType)o ) )
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2415,7 +2415,7 @@ throws MatchException
|
|||||||
{
|
{
|
||||||
// Parameterliste durchgehen
|
// Parameterliste durchgehen
|
||||||
Menge vTemp = ((RefType)T).get_ParaList();
|
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
|
//sonst werden nicht alle Elemente der Forschleife durchlaufen
|
||||||
for( int i = 0; i < vTemp.size(); i++ )
|
for( int i = 0; i < vTemp.size(); i++ )
|
||||||
{
|
{
|
||||||
@ -2461,7 +2461,7 @@ throws MatchException
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Wildcard ergänzt PL 14-12-05
|
//Wildcard ergänzt PL 14-12-05
|
||||||
if ( T instanceof ExtendsWildcardType )
|
if ( T instanceof ExtendsWildcardType )
|
||||||
{
|
{
|
||||||
Type Temp = ((ExtendsWildcardType) T).get_ExtendsType();
|
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 )
|
if ( T instanceof SuperWildcardType )
|
||||||
{
|
{
|
||||||
Type Temp = ((SuperWildcardType) T).get_SuperType();
|
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
|
// Basisklasse suchen
|
||||||
Menge tto = fc_tto.getTTO();
|
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.
|
* 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.
|
* Sollte ein anderes Element gefunden werden ist Reduce nicht möglich.
|
||||||
* Beispiel: Matrix <. Menge<Menge<Integer>> ist nur durch adapt möglich.
|
* Beispiel: Matrix <. Menge<Menge<Integer>> ist nur durch adapt möglich.
|
||||||
*/
|
*/
|
||||||
for(Type t : s)
|
for(Type t : s)
|
||||||
{
|
{
|
||||||
@ -2717,7 +2717,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
if( n >= vD.size() )
|
if( n >= vD.size() )
|
||||||
throw F;
|
throw F;
|
||||||
|
|
||||||
// Permuationswert f�r 'n' berechnen
|
// Permuationswert f�r 'n' berechnen
|
||||||
Type TV = (Type)vD.elementAt(n);
|
Type TV = (Type)vD.elementAt(n);
|
||||||
|
|
||||||
int nPos = -1;
|
int nPos = -1;
|
||||||
@ -2749,12 +2749,12 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
// ino.method.printMengeUnifier.28121.body
|
// ino.method.printMengeUnifier.28121.body
|
||||||
{
|
{
|
||||||
//PL 05-01-21
|
//PL 05-01-21
|
||||||
//Ruft f�r eine Menge von Unifikatoren die Methode
|
//Ruft f�r eine Menge von Unifikatoren die Methode
|
||||||
//printMenge auf
|
//printMenge auf
|
||||||
for (int i = 0; i < Uni.size(); i++) {
|
for (int i = 0; i < Uni.size(); i++) {
|
||||||
inferencelog.debug((i+1) + ". Unifier");
|
inferencelog.debug((i+1) + ". Unifier");
|
||||||
printMenge(strMenge, Uni.elementAt(i), nDebug);
|
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");
|
inferencelog.debug((i+1) + ". Unifier ist in 'Solved form'!\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -2781,7 +2781,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
}
|
}
|
||||||
|
|
||||||
for( int tt = 0; tt < E.size(); tt++ ) {
|
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 )
|
if( tt > 0 )
|
||||||
strTemp = strTemp + ",\n" + E.elementAt(tt).toString();
|
strTemp = strTemp + ",\n" + E.elementAt(tt).toString();
|
||||||
else
|
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.
|
* 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)
|
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)
|
for(ObjectType t : TVec)
|
||||||
{
|
{
|
||||||
ObjectType ccT = (ObjectType)CaptureConversion(t,fc_tto);
|
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)
|
if(ccT != null)
|
||||||
retVec.add(ccT);
|
retVec.add(ccT);
|
||||||
}
|
}
|
||||||
@ -2892,7 +2892,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
/**
|
/**
|
||||||
* Erzeugt die CaptureConversion von einem Typ.
|
* 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.
|
* @param fc_tto - Hilfsklasse.
|
||||||
* @return - CC(T)
|
* @return - CC(T)
|
||||||
*/
|
*/
|
||||||
@ -2927,7 +2927,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
if(t instanceof WildcardType)
|
if(t instanceof WildcardType)
|
||||||
{
|
{
|
||||||
FreshWildcardType fwcT = ((WildcardType)t).GetFreshWildcardType();
|
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)
|
if(cl.get_ParaList().elementAt(i) instanceof BoundedGenericTypeVar)
|
||||||
{
|
{
|
||||||
BoundedGenericTypeVar bgv = (BoundedGenericTypeVar)cl.get_ParaList().elementAt(i);
|
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);
|
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)
|
if(ccDone)
|
||||||
return refT;
|
return refT;
|
||||||
else
|
else
|
||||||
@ -2958,13 +2958,13 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
|
|
||||||
//Von hier an Greater implementierung 28-03-07
|
//Von hier an Greater implementierung 28-03-07
|
||||||
/**
|
/**
|
||||||
* Der Komplette Ablauf von greater und was die einzelnen Teilschritte machen kann anhand von Aktivitätsdiagrammen
|
* 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.
|
* 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.
|
* 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
|
* 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)
|
private static Menge<ObjectType> greater(ObjectType T, FC_TTO fc_tto)
|
||||||
//an die Aenderungen im Skript anpassen 07-11-03
|
//an die Aenderungen im Skript anpassen 07-11-03
|
||||||
@ -2989,22 +2989,22 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
//greater1 Erzeugen
|
//greater1 Erzeugen
|
||||||
Menge<ObjectType> greater1Erg = greater1(T,fc_tto);
|
Menge<ObjectType> greater1Erg = greater1(T,fc_tto);
|
||||||
|
|
||||||
//Reflexivität, deshalb T hinzufügen.
|
//Reflexivität, deshalb T hinzufügen.
|
||||||
if(!greater1Erg.contains(T))
|
if(!greater1Erg.contains(T))
|
||||||
greater1Erg.add(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)
|
for(ObjectType t : greater1Erg)
|
||||||
if(!retVec.contains(t))
|
if(!retVec.contains(t))
|
||||||
retVec.add(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);
|
Menge<ObjectType> greater2Erg = greater2(greater1Erg,fc_tto);
|
||||||
for(ObjectType t : greater2Erg)
|
for(ObjectType t : greater2Erg)
|
||||||
if(!retVec.contains(t))
|
if(!retVec.contains(t))
|
||||||
retVec.add(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);
|
Menge<ObjectType> greater3Erg = greater3(greater2Erg,fc_tto);
|
||||||
for(ObjectType t : greater3Erg)
|
for(ObjectType t : greater3Erg)
|
||||||
if(!retVec.contains(t))
|
if(!retVec.contains(t))
|
||||||
@ -3015,7 +3015,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* greater1 Schritt von greater.
|
* 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)
|
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
|
* Überladung der Funktion cartProductType, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter
|
||||||
* welcher für die rekursion erforderlich ist mit übergeben muss.
|
* welcher für die rekursion erforderlich ist mit übergeben muss.
|
||||||
*/
|
*/
|
||||||
private static Menge<Menge<Type>> cartProductType (Menge<Menge<Type>> vec)
|
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.
|
* 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)
|
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
|
* Überladung der Funktion cartProductPair, damit der Programmierer beim ersten Aufruf nicht den 2. Parameter
|
||||||
* welcher für die rekursion erforderlich ist mit übergeben muss.
|
* welcher für die rekursion erforderlich ist mit übergeben muss.
|
||||||
*/
|
*/
|
||||||
private static Menge<Menge<Pair>> cartProductPair (Menge<Menge<Pair>> vec)
|
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.
|
* 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)
|
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
|
* 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)
|
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>();
|
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)
|
else if(T instanceof TypePlaceholder)
|
||||||
retVec.add(T);
|
retVec.add(T);
|
||||||
//Diese Abfrage verhindert, dass bei FunN Wildcard-Typen generiert werden //PL 13-05-22
|
//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>();
|
Menge<ObjectType> retVec = new Menge<ObjectType>();
|
||||||
/*
|
/*
|
||||||
* luar 02-05-07: Beschreibung der Funktion:
|
* 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.
|
* Wenn das Funktioniert, dann ist der Typ auf der rechten Seite auch greater.
|
||||||
* */
|
* */
|
||||||
Hashtable<JavaClassName,Type> ht = new Hashtable<JavaClassName,Type>();
|
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();
|
RefType TA2neu = ((RefType)p.TA2).clone();
|
||||||
SubstHashtableGeneric(TA2neu,ht);
|
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))
|
if(!retVec.contains(TA2neu))
|
||||||
retVec.add(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
|
//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
|
* 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.
|
* 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)
|
private static Menge<ObjectType> smaller(ObjectType T, FC_TTO fc_tto)
|
||||||
//an die Aenderungen im Skript anpassen 07-11-03
|
//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))
|
if(!smaller12Erg.contains(T))
|
||||||
smaller12Erg.add(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)
|
for(ObjectType t : smaller12Erg)
|
||||||
if(!retVec.contains(t))
|
if(!retVec.contains(t))
|
||||||
retVec.add(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);
|
Menge<ObjectType> smaller3Erg = smaller3(smaller12Erg,fc_tto);
|
||||||
for(ObjectType t : smaller3Erg)
|
for(ObjectType t : smaller3Erg)
|
||||||
if(!retVec.contains(t))
|
if(!retVec.contains(t))
|
||||||
retVec.add(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);
|
Menge<ObjectType> smaller4Erg = smaller4(smaller3Erg);
|
||||||
for(ObjectType t : smaller4Erg)
|
for(ObjectType t : smaller4Erg)
|
||||||
if(!retVec.contains(t))
|
if(!retVec.contains(t))
|
||||||
@ -3409,7 +3409,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
Menge<Type> retVec = new Menge<Type>();
|
Menge<Type> retVec = new Menge<Type>();
|
||||||
if(T instanceof ExtendsWildcardType)
|
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;
|
ExtendsWildcardType exT = (ExtendsWildcardType)T;
|
||||||
Menge<ObjectType> smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto);
|
Menge<ObjectType> smallerTypes = smaller0(exT.get_ExtendsType(),fc_tto);
|
||||||
for(ObjectType t : smallerTypes)
|
for(ObjectType t : smallerTypes)
|
||||||
@ -3420,7 +3420,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
}
|
}
|
||||||
else if(T instanceof SuperWildcardType)
|
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;
|
SuperWildcardType suT = (SuperWildcardType)T;
|
||||||
Menge<ObjectType> greaterTypes = greater0(suT.get_SuperType(),fc_tto);
|
Menge<ObjectType> greaterTypes = greater0(suT.get_SuperType(),fc_tto);
|
||||||
for(ObjectType t : greaterTypes)
|
for(ObjectType t : greaterTypes)
|
||||||
@ -3459,7 +3459,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
Menge<ObjectType> retVec = new Menge<ObjectType>();
|
Menge<ObjectType> retVec = new Menge<ObjectType>();
|
||||||
/*
|
/*
|
||||||
* luar 02-05-07: Beschreibung der Funktion:
|
* 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.
|
* Wenn das Funktioniert, dann ist der Typ auf der linken Seite auch smaller.
|
||||||
* */
|
* */
|
||||||
Hashtable<JavaClassName,Type> ht = new Hashtable<JavaClassName,Type>();
|
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
|
//Macht hat funktioniert. In Linker Seite Typen substituieren
|
||||||
RefType TA1neu = ((RefType)p.TA1).clone();
|
RefType TA1neu = ((RefType)p.TA1).clone();
|
||||||
SubstHashtableGeneric(TA1neu,ht);
|
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))
|
if(!retVec.contains(TA1neu))
|
||||||
retVec.add(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)
|
private static boolean DelFreshWildcardTypeVar(Type T)
|
||||||
{
|
{
|
||||||
//luar 29-05-2007
|
//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)
|
if(T instanceof RefType)
|
||||||
{
|
{
|
||||||
RefType refT = (RefType)T;
|
RefType refT = (RefType)T;
|
||||||
@ -3546,7 +3546,7 @@ tempKlasse.get_Superclass_Name() ); System.out.println( "P. S.:
|
|||||||
if(DelFreshWildcardTypeVar(t))
|
if(DelFreshWildcardTypeVar(t))
|
||||||
return true;
|
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)
|
if(T instanceof ExtendsWildcardType)
|
||||||
return DelFreshWildcardTypeVar(((ExtendsWildcardType)T).get_ExtendsType());
|
return DelFreshWildcardTypeVar(((ExtendsWildcardType)T).get_ExtendsType());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user