Fehler beseitigen
This commit is contained in:
parent
26d3a89fd9
commit
45d176aed2
@ -56,8 +56,10 @@ public abstract class Field extends SyntaxTreeNode implements TypeInsertable, Ty
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterable<GenericTypeVar> getGenericParameter() {
|
public Iterable<GenericTypeVar> getGenericParameter() {
|
||||||
if(this.genericParameters == null)return new Vector<GenericTypeVar>();
|
Vector<GenericTypeVar> ret = new Vector<>();
|
||||||
return this.genericParameters;
|
if(this.genericParameters == null)return ret;
|
||||||
|
ret.addAll(this.genericParameters);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set_DeclId(DeclId did)
|
public void set_DeclId(DeclId did)
|
||||||
@ -157,4 +159,5 @@ public abstract class Field extends SyntaxTreeNode implements TypeInsertable, Ty
|
|||||||
public void setGenericParameter(GenericDeclarationList params) {
|
public void setGenericParameter(GenericDeclarationList params) {
|
||||||
this.genericParameters = params;
|
this.genericParameters = params;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -129,6 +129,15 @@ public class FieldDeclaration extends Field{
|
|||||||
@Override
|
@Override
|
||||||
public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) {
|
public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) {
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
ConstraintsSet ret = new ConstraintsSet();
|
||||||
|
TypeAssumptions localAssumptions = publicAssumptions.clone();
|
||||||
|
|
||||||
|
for(GenericTypeVar gp : this.getGenericParameter()){
|
||||||
|
localAssumptions.add(gp.createAssumptions());
|
||||||
|
}
|
||||||
|
|
||||||
|
for(GenericTypeVar gp : this.getGenericParameter()){
|
||||||
|
gp.TYPE(localAssumptions);
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
if(this.getType() instanceof GenericTypeVar){
|
if(this.getType() instanceof GenericTypeVar){
|
||||||
//Falls Typ ein GTV ist muss er syntaktisch kontrolliert werden...
|
//Falls Typ ein GTV ist muss er syntaktisch kontrolliert werden...
|
||||||
@ -137,7 +146,7 @@ public class FieldDeclaration extends Field{
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//TypeCheck, falls es sich um einen RefType handelt:
|
//TypeCheck, falls es sich um einen RefType handelt:
|
||||||
this.getType().checkType(publicAssumptions, this);
|
this.getType().checkType(localAssumptions, this);
|
||||||
/*
|
/*
|
||||||
if(this.getType()!=null && (this.getType() instanceof RefType)){
|
if(this.getType()!=null && (this.getType() instanceof RefType)){
|
||||||
Type replaceType = null;
|
Type replaceType = null;
|
||||||
@ -152,7 +161,7 @@ public class FieldDeclaration extends Field{
|
|||||||
|
|
||||||
if(this.wert!=null){
|
if(this.wert!=null){
|
||||||
//Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement:
|
//Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement:
|
||||||
ret.add(this.wert.TYPEExpr(publicAssumptions));
|
ret.add(this.wert.TYPEExpr(localAssumptions));
|
||||||
ret.add(new SingleConstraint(this.wert.getType(), this.getType()));
|
ret.add(new SingleConstraint(this.wert.getType(), this.getType()));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -553,6 +553,9 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
TypeAssumptions localAss = new TypeAssumptions();
|
TypeAssumptions localAss = new TypeAssumptions();
|
||||||
localAss.add(ass); //Die globalen Assumptions anhängen
|
localAss.add(ass); //Die globalen Assumptions anhängen
|
||||||
//Generische Parameterdeklarationen den Assumptions anfügen:
|
//Generische Parameterdeklarationen den Assumptions anfügen:
|
||||||
|
for(GenericTypeVar gtv : this.getGenericParameter()){
|
||||||
|
localAss.add(gtv.createAssumptions());
|
||||||
|
}
|
||||||
for(GenericTypeVar gtv : this.getGenericParameter()){
|
for(GenericTypeVar gtv : this.getGenericParameter()){
|
||||||
ret.add(gtv.TYPE(localAss));
|
ret.add(gtv.TYPE(localAss));
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
|||||||
import typinferenz.ConstraintsSet;
|
import typinferenz.ConstraintsSet;
|
||||||
import typinferenz.SingleConstraint;
|
import typinferenz.SingleConstraint;
|
||||||
import typinferenz.assumptions.TypeAssumptions;
|
import typinferenz.assumptions.TypeAssumptions;
|
||||||
|
import typinferenz.exceptions.TypeinferenceException;
|
||||||
|
|
||||||
// ino.class.BoundedGenericTypeVar.26464.description type=javadoc
|
// ino.class.BoundedGenericTypeVar.26464.description type=javadoc
|
||||||
/**
|
/**
|
||||||
@ -75,11 +76,13 @@ public class BoundedGenericTypeVar extends GenericTypeVar
|
|||||||
@Override
|
@Override
|
||||||
public ConstraintsSet TYPE(TypeAssumptions ass) {
|
public ConstraintsSet TYPE(TypeAssumptions ass) {
|
||||||
ConstraintsSet ret = super.TYPE(ass);
|
ConstraintsSet ret = super.TYPE(ass);
|
||||||
ass.addGenericVarAssumption(this);
|
//ass.addGenericVarAssumption(this);
|
||||||
//Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds
|
//Die Type methode der BoundedGenericTypeVar schreibt zusätzlich noch die Constraints für die bounds
|
||||||
if(this.bounds != null){
|
if(this.bounds != null){
|
||||||
for(Type ev : this.bounds){
|
for(Type ev : this.bounds){
|
||||||
ret.add(new SingleConstraint(ass.getTypeFor(this), ass.getTypeFor(ev)));
|
Type extendsType = ass.getTypeFor(ev);
|
||||||
|
if(extendsType == null)throw new TypeinferenceException("Der Typ "+ev.getName()+" ist nicht korrekt", this);
|
||||||
|
ret.add(new SingleConstraint(ass.getTypeFor(this), extendsType ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -199,6 +199,12 @@ public class GenericTypeVar extends Type
|
|||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TypeAssumptions createAssumptions(){
|
||||||
|
TypeAssumptions ret = new TypeAssumptions();
|
||||||
|
ret.addGenericVarAssumption(this);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions.
|
* Die Type Methode auf generische Variablen angewandt sorgt für deren Eintragung in die TypeAssumptions.
|
||||||
* @param ass
|
* @param ass
|
||||||
@ -206,7 +212,6 @@ public class GenericTypeVar extends Type
|
|||||||
*/
|
*/
|
||||||
public ConstraintsSet TYPE(TypeAssumptions ass){
|
public ConstraintsSet TYPE(TypeAssumptions ass){
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
ConstraintsSet ret = new ConstraintsSet();
|
||||||
ass.addGenericVarAssumption(this);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,7 +287,8 @@ public class Type implements IItemWithOffset
|
|||||||
*/
|
*/
|
||||||
public Type checkType(TypeAssumptions ass, IItemWithOffset parent){
|
public Type checkType(TypeAssumptions ass, IItemWithOffset parent){
|
||||||
Type t = ass.getTypeFor(this);
|
Type t = ass.getTypeFor(this);
|
||||||
if(t==null)throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent);
|
if(t==null)
|
||||||
|
throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,4 +25,5 @@ public class GenericVarAssumption extends Assumption{
|
|||||||
public String toString(){
|
public String toString(){
|
||||||
return this.getIdentifier() +"::"+this.getAssumedType();
|
return this.getIdentifier() +"::"+this.getAssumedType();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -323,6 +323,7 @@ public class TypeAssumptions {
|
|||||||
}
|
}
|
||||||
//Auch die generischen Variablen durchsuchen:
|
//Auch die generischen Variablen durchsuchen:
|
||||||
for(GenericVarAssumption ass : this.genericVarAssumptions){
|
for(GenericVarAssumption ass : this.genericVarAssumptions){
|
||||||
|
//if(ass.inheritsType(t))return t;
|
||||||
if(ass.getIdentifier().equals(t.getName()))return ass.getAssumedType();
|
if(ass.getIdentifier().equals(t.getName()))return ass.getAssumedType();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,6 +356,7 @@ public class TypeAssumptions {
|
|||||||
|
|
||||||
public void addGenericVarAssumption(
|
public void addGenericVarAssumption(
|
||||||
GenericTypeVar genericTypeVar) {
|
GenericTypeVar genericTypeVar) {
|
||||||
|
//TODO: Hier müssen alle Bounds einzeln geaddet werden. Die Bounds müssen hierbei nicht gespeichert werden, deren Constraints generiert die TYPE-Methode der GenericVarDeclarations
|
||||||
this.genericVarAssumptions.add(new GenericVarAssumption(genericTypeVar));
|
this.genericVarAssumptions.add(new GenericVarAssumption(genericTypeVar));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint {
|
|||||||
public String getTypeInsertString() {
|
public String getTypeInsertString() {
|
||||||
String genericVar = this.patch.getInsertString(this.resultSet);
|
String genericVar = this.patch.getInsertString(this.resultSet);
|
||||||
if(genericVar.length()==0)return "";
|
if(genericVar.length()==0)return "";
|
||||||
return this.genericInsertPoint.getGenericVarDeclarationString(genericVar);
|
return this.genericInsertPoint.getGenericVarDeclarationString(genericVar)+" ";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -98,7 +98,7 @@ public class GenericTypeInsertPoint extends SourcePatchPoint {
|
|||||||
@Override
|
@Override
|
||||||
public int compareTo(SourcePatchPoint arg0) {
|
public int compareTo(SourcePatchPoint arg0) {
|
||||||
int ret = super.compareTo(arg0);
|
int ret = super.compareTo(arg0);
|
||||||
if(ret == 0)ret = -1;//Hack der dazu führt, dass GTIP vor anderen InsertTypes eingesetzt werden.
|
if(ret == 0)ret = -666;//Hack der dazu führt, dass GTIP vor anderen InsertTypes eingesetzt werden.
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,6 +163,11 @@ public class GenericTypeInsertPoint extends SourcePatchPoint {
|
|||||||
public int getOffset() {
|
public int getOffset() {
|
||||||
return genericInsertPoint.getGenericVarDeclarationOffset();
|
return genericInsertPoint.getGenericVarDeclarationOffset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInsertLength() {
|
||||||
|
return this.getTypeInsertString().length();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,8 +17,6 @@ public abstract class SourcePatchPoint implements Comparable<SourcePatchPoint>{
|
|||||||
}
|
}
|
||||||
public abstract JavaCodeResult patch(String fileContent, int additionalOffset);
|
public abstract JavaCodeResult patch(String fileContent, int additionalOffset);
|
||||||
|
|
||||||
public int getInsertLength() {
|
public abstract int getInsertLength();
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -66,9 +66,7 @@ public class TypeInsertSet {
|
|||||||
*/
|
*/
|
||||||
public String insertType(TypeInsertPoint tip, String fileContent){
|
public String insertType(TypeInsertPoint tip, String fileContent){
|
||||||
TypePatchJob tpj = new TypePatchJob();
|
TypePatchJob tpj = new TypePatchJob();
|
||||||
|
|
||||||
this.insertType(tip, tpj);
|
this.insertType(tip, tpj);
|
||||||
|
|
||||||
return tpj.run(fileContent);
|
return tpj.run(fileContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,8 +85,6 @@ public class TypeInsertSet {
|
|||||||
tpj.add(gip);
|
tpj.add(gip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein
|
* Fügt alle Typen dieses TypeInsertSets in den übergebenen Quellcode ein
|
||||||
* @param fileContent
|
* @param fileContent
|
||||||
|
Loading…
x
Reference in New Issue
Block a user