diff --git a/resources/bytecode/javFiles/Matrix.jav b/resources/bytecode/javFiles/Matrix.jav
index bac0b88a..63bd8bb4 100644
--- a/resources/bytecode/javFiles/Matrix.jav
+++ b/resources/bytecode/javFiles/Matrix.jav
@@ -1,4 +1,5 @@
import java.util.List;
+import java.util.AbstractList;
import java.util.Vector;
import java.lang.Integer;
//import java.lang.Float;
diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/Method.java b/src/main/java/de/dhbwstuttgart/syntaxtree/Method.java
index fff2386a..27c17b2e 100644
--- a/src/main/java/de/dhbwstuttgart/syntaxtree/Method.java
+++ b/src/main/java/de/dhbwstuttgart/syntaxtree/Method.java
@@ -33,7 +33,7 @@ public class Method extends SyntaxTreeNode implements IItemWithOffset, TypeScope
private GenericDeclarationList generics;
private final RefTypeOrTPHOrWildcardOrGeneric returnType;
public final Boolean isInherited;
- public final Boolean isOverridden;
+ public final Boolean isImplemented;
/*
* its Constraints
@@ -51,7 +51,7 @@ public class Method extends SyntaxTreeNode implements IItemWithOffset, TypeScope
this.block = block;
this.generics = gtvDeclarations;
this.isInherited = false;
- this.isOverridden = false;
+ this.isImplemented = false;
}
public Method(int modifier, String name, RefTypeOrTPHOrWildcardOrGeneric returnType, ParameterList parameterList, Block block,
@@ -64,7 +64,7 @@ public class Method extends SyntaxTreeNode implements IItemWithOffset, TypeScope
this.block = block;
this.generics = gtvDeclarations;
this.isInherited = isInherited;
- this.isOverridden = isOverridden;
+ this.isImplemented = isOverridden;
}
public ParameterList getParameterList() {
diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java
index 76066d41..63767c4d 100644
--- a/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java
+++ b/src/main/java/de/dhbwstuttgart/syntaxtree/factory/ASTFactory.java
@@ -108,15 +108,40 @@ public class ASTFactory {
if (jreClass.getSuperclass()==null) {
methoden.add(createMethod(method, signature, jreClass, false, false));
}
- else try {
- jreClass.getSuperclass().getDeclaredMethod(method.getName(), method.getParameterTypes());
- methoden.add(createMethod(method, signature, jreClass, false, true));
- }
- catch (java.lang.NoSuchMethodException e)
- {
- methoden.add(createMethod(method, signature, jreClass, false, false));
- }
- }
+ else {
+ Boolean isImplemented = false;
+ isImplemented = Arrays.stream(jreClass.getInterfaces()).
+ reduce(false,
+ (x,y) -> {
+ try {
+ y.getDeclaredMethod(method.getName(), method.getParameterTypes());
+ return true;
+ }
+ catch (java.lang.NoSuchMethodException e) {
+ return false;
+ }},
+ (x,y) -> (x || y)
+ );
+
+ if (isImplemented) {
+ methoden.add(createMethod(method, signature, jreClass, false, true));
+ }
+ else {
+ if (Modifier.isAbstract(jreClass.getSuperclass().getModifiers())) {
+ try {
+ jreClass.getSuperclass().getDeclaredMethod(method.getName(), method.getParameterTypes());
+ methoden.add(createMethod(method, signature, jreClass, false, true));
+ }
+ catch (java.lang.NoSuchMethodException e) {
+ methoden.add(createMethod(method, signature, jreClass, false, false));
+ }
+ }
+ else {
+ methoden.add(createMethod(method, signature, jreClass, false, false));
+ }
+
+ }
+ }}
for (java.lang.reflect.Method method : allInheritedMethods) {
var signature = methodSignatures.get(new Pair<>(method.getName(), org.objectweb.asm.Type.getMethodDescriptor(method)));
methoden.add(createMethod(method, signature, jreClass, true, false));
@@ -202,7 +227,7 @@ public class ASTFactory {
return Optional.of(new de.dhbwstuttgart.syntaxtree.Constructor(modifier, name, returnType, parameterList, block, gtvDeclarations, offset /* , new ArrayList<>() geloescht PL 2018-11-24 */));
}
- public static Method createMethod(java.lang.reflect.Method jreMethod, String signature, java.lang.Class inClass, Boolean isInherited, Boolean isOverridden) {
+ public static Method createMethod(java.lang.reflect.Method jreMethod, String signature, java.lang.Class inClass, Boolean isInherited, Boolean isImplemented) {
String name = jreMethod.getName();
RefTypeOrTPHOrWildcardOrGeneric returnType;
Type jreRetType;
@@ -228,7 +253,7 @@ public class ASTFactory {
GenericDeclarationList gtvDeclarations = createGenerics(jreMethod.getTypeParameters(), inClass, jreMethod.getName(), signature);
Token offset = new NullToken();
- return new Method(jreMethod.getModifiers(), name, returnType, parameterList, block, gtvDeclarations, offset, isInherited, isOverridden);
+ return new Method(jreMethod.getModifiers(), name, returnType, parameterList, block, gtvDeclarations, offset, isInherited, isImplemented);
}
public static GenericDeclarationList createGenerics(TypeVariable[] typeParameters, Class context, String methodName, String signature) {
diff --git a/src/main/java/de/dhbwstuttgart/typeinference/constraints/Constraint.java b/src/main/java/de/dhbwstuttgart/typeinference/constraints/Constraint.java
index dd5b84da..970cffef 100644
--- a/src/main/java/de/dhbwstuttgart/typeinference/constraints/Constraint.java
+++ b/src/main/java/de/dhbwstuttgart/typeinference/constraints/Constraint.java
@@ -9,7 +9,7 @@ import java.util.Set;
public class Constraint extends HashSet {
private static final long serialVersionUID = 1L;
private Boolean isInherited = false;//wird beides nur für die Method-Constraints benoetigt
- private Boolean isOverridden = false;
+ private Boolean isImplemented = false;
/*
* wird verwendet um bei der Codegenerierung die richtige Methoden - Signatur
@@ -23,14 +23,14 @@ public class Constraint extends HashSet {
super();
}
- public Constraint(Boolean isInherited, Boolean isOverridden) {
+ public Constraint(Boolean isInherited, Boolean isImplemented) {
this.isInherited = isInherited;
- this.isOverridden = isOverridden;
+ this.isImplemented = isImplemented;
}
- public Constraint(Boolean isInherited, Boolean isOverridden, Constraint extendConstraint, Set methodSignatureConstraint) {
+ public Constraint(Boolean isInherited, Boolean isImplemented, Constraint extendConstraint, Set methodSignatureConstraint) {
this.isInherited = isInherited;
- this.isOverridden = isOverridden;
+ this.isImplemented = isImplemented;
this.extendConstraint = extendConstraint;
this.methodSignatureConstraint = methodSignatureConstraint;
}
@@ -43,8 +43,8 @@ public class Constraint extends HashSet {
return isInherited;
}
- public Boolean isOverridden() {
- return isOverridden;
+ public Boolean isImplemented() {
+ return isImplemented;
}
public Constraint getExtendConstraint() {
@@ -64,7 +64,7 @@ public class Constraint extends HashSet {
}
public String toString() {
- return super.toString() + "\nisInherited = " + isInherited + " isOveridden = " + isOverridden
+ return super.toString() + "\nisInherited = " + isInherited + " isOveridden = " + isImplemented
+ methodSignatureConstraint
//" + extendsContraint: " + (extendConstraint != null ? extendConstraint.toStringBase() : "null" )
+ "\n" ;
diff --git a/src/main/java/de/dhbwstuttgart/typeinference/constraints/ConstraintSet.java b/src/main/java/de/dhbwstuttgart/typeinference/constraints/ConstraintSet.java
index c3fc5520..14821895 100644
--- a/src/main/java/de/dhbwstuttgart/typeinference/constraints/ConstraintSet.java
+++ b/src/main/java/de/dhbwstuttgart/typeinference/constraints/ConstraintSet.java
@@ -77,7 +77,7 @@ public class ConstraintSet {
.map(o)
.collect(Collectors.toCollection((
() -> new Constraint (as.isInherited(),
- as.isOverridden(),
+ as.isImplemented(),
(as.getExtendConstraint() != null)
? as.getExtendConstraint().stream().map(o).collect(Collectors.toCollection(Constraint::new))
: null,
diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java
index 722e5e2f..be402d08 100644
--- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java
+++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java
@@ -753,7 +753,7 @@ public class TYPEStmt implements StatementVisitor {
if (m.getName().equals(name) && m.getParameterList().getFormalparalist().size() == numArgs) {
RefTypeOrTPHOrWildcardOrGeneric retType = m.getReturnType();// info.checkGTV(m.getReturnType());
- ret.add(new MethodAssumption(cl, retType, convertParams(m.getParameterList(), info), createTypeScope(cl, m), m.isInherited, m.isOverridden));
+ ret.add(new MethodAssumption(cl, retType, convertParams(m.getParameterList(), info), createTypeScope(cl, m), m.isInherited, m.isImplemented));
}
}
}
@@ -785,7 +785,7 @@ public class TYPEStmt implements StatementVisitor {
for (Method m : cl.getConstructors()) {
if (m.getParameterList().getFormalparalist().size() == argList.getArguments().size()) {
var params = convertParams(m.getParameterList(), info);
- ret.add(new MethodAssumption(cl, cl.generateTypeOfThisClass(), params, createTypeScope(cl, m), m.isInherited, m.isOverridden));
+ ret.add(new MethodAssumption(cl, cl.generateTypeOfThisClass(), params, createTypeScope(cl, m), m.isInherited, m.isImplemented));
}
}
}
diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java
index 2d2fa758..275755b2 100644
--- a/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java
+++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java
@@ -702,10 +702,10 @@ public class RuleSet implements IRuleSet{
x -> uni.apply(pair,x)).collect(Collectors.toCollection((b.getExtendConstraint() != null)
? () -> new Constraint(
b.isInherited(),
- b.isOverridden(),
+ b.isImplemented(),
b.getExtendConstraint().stream().map(x -> uni.apply(pair,x)).collect(Collectors.toCollection(Constraint::new)),
b.getmethodSignatureConstraint().stream().map(x -> uni.apply(pair,x)).collect(Collectors.toCollection(HashSet::new)))
- : () -> new Constraint(b.isInherited(), b.isOverridden())
+ : () -> new Constraint(b.isInherited(), b.isImplemented())
));
oderConstraints.replaceAll(oc -> oc.stream().map(applyUni).collect(Collectors.toCollection(HashSet::new)));
/*
diff --git a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java
index 8371477b..6cbfddb0 100644
--- a/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java
+++ b/src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java
@@ -1356,7 +1356,7 @@ public class TypeUnifyTask extends RecursiveTask>> {
List> smallerSetasList = oup.smallerThan(a_new, nextSetasList);
writeLog("smallerSetasList: " + smallerSetasList);
List> notInherited = smallerSetasList.stream()
- .filter(x -> !((Constraint)x).isInherited() && !((Constraint)x).isOverridden())
+ .filter(x -> !((Constraint)x).isInherited() && !((Constraint)x).isImplemented())
.collect(Collectors.toCollection(ArrayList::new));
writeLog("notInherited: " + notInherited+"\n");
List> notErased = new ArrayList<>();