Generics werden eingesetzt. Unvollständiger Zustand
This commit is contained in:
parent
1f55b81b02
commit
eec8e4d1a8
@ -86,15 +86,17 @@ public abstract class SyntaxTreeNode{
|
|||||||
tip = that.createTypeInsertPoint((TypePlaceholder) t, result);
|
tip = that.createTypeInsertPoint((TypePlaceholder) t, result);
|
||||||
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:
|
||||||
Vector<TypePlaceholder> uTPHs = insertSet.getUnresolvedTPHs();
|
Vector<TypePlaceholder> uTPHs = insertSet.getUnresolvedTPHs();
|
||||||
|
/*
|
||||||
for(TypePlaceholder tph : uTPHs){//GenericInsertPoints für diese TPHs bilden:
|
for(TypePlaceholder tph : uTPHs){//GenericInsertPoints für diese TPHs bilden:
|
||||||
GenericTypeInsertPoint genericTIP = new GenericTypeInsertPoint(that,tph,result);
|
GenericTypeInsertPoint genericTIP = new GenericTypeInsertPoint(that,tph,result);
|
||||||
insertSet.add(genericTIP);
|
insertSet.add(genericTIP);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
if(uTPHs.size()>0){//Nur wenn es auch unresolvedTPHs gibt:
|
if(uTPHs.size()>0){//Nur wenn es auch unresolvedTPHs gibt:
|
||||||
Vector<Pair> gPairs = result.getConstraintsFor(uTPHs);
|
Vector<Pair> gPairs = result.getConstraintsFor(uTPHs);
|
||||||
if(gPairs.size()>0){
|
if(gPairs.size()>0){
|
||||||
@ -103,7 +105,7 @@ public abstract class SyntaxTreeNode{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -127,14 +127,21 @@ public class GenericTypeInsertPoint extends TypeInsertPoint {
|
|||||||
@Override
|
@Override
|
||||||
public JavaCodeResult insertType(String fileContent, int additionalOffset) {
|
public JavaCodeResult insertType(String fileContent, int additionalOffset) {
|
||||||
//TODO: Es kann sein, dass eine Methode bereits Generische Variablen hat, diese müssen dann an diese Liste angefügt werden.
|
//TODO: Es kann sein, dass eine Methode bereits Generische Variablen hat, diese müssen dann an diese Liste angefügt werden.
|
||||||
|
|
||||||
return super.insertType(fileContent, additionalOffset);
|
return super.insertType(fileContent, additionalOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean associatedWith(TypeInsertPoint tip, ResultSet resultSet) {
|
public boolean associatedWith(TypeInsertPoint tip, ResultSet resultSet) {
|
||||||
if(!(tip.point instanceof TypePlaceholder))return false;
|
if((tip.type instanceof TypePlaceholder)){
|
||||||
Vector<TypePlaceholder> tphs = new Vector<>();
|
Vector<TypePlaceholder> tphs = new Vector<>();
|
||||||
tphs.add((TypePlaceholder)tip.point);
|
tphs.add((TypePlaceholder)tip.type);
|
||||||
resultSet.getConstraintsFor(tphs);
|
for(Pair p : resultSet.getConstraintsFor(tphs)){
|
||||||
|
if(p.TA1.equals(this.type))return true;
|
||||||
|
if(p.TA2.equals(this.type))return true;
|
||||||
|
if(this.genericPairs.contains(p))return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,14 @@ import mycompiler.mytype.Pair;
|
|||||||
import mycompiler.mytype.RefType;
|
import mycompiler.mytype.RefType;
|
||||||
import mycompiler.mytype.TypePlaceholder;
|
import mycompiler.mytype.TypePlaceholder;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Der Plan:
|
||||||
|
* SyntaxTreeNode generiert die TypeInsertPoints.
|
||||||
|
* Beim Einsetzen eines TIP werden die ebenfalls von den SyntaxTreeNodes berechneten GenericInsertPoints durchsucht nach den Punkten
|
||||||
|
* die mit dem einzusetzenden TIP zusammenhängen.
|
||||||
|
* Das funktioniert mithilfe des ResultSets. Denn es müssen alle Constraints mit einbezogen werden, da der Unify
|
||||||
|
* Algorithmus als Ergebnis nur die zu einem RefType aufgelösten TPHs ausgibt.
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
* Bündelt ein Set von TypeInsertPoints, die alle zu einem TypePlaceholder gehören.
|
* Bündelt ein Set von TypeInsertPoints, die alle zu einem TypePlaceholder gehören.
|
||||||
* Diese müssen gemeinsam eingesetzt werden.
|
* Diese müssen gemeinsam eingesetzt werden.
|
||||||
@ -86,15 +94,7 @@ public class TypeInsertSet {
|
|||||||
tpj.add(tip);
|
tpj.add(tip);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Der Plan:
|
|
||||||
* SyntaxTreeNode generiert die TypeInsertPoints.
|
|
||||||
* Beim Einsetzen eines TIP werden die ebenfalls von den SyntaxTreeNodes berechneten GenericInsertPoints durchsucht nach den Punkten
|
|
||||||
* die mit dem einzusetzenden TIP zusammenhängen.
|
|
||||||
* Das funktioniert mithilfe des ResultSets. Denn es müssen alle Constraints mit einbezogen werden, da der Unify
|
|
||||||
* Algorithmus als Ergebnis nur die zu einem RefType aufgelösten TPHs ausgibt.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein
|
* Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein
|
||||||
|
@ -48,8 +48,8 @@ public class TRMEqualTest {
|
|||||||
addTestNode("Typ1");
|
addTestNode("Typ1");
|
||||||
assertTrue("Nach dem Anfügen des selben Typs wie zuvor muss das Set immer noch 2 Element enthalten. Und nicht "+replaceSet.size(),replaceSet.size()==2);
|
assertTrue("Nach dem Anfügen des selben Typs wie zuvor muss das Set immer noch 2 Element enthalten. Und nicht "+replaceSet.size(),replaceSet.size()==2);
|
||||||
}
|
}
|
||||||
private void addTestNode(String type){
|
|
||||||
|
|
||||||
|
private void addTestNode(String type){
|
||||||
Vector<Pair> resultContent = new Vector<Pair>();
|
Vector<Pair> resultContent = new Vector<Pair>();
|
||||||
Pair pair = new Pair(tph,new RefType(type,0));
|
Pair pair = new Pair(tph,new RefType(type,0));
|
||||||
pair.SetOperator(PairOperator.Equal);
|
pair.SetOperator(PairOperator.Equal);
|
||||||
|
Loading…
Reference in New Issue
Block a user