From 90e4c3bc966c936b22ee3e5bd205cb69dffc61a8 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Thu, 5 Mar 2015 13:56:42 +0100 Subject: [PATCH] Doku erweitert --- doc/documentation.md | 28 ++++++++----------- .../typeinference/ResultSet.java | 1 - .../GenericTypeInsertPoint.java | 18 ++++++------ .../typedeployment/TypeInsertSet.java | 8 ++++++ 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/doc/documentation.md b/doc/documentation.md index 0b88a6bc0..74c5add5d 100644 --- a/doc/documentation.md +++ b/doc/documentation.md @@ -29,6 +29,17 @@ * Stellt die Typeinsetzung für eine der generierten Lösungen dar * Setzt alle Typen und generischen Variablen ein, welche zu dieser Lösung gehören +### Einsetzen von Generischen Variablen +Die einzusetzenden Generischen Variablen werden erst beim Einsetzen eines Typs generiert. + +* Ablauf: + * 1. Alle TypePlaceholder im einzusetzenden Typ ermitteln. + * 2. Alle Constraints die mit diesen TPHs zusammenhängen ermitteln (Das kann möglicherweise wegfallen) + * 3. Alle TPHs, aus Schritt 1 und 2 zusammenfügen. + * 4. Kontrollieren, welche TPHs in dem InsertKontext noch nicht bekannt sind. + * 5. Alle Unbekannten TPHs herausfiltern (von den Pairs nur TA2) + * 6. Alle unbekannten TPHs + Pairs als GenericTypeInsertPoint deklarieren. + ## Ablauf Typinferenz: 1. Parsen @@ -53,19 +64,4 @@ 5. Einsetzen eines TypeInsertSet (optional) 1. Auf allen TypeInsertPoints die getUnresolvedTPHs-Methoden aufrufen 2. Alle Abhängigkeiten dieser - -# Typinferenz für Java 8 - -## Programmablauf - -1. SourceFile parst die Java-Dateien -2. SourceFile erstellt die Basic/Global Assumptions -3. Das Globale AssumptionSet wird anschließend jeder Klasse im Syntaxbaum mit dem TRProg aufruf übergeben -4. Jede Klasse verwaltet lokale Variablen in ihrem eigenen AssumptionSet. Das Globale ist Klassenübergreifend und jede AssumptionType darf darin nur einmalig gesetzt werden. -5. Haben alle Klassen ihrer Constraints erstellt können diese Unifiziert werden. - -## Overloading - -* Die Overloading Klasse generiert Constraints aus einem Methodenaufruf. - - + diff --git a/src/de/dhbwstuttgart/typeinference/ResultSet.java b/src/de/dhbwstuttgart/typeinference/ResultSet.java index a856d6d95..d13429bec 100755 --- a/src/de/dhbwstuttgart/typeinference/ResultSet.java +++ b/src/de/dhbwstuttgart/typeinference/ResultSet.java @@ -105,7 +105,6 @@ public class ResultSet implements Iterable { } } } - return ret; } diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java index bd16e90bf..751fea6bb 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/GenericTypeInsertPoint.java @@ -170,15 +170,17 @@ class GenericVarPatch { public void removeUnusedTPHs(Vector usedTPHs) { this.usedTPHs = usedTPHs; return; - /* - for(TypePlaceholder tph : usedTPHs){ - //Zuerst alle extends Typen kontrollieren und entfernen: - for(GenericVarExtendsDeclarationPatch p : this.genericVarExtendDeclarations){ - if(p.definesGenericVar(tph))return; - } - } - */ + } + + /* + for(TypePlaceholder tph : usedTPHs){ + //Zuerst alle extends Typen kontrollieren und entfernen: + for(GenericVarExtendsDeclarationPatch p : this.genericVarExtendDeclarations){ + if(p.definesGenericVar(tph))return; + } + } + */ } diff --git a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java index c588aaea6..6bce9a06a 100644 --- a/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java +++ b/src/de/dhbwstuttgart/typeinference/typedeployment/TypeInsertSet.java @@ -92,7 +92,15 @@ public class TypeInsertSet { allTPHs.add(tph); } } + for(Pair pair : pairs) + for(TypePlaceholder tph : pair.getTypePlaceholder()){ + if(!allTPHs.contains(tph)){ + allTPHs.add(tph); + } + } //TODO: Schritt 4 (Es wird nicht kontrolliert, ob der TPH in dem Kontext schon bekannt ist) + + /* // 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()){