Fieldvar wird nicht richtig aufgelöst #249

Open
opened 2022-09-08 14:19:09 +00:00 by pl · 3 comments
Owner

Branch: bigRefactoring
commit: 9fc558c21a

Constraints werden falsch generiert:

Unify nach Oder-Constraints-Anpassung:
UND:[(void =. T, , -1 WC: false, IT: false), (B <. W, , 0 WC: true, IT: false), (Box_Main <. V, , 0 WC: true, IT: false)]
isInherited = false
isStatement = false

ODER:
[[(V =. !!!DIJ!!! ist falsch, DIK wäre richtig, 0 WC: true, IT: false, 0 WC: true, IT: false), (U <. Box, 1 WC: false, IT: false)]
isInherited = false
isStatement = false
]
[[(Box_Main <. Box_Main, )]
isInherited = false
isStatement = false
]
[[(U <. Box, 1 WC: false, IT: false), (W =. !!!DIL!!! ist falsch, DIM wäre richtig, 0 WC: true, IT: false, 0 WC: true, IT: false)]
isInherited = false
isStatement = false
]
[[(B <. B, )]
isInherited = false
isStatement = false
]

Fehlereingrenzung:
In TypeStmt.java
public void visit(FieldVar fieldVar) {
fieldVar.receiver.accept(this);
Set oderConstraints = new HashSet<>();
for(FieldAssumption fieldAssumption :
info.getFields(fieldVar.fieldVarName)){

!!!Hier wird der resolver nicht richtig erzeugt!!!
!!!es muesste Box<$N> $N -> FreshTV und diese müsste dann in den Resolver eingetragen werden!!!

        Constraint constraint = new Constraint();
        GenericsResolver resolver = getResolverInstance();
        constraint.add(new Pair(fieldVar.receiver.getType(), fieldAssumption.getReceiverType(resolver), PairOperator.SMALLERDOT)); 
        constraint.add(new Pair(
                fieldVar.getType(), fieldAssumption.getType(resolver), PairOperator.EQUALSDOT));
        oderConstraints.add(constraint);
    }
    if(oderConstraints.size() == 0)
        throw new TypeinferenceException("Kein Feld "+fieldVar.fieldVarName+ " gefunden", fieldVar.getOffset());
    constraintsSet.addOderConstraint(oderConstraints);
}
Branch: bigRefactoring commit: 9fc558c21a320692fcfb233e2233a227f0e2799e Constraints werden falsch generiert: Unify nach Oder-Constraints-Anpassung: UND:[(void =. T, , -1 WC: false, IT: false), (B <. W, , 0 WC: true, IT: false), (Box_Main <. V, , 0 WC: true, IT: false)] isInherited = false isStatement = false ODER: [[(V =. !!!DIJ!!! ist falsch, DIK wäre richtig, 0 WC: true, IT: false, 0 WC: true, IT: false), (U <. Box<DIK>, 1 WC: false, IT: false)] isInherited = false isStatement = false ] [[(Box_Main <. Box_Main, )] isInherited = false isStatement = false ] [[(U <. Box<DIM>, 1 WC: false, IT: false), (W =. !!!DIL!!! ist falsch, DIM wäre richtig, 0 WC: true, IT: false, 0 WC: true, IT: false)] isInherited = false isStatement = false ] [[(B <. B, )] isInherited = false isStatement = false ] Fehlereingrenzung: In TypeStmt.java public void visit(FieldVar fieldVar) { fieldVar.receiver.accept(this); Set<Constraint> oderConstraints = new HashSet<>(); for(FieldAssumption fieldAssumption : info.getFields(fieldVar.fieldVarName)){ !!!Hier wird der resolver nicht richtig erzeugt!!! !!!es muesste Box<$N> $N -> FreshTV und diese müsste dann in den Resolver eingetragen werden!!! Constraint constraint = new Constraint(); GenericsResolver resolver = getResolverInstance(); constraint.add(new Pair(fieldVar.receiver.getType(), fieldAssumption.getReceiverType(resolver), PairOperator.SMALLERDOT)); constraint.add(new Pair( fieldVar.getType(), fieldAssumption.getType(resolver), PairOperator.EQUALSDOT)); oderConstraints.add(constraint); } if(oderConstraints.size() == 0) throw new TypeinferenceException("Kein Feld "+fieldVar.fieldVarName+ " gefunden", fieldVar.getOffset()); constraintsSet.addOderConstraint(oderConstraints); }
Author
Owner

Branch: bigRefactoring
commit: 9fc558c21a

File:
import java.lang.Object;
import java.lang.Integer;
import java.lang.String;

class B { }

class Box_Main extends B {

m(b) {
	b.f = new Box_Main();
	b.f = new B();
}

}

Branch: bigRefactoring
commit: 9fc558c21a

Constraints werden falsch generiert:

Unify nach Oder-Constraints-Anpassung:
UND:[(void =. T, , -1 WC: false, IT: false), (B <. W, , 0 WC: true, IT:
false), (Box_Main <. V, , 0 WC: true, IT: false)]
isInherited = false
isStatement = false

ODER:
[[(V =. !!!DIJ!!! ist falsch, DIK wäre richtig, 0 WC: true, IT: false, 0 WC:
true, IT: false), (U <. Box, 1 WC: false, IT: false)]
isInherited = false
isStatement = false
]
[[(Box_Main <. Box_Main, )]
isInherited = false
isStatement = false
]
[[(U <. Box, 1 WC: false, IT: false), (W =. !!!DIL!!! ist falsch, DIM
wäre richtig, 0 WC: true, IT: false, 0 WC: true, IT: false)]
isInherited = false
isStatement = false
]
[[(B <. B, )]
isInherited = false
isStatement = false
]

Fehlereingrenzung:
In TypeStmt.java
public void visit(FieldVar fieldVar) {
fieldVar.receiver.accept(this);
Set oderConstraints = new HashSet<>();
for(FieldAssumption fieldAssumption :
info.getFields(fieldVar.fieldVarName)){

!!!Hier wird der resolver nicht richtig erzeugt!!!
!!!es muesste Box<$N> $N -> FreshTV und diese müsste dann in den Resolver
eingetragen werden!!!

        Constraint constraint = new Constraint();
        GenericsResolver resolver = getResolverInstance();
        constraint.add(new Pair(fieldVar.receiver.getType(),

fieldAssumption.getReceiverType(resolver), PairOperator.SMALLERDOT));
constraint.add(new Pair(
fieldVar.getType(), fieldAssumption.getType(resolver),
PairOperator.EQUALSDOT));
oderConstraints.add(constraint);
}
if(oderConstraints.size() == 0)
throw new TypeinferenceException("Kein Feld
"+fieldVar.fieldVarName+ " gefunden", fieldVar.getOffset());
constraintsSet.addOderConstraint(oderConstraints);
}

Branch: bigRefactoring commit: 9fc558c21a320692fcfb233e2233a227f0e2799e File: import java.lang.Object; import java.lang.Integer; import java.lang.String; class B { } class Box_Main extends B { m(b) { b.f = new Box_Main(); b.f = new B(); } } > Branch: bigRefactoring > commit: 9fc558c21a320692fcfb233e2233a227f0e2799e > > Constraints werden falsch generiert: > > Unify nach Oder-Constraints-Anpassung: > UND:[(void =. T, , -1 WC: false, IT: false), (B <. W, , 0 WC: true, IT: > false), (Box_Main <. V, , 0 WC: true, IT: false)] > isInherited = false > isStatement = false > > ODER: > [[(V =. !!!DIJ!!! ist falsch, DIK wäre richtig, 0 WC: true, IT: false, 0 WC: > true, IT: false), (U <. Box<DIK>, 1 WC: false, IT: false)] > isInherited = false > isStatement = false > ] > [[(Box_Main <. Box_Main, )] > isInherited = false > isStatement = false > ] > [[(U <. Box<DIM>, 1 WC: false, IT: false), (W =. !!!DIL!!! ist falsch, DIM > wäre richtig, 0 WC: true, IT: false, 0 WC: true, IT: false)] > isInherited = false > isStatement = false > ] > [[(B <. B, )] > isInherited = false > isStatement = false > ] > > Fehlereingrenzung: > In TypeStmt.java > public void visit(FieldVar fieldVar) { > fieldVar.receiver.accept(this); > Set<Constraint> oderConstraints = new HashSet<>(); > for(FieldAssumption fieldAssumption : > info.getFields(fieldVar.fieldVarName)){ > > !!!Hier wird der resolver nicht richtig erzeugt!!! > !!!es muesste Box<$N> $N -> FreshTV und diese müsste dann in den Resolver > eingetragen werden!!! > > Constraint constraint = new Constraint(); > GenericsResolver resolver = getResolverInstance(); > constraint.add(new Pair(fieldVar.receiver.getType(), > fieldAssumption.getReceiverType(resolver), PairOperator.SMALLERDOT)); > constraint.add(new Pair( > fieldVar.getType(), fieldAssumption.getType(resolver), > PairOperator.EQUALSDOT)); > oderConstraints.add(constraint); > } > if(oderConstraints.size() == 0) > throw new TypeinferenceException("Kein Feld > "+fieldVar.fieldVarName+ " gefunden", fieldVar.getOffset()); > constraintsSet.addOderConstraint(oderConstraints); > }
Owner

Fixed by commit 8f7becd62d

Fixed by commit 8f7becd62d86902c4cc6ada43ce21c0ef0d48679
Author
Owner

Ich habe nicht den Eindruck, dass das Problemn gelöst wurde.

UND:[(void =. BO, , -1 WC: false, IT: false), (B <. BR, , 0 WC: true, IT: false), (Box_Main <. BQ, , 0 WC: true, IT: false)]
isInherited = false
isStatement = false

ODER:
[[(BP <. Box, 1 WC: false, IT: false), (BQ =. FOU, 0 WC: true, IT: false, 0 WC: true, IT: false)]

!!! BQ =. FOV wäre korrekt !!!

isInherited = false
isStatement = false
]
[[(Box_Main <. Box_Main, )]
isInherited = false
isStatement = false
]
[[(BP <. Box, 1 WC: false, IT: false), (BR =. FOW, 0 WC: true, IT: false, 0 WC: true, IT: false)]

!!! BR =. FOX wäre korrekt !!!

isInherited = false
isStatement = false
]
[[(B <. B, )]
isInherited = false
isStatement = false
]

Ich habe nicht den Eindruck, dass das Problemn gelöst wurde. UND:[(void =. BO, , -1 WC: false, IT: false), (B <. BR, , 0 WC: true, IT: false), (Box_Main <. BQ, , 0 WC: true, IT: false)] isInherited = false isStatement = false ODER: [[(BP <. Box<FOV>, 1 WC: false, IT: false), (BQ =. FOU, 0 WC: true, IT: false, 0 WC: true, IT: false)] !!! BQ =. FOV wäre korrekt !!! isInherited = false isStatement = false ] [[(Box_Main <. Box_Main, )] isInherited = false isStatement = false ] [[(BP <. Box<FOX>, 1 WC: false, IT: false), (BR =. FOW, 0 WC: true, IT: false, 0 WC: true, IT: false)] !!! BR =. FOX wäre korrekt !!! isInherited = false isStatement = false ] [[(B <. B, )] isInherited = false isStatement = false ]
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#249
No description provided.