forked from JavaTX/JavaCompilerCore
Berücksichtige TPH =. TPH Ergebnisse im ResultSet
This commit is contained in:
parent
b31da88902
commit
276ff44756
@ -146,7 +146,12 @@ public class UnifyTypeFactory {
|
|||||||
RefTypeOrTPHOrWildcardOrGeneric tl = UnifyTypeFactory.convert(mp.getLhsType(), tphs);
|
RefTypeOrTPHOrWildcardOrGeneric tl = UnifyTypeFactory.convert(mp.getLhsType(), tphs);
|
||||||
RefTypeOrTPHOrWildcardOrGeneric tr = UnifyTypeFactory.convert(mp.getRhsType(), tphs);
|
RefTypeOrTPHOrWildcardOrGeneric tr = UnifyTypeFactory.convert(mp.getRhsType(), tphs);
|
||||||
if(tl instanceof TypePlaceholder){
|
if(tl instanceof TypePlaceholder){
|
||||||
if(tr instanceof TypePlaceholder) return new PairTPHsmallerTPH((TypePlaceholder)tl, (TypePlaceholder)tr);
|
if(tr instanceof TypePlaceholder) {
|
||||||
|
if(mp.getPairOp().equals(PairOperator.EQUALSDOT))
|
||||||
|
return new PairTPHequalRefType((TypePlaceholder)tl, tr);
|
||||||
|
else
|
||||||
|
return new PairTPHsmallerTPH((TypePlaceholder)tl, (TypePlaceholder)tr);
|
||||||
|
}
|
||||||
return new PairTPHequalRefType((TypePlaceholder)tl, tr);
|
return new PairTPHequalRefType((TypePlaceholder)tl, tr);
|
||||||
}else throw new NotImplementedException();
|
}else throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package de.dhbwstuttgart.typeinference.result;
|
package de.dhbwstuttgart.typeinference.result;
|
||||||
|
|
||||||
|
import de.dhbwstuttgart.exceptions.NotImplementedException;
|
||||||
import de.dhbwstuttgart.syntaxtree.AbstractASTWalker;
|
import de.dhbwstuttgart.syntaxtree.AbstractASTWalker;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.*;
|
import de.dhbwstuttgart.syntaxtree.type.*;
|
||||||
import de.dhbwstuttgart.typeinference.constraints.Pair;
|
import de.dhbwstuttgart.typeinference.constraints.Pair;
|
||||||
@ -24,7 +25,8 @@ public class ResultSet {
|
|||||||
type.accept(related);
|
type.accept(related);
|
||||||
return new ResolvedType(type, related.relatedTPHs);
|
return new ResolvedType(type, related.relatedTPHs);
|
||||||
}else{
|
}else{
|
||||||
return new ResolvedType(type,new HashSet<>());
|
throw new NotImplementedException();
|
||||||
|
//return new ResolvedType(type,new HashSet<>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,11 +70,29 @@ class Resolver implements ResultSetVisitor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(PairTPHequalRefType p) {
|
public void visit(PairTPHequalRefType p) {
|
||||||
|
RefTypeOrTPHOrWildcardOrGeneric otherSide = null;
|
||||||
if(p.left.equals(toResolve)){
|
if(p.left.equals(toResolve)){
|
||||||
resolved = p.right;
|
resolved = p.right;
|
||||||
RelatedTypeWalker related = new RelatedTypeWalker(null, result);
|
otherSide = p.left;
|
||||||
p.right.accept(related);
|
}
|
||||||
additionalTPHs.addAll(related.relatedTPHs);
|
if(p.right.equals(toResolve)){
|
||||||
|
resolved = p.left;
|
||||||
|
otherSide = p.right;
|
||||||
|
}
|
||||||
|
if(otherSide != null){
|
||||||
|
if(resolved instanceof RefType){
|
||||||
|
RelatedTypeWalker related = new RelatedTypeWalker(null, result);
|
||||||
|
otherSide.accept(related);
|
||||||
|
additionalTPHs.addAll(related.relatedTPHs);
|
||||||
|
}else if(resolved instanceof TypePlaceholder){
|
||||||
|
Set<ResultPair> newResultSet = new HashSet<>(result.results);
|
||||||
|
newResultSet.remove(p);
|
||||||
|
ResolvedType resolvedType = new Resolver(new ResultSet(newResultSet)).resolve((TypePlaceholder) resolved);
|
||||||
|
this.resolved = resolvedType.resolvedType;
|
||||||
|
this.additionalTPHs.addAll(resolvedType.additionalGenerics);
|
||||||
|
}else {
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,8 +49,11 @@ public class JavaTXCompilerTest {
|
|||||||
for(File f : compiler.sourceFiles.keySet()){
|
for(File f : compiler.sourceFiles.keySet()){
|
||||||
SourceFile sf = compiler.sourceFiles.get(f);
|
SourceFile sf = compiler.sourceFiles.get(f);
|
||||||
System.out.println(ASTTypePrinter.print(sf));
|
System.out.println(ASTTypePrinter.print(sf));
|
||||||
for(ResultSet resultSet : compiler.typeInference()){
|
List<ResultSet> results = compiler.typeInference();
|
||||||
|
assert results.size()>0;
|
||||||
|
for(ResultSet resultSet : results){
|
||||||
Set<TypeInsert> result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet);
|
Set<TypeInsert> result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet);
|
||||||
|
assert result.size()>0;
|
||||||
String content = readFile(f.getPath(), StandardCharsets.UTF_8);
|
String content = readFile(f.getPath(), StandardCharsets.UTF_8);
|
||||||
for(TypeInsert tip : result){
|
for(TypeInsert tip : result){
|
||||||
System.out.println(tip.insert(content));
|
System.out.println(tip.insert(content));
|
||||||
|
Loading…
Reference in New Issue
Block a user