forked from JavaTX/JavaCompilerCore
modified: ../../../../main/java/de/dhbwstuttgart/syntaxtree/factory/UnifyTypeFactory.java
Auswahl des Tphs bei der Abfrage, ob ein größerer oder kleinerer Typ des vorherigen bestimmt wurde korrigiert modified: ../../../../main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java modified: ../../../../main/java/de/dhbwstuttgart/typeinference/unify/model/PlaceholderType.java innerType eingeführt modified: ../../bytecode/javFiles/MatrixOP.jav deleted: ../Field.java deleted: ../Import.java deleted: ../Lam1.java deleted: ../LamRun.java deleted: ../MethFieldVar.java deleted: ../Subclass.java deleted: ../SuperTest.java deleted: ../Superclass.java deleted: ../TestMyTest.java deleted: ../testF.java deleted: ../testTets.java deleted: ../testTetsF.java
This commit is contained in:
parent
58d757398d
commit
6de1c50542
@ -64,26 +64,26 @@ public class UnifyTypeFactory {
|
||||
* Convert from
|
||||
* ASTType -> UnifyType
|
||||
*/
|
||||
public static UnifyType convert(RefTypeOrTPHOrWildcardOrGeneric t){
|
||||
public static UnifyType convert(RefTypeOrTPHOrWildcardOrGeneric t, Boolean innerType){
|
||||
if(t instanceof GenericRefType){
|
||||
return UnifyTypeFactory.convert((GenericRefType)t);
|
||||
return UnifyTypeFactory.convert((GenericRefType)t, innerType);
|
||||
}else
|
||||
if(t instanceof FunN){
|
||||
return UnifyTypeFactory.convert((FunN)t);
|
||||
return UnifyTypeFactory.convert((FunN)t, innerType);
|
||||
}else if(t instanceof TypePlaceholder){
|
||||
return UnifyTypeFactory.convert((TypePlaceholder)t);
|
||||
return UnifyTypeFactory.convert((TypePlaceholder)t, innerType);
|
||||
}else if(t instanceof ExtendsWildcardType){
|
||||
return UnifyTypeFactory.convert((ExtendsWildcardType)t);
|
||||
return UnifyTypeFactory.convert((ExtendsWildcardType)t, innerType);
|
||||
}else if(t instanceof SuperWildcardType){
|
||||
return UnifyTypeFactory.convert((SuperWildcardType)t);
|
||||
return UnifyTypeFactory.convert((SuperWildcardType)t, innerType);
|
||||
}else if(t instanceof RefType){
|
||||
return UnifyTypeFactory.convert((RefType)t);
|
||||
return UnifyTypeFactory.convert((RefType)t, innerType);
|
||||
}
|
||||
//Es wurde versucht ein Typ umzuwandeln, welcher noch nicht von der Factory abgedeckt ist
|
||||
throw new NotImplementedException("Der Typ "+t+" kann nicht umgewandelt werden");
|
||||
}
|
||||
|
||||
public static UnifyType convert(RefType t){
|
||||
public static UnifyType convert(RefType t, Boolean innerType){
|
||||
//Check if it is a FunN Type:
|
||||
Pattern p = Pattern.compile("Fun(\\d+)");
|
||||
Matcher m = p.matcher(t.getName().toString());
|
||||
@ -91,14 +91,14 @@ public class UnifyTypeFactory {
|
||||
if(b){
|
||||
Integer N = Integer.valueOf(m.group(1));
|
||||
if((N + 1) == t.getParaList().size()){
|
||||
return convert(new FunN(t.getParaList()));
|
||||
return convert(new FunN(t.getParaList()), false);
|
||||
}
|
||||
}
|
||||
UnifyType ret;
|
||||
if(t.getParaList() != null && t.getParaList().size() > 0){
|
||||
List<UnifyType> params = new ArrayList<>();
|
||||
for(RefTypeOrTPHOrWildcardOrGeneric pT : t.getParaList()){
|
||||
params.add(UnifyTypeFactory.convert(pT));
|
||||
params.add(UnifyTypeFactory.convert(pT, true));
|
||||
}
|
||||
ret = new ReferenceType(t.getName().toString(),new TypeParams(params));
|
||||
}else{
|
||||
@ -107,27 +107,38 @@ public class UnifyTypeFactory {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static UnifyType convert(FunN t){
|
||||
public static UnifyType convert(FunN t, Boolean innerType){
|
||||
UnifyType ret;
|
||||
List<UnifyType> params = new ArrayList<>();
|
||||
if(t.getParaList() != null && t.getParaList().size() > 0){
|
||||
for(RefTypeOrTPHOrWildcardOrGeneric pT : t.getParaList()){
|
||||
params.add(UnifyTypeFactory.convert(pT));
|
||||
params.add(UnifyTypeFactory.convert(pT, false));
|
||||
}
|
||||
}
|
||||
ret = FunNType.getFunNType(new TypeParams(params));
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static UnifyType convert(TypePlaceholder tph){
|
||||
public static UnifyType convert(TypePlaceholder tph, Boolean innerType){
|
||||
if (tph.getName().equals("AFQ")) {
|
||||
System.out.println("");
|
||||
}
|
||||
PlaceholderType ntph = new PlaceholderType(tph.getName());
|
||||
int in = PLACEHOLDERS.indexOf(ntph);
|
||||
if (in == -1) {
|
||||
PLACEHOLDERS.add(ntph);
|
||||
ntph.setInnerType(innerType);
|
||||
return ntph;
|
||||
}
|
||||
else {
|
||||
return PLACEHOLDERS.get(in);
|
||||
PlaceholderType oldpht = PLACEHOLDERS.get(in);
|
||||
if (oldpht.isWildcardable()) {
|
||||
return oldpht;
|
||||
}
|
||||
else {
|
||||
oldpht.setInnerType(innerType);
|
||||
return oldpht;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -137,9 +148,9 @@ public class UnifyTypeFactory {
|
||||
|
||||
public static UnifyType convert(WildcardType t){
|
||||
if(t.isExtends())
|
||||
return new ExtendsType(UnifyTypeFactory.convert(t.getInnerType()));
|
||||
return new ExtendsType(UnifyTypeFactory.convert(t.getInnerType(), false));
|
||||
else if(t.isSuper())
|
||||
return new SuperType(UnifyTypeFactory.convert(t.getInnerType()));
|
||||
return new SuperType(UnifyTypeFactory.convert(t.getInnerType(), false));
|
||||
else throw new NotImplementedException();
|
||||
}
|
||||
|
||||
@ -153,22 +164,42 @@ public class UnifyTypeFactory {
|
||||
}
|
||||
|
||||
public static UnifyPair convert(Pair p) {
|
||||
UnifyPair ret = null;
|
||||
if(p.GetOperator().equals(PairOperator.SMALLERDOT)) {
|
||||
UnifyPair ret = generateSmallerDotPair(UnifyTypeFactory.convert(p.TA1)
|
||||
, UnifyTypeFactory.convert(p.TA2));
|
||||
return ret;
|
||||
ret = generateSmallerDotPair(UnifyTypeFactory.convert(p.TA1, false)
|
||||
, UnifyTypeFactory.convert(p.TA2, false));
|
||||
//return ret;
|
||||
}else if(p.GetOperator().equals(PairOperator.SMALLERNEQDOT)) {
|
||||
UnifyPair ret = generateSmallNotEqualDotPair(UnifyTypeFactory.convert(p.TA1)
|
||||
, UnifyTypeFactory.convert(p.TA2));
|
||||
return ret;
|
||||
ret = generateSmallNotEqualDotPair(UnifyTypeFactory.convert(p.TA1, false)
|
||||
, UnifyTypeFactory.convert(p.TA2, false));
|
||||
//return ret;
|
||||
}else if(p.GetOperator().equals(PairOperator.EQUALSDOT)) {
|
||||
UnifyPair ret = generateEqualDotPair(UnifyTypeFactory.convert(p.TA1)
|
||||
, UnifyTypeFactory.convert(p.TA2));
|
||||
return ret;
|
||||
ret = generateEqualDotPair(UnifyTypeFactory.convert(p.TA1, false)
|
||||
, UnifyTypeFactory.convert(p.TA2, false));
|
||||
//return ret;
|
||||
}else if(p.GetOperator().equals(PairOperator.SMALLER)){
|
||||
return generateSmallerPair(UnifyTypeFactory.convert(p.TA1),
|
||||
UnifyTypeFactory.convert(p.TA2));
|
||||
ret = generateSmallerPair(UnifyTypeFactory.convert(p.TA1, false),
|
||||
UnifyTypeFactory.convert(p.TA2, false));
|
||||
}else throw new NotImplementedException();
|
||||
UnifyType lhs, rhs;
|
||||
if (((lhs = ret.getLhsType()) instanceof PlaceholderType)
|
||||
&& ((PlaceholderType)lhs).isWildcardable()
|
||||
&& (rhs = ret.getLhsType()) instanceof PlaceholderType) {
|
||||
if (lhs.getName().equals("AQ")) {
|
||||
System.out.println("");
|
||||
}
|
||||
((PlaceholderType)rhs).enableWildcardtable();
|
||||
}
|
||||
|
||||
if (((rhs = ret.getLhsType()) instanceof PlaceholderType)
|
||||
&& ((PlaceholderType)rhs).isWildcardable()
|
||||
&& (lhs = ret.getLhsType()) instanceof PlaceholderType) {
|
||||
if (rhs.getName().equals("AQ")) {
|
||||
System.out.println("");
|
||||
}
|
||||
((PlaceholderType)lhs).enableWildcardtable();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -816,17 +816,25 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
||||
//PL 2018-12-28: Hier gab es eine ClassCastException, war nicht reproduzierbar
|
||||
System.out.println("");
|
||||
List<PlaceholderType> vars_a =
|
||||
a.stream().filter(x -> (x.getLhsType().getName().equals(x.getBasePair().getLhsType().getName())
|
||||
||x.getLhsType().getName().equals(x.getBasePair().getRhsType().getName())))
|
||||
a.stream().filter(x -> ((x.getLhsType().getName().equals(x.getBasePair().getLhsType().getName())
|
||||
&& (x.getLhsType() instanceof PlaceholderType) && (x.getBasePair().getLhsType() instanceof PlaceholderType))
|
||||
|| ((x.getLhsType().getName().equals(x.getBasePair().getRhsType().getName()))
|
||||
&& (x.getLhsType() instanceof PlaceholderType) && (x.getBasePair().getRhsType() instanceof PlaceholderType)))
|
||||
)
|
||||
.map(y -> (PlaceholderType)y.getLhsType()).collect(Collectors.toCollection(ArrayList::new));
|
||||
Set<UnifyPair> fstElemRes = res.iterator().next();
|
||||
Set<UnifyPair> compRes = fstElemRes.stream().filter(x -> vars_a.contains(((PlaceholderType)x.getLhsType()))).collect(Collectors.toCollection(HashSet::new));
|
||||
|
||||
//Alle Variablen bestimmen die nicht hinzugefügt wurden in a_last
|
||||
System.out.println(a_last);
|
||||
a_last.forEach(x -> {writeLog("a_last_elem:" + x + " basepair: " + x.getBasePair());});
|
||||
List<PlaceholderType> varsLast_a =
|
||||
a_last.stream().filter(x -> (x.getLhsType().getName().equals(x.getBasePair().getLhsType().getName())
|
||||
||x.getLhsType().getName().equals(x.getBasePair().getRhsType().getName())))
|
||||
a_last.stream().filter(x -> ((x.getLhsType().getName().equals(x.getBasePair().getLhsType().getName())
|
||||
&& (x.getLhsType() instanceof PlaceholderType) && (x.getBasePair().getLhsType() instanceof PlaceholderType))
|
||||
|| ((x.getLhsType().getName().equals(x.getBasePair().getRhsType().getName())))
|
||||
&& (x.getLhsType() instanceof PlaceholderType) && (x.getBasePair().getRhsType() instanceof PlaceholderType)))
|
||||
.map(y -> (PlaceholderType)y.getLhsType()).collect(Collectors.toCollection(ArrayList::new));
|
||||
//[(java.util.Vector<java.lang.Integer> <. gen_aq, , 1), (CEK =. ? extends gen_aq, 1)] KANN VORKOMMEN
|
||||
//erstes Element genügt, da vars immer auf die gleichen Elemente zugeordnet werden muessen
|
||||
Set<UnifyPair> fstElemResult = result.iterator().next();
|
||||
Set<UnifyPair> compResult = fstElemResult.stream().filter(x -> varsLast_a.contains(((PlaceholderType)x.getLhsType()))).collect(Collectors.toCollection(HashSet::new));;
|
||||
|
@ -46,6 +46,11 @@ public final class PlaceholderType extends UnifyType{
|
||||
*/
|
||||
private boolean wildcardable = true;
|
||||
|
||||
/**
|
||||
* is innerType gibt an, ob der Type des PlaceholderType innerhalb eines Typkonstruktorsverwendet wird
|
||||
*/
|
||||
private boolean innerType = true;
|
||||
|
||||
/**
|
||||
* variance shows the variance of the pair
|
||||
* -1: contravariant
|
||||
@ -124,6 +129,18 @@ public final class PlaceholderType extends UnifyType{
|
||||
wildcardable = false;
|
||||
}
|
||||
|
||||
public void enableWildcardtable() {
|
||||
wildcardable = true;
|
||||
}
|
||||
|
||||
public void setWildcardtable(Boolean wildcardable) {
|
||||
this.wildcardable = wildcardable;
|
||||
}
|
||||
|
||||
public void setInnerType(Boolean innerType) {
|
||||
this.innerType = innerType;
|
||||
}
|
||||
|
||||
@Override
|
||||
Set<UnifyType> smArg(IFiniteClosure fc, Set<UnifyType> fBounded) {
|
||||
return fc.smArg(this, fBounded);
|
||||
|
@ -1,6 +1,6 @@
|
||||
import java.util.Vector;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Byte;
|
||||
//import java.lang.Byte;
|
||||
import java.lang.Boolean;
|
||||
|
||||
public class MatrixOP extends Vector<Vector<Integer>> {
|
||||
|
@ -1,6 +0,0 @@
|
||||
public class Field{
|
||||
public void m(){
|
||||
MethFieldVar mF = new MethFieldVar();
|
||||
mF.s1 = "Field S1";
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
import java.util.Vector;
|
||||
|
||||
class Import {
|
||||
void methode(){
|
||||
Vector v = new Vector();
|
||||
v.add(v);
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
import java.util.function.Function;
|
||||
public class Lam1{
|
||||
public Lam1() {
|
||||
Function<String,String> fun = (x) -> x+"1";
|
||||
fun.apply("2");
|
||||
|
||||
Runnable lam = () -> System.out.println("lambda");
|
||||
lam.run();
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
public class LamRun{
|
||||
|
||||
public void mRun(){
|
||||
|
||||
Runnable lam = () -> System.out.println("lambda");
|
||||
lam.run();
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
public class MethFieldVar{
|
||||
String s1;// = "";
|
||||
String s2;
|
||||
|
||||
/* public void meth(Integer i, String j, Boolean b){
|
||||
//String local = "a";
|
||||
//int localL = local.length();
|
||||
//int l = s.length();
|
||||
String s = null;
|
||||
//s = "";
|
||||
//return s.length();//l+localL;
|
||||
}
|
||||
*/
|
||||
public void mm(){
|
||||
// return "mm";
|
||||
}
|
||||
public void m2(){
|
||||
System.out.println("");
|
||||
// Math.abs(1);
|
||||
// String lV = "local";
|
||||
// s1 = "1";
|
||||
// s1.concat("2");
|
||||
s2 = s1;
|
||||
|
||||
mm();
|
||||
|
||||
Clazz i = new Clazz();
|
||||
|
||||
Runnable lam = ()->{
|
||||
String test = "";
|
||||
String b = "b";
|
||||
test = b;
|
||||
System.out.println(test);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class Clazz{}
|
@ -1,6 +0,0 @@
|
||||
public class Subclass extends Superclass {
|
||||
|
||||
public void printMethod() {
|
||||
super.printMethod();
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
public class Superclass {
|
||||
|
||||
public void printMethod() {
|
||||
System.out.println("Printed in Superclass.");
|
||||
}
|
||||
}
|
||||
|
||||
public class Subclass extends Superclass {
|
||||
|
||||
public void printMethod() {
|
||||
super.printMethod();
|
||||
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
public class Superclass {
|
||||
|
||||
public void printMethod() {
|
||||
System.out.println("Printed in Superclass.");
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
class TestMyTest{
|
||||
public static void main(String[] a){
|
||||
//test1
|
||||
//new TestClass();
|
||||
//test if statement
|
||||
//new TestIf(new Boolean(true));
|
||||
// test lambda
|
||||
//new TestClass();
|
||||
new LamRun();
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
public class testTets(){
|
||||
public static void main(String[] args){
|
||||
new tetsF();
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
public class testTets{
|
||||
public static void main(String[] args){
|
||||
new TetsF();
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
public class testTets(){
|
||||
public static void main(String[] args){
|
||||
new tetsF();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user