use of dyvilx.tools.compiler.ast.type.typevar.CovariantTypeVarType in project Dyvil by Dyvil.
the class AbstractMethod method checkTypeVarsInferred.
private void checkTypeVarsInferred(MarkerList markers, SourcePosition position, GenericData genericData) {
if (this.typeParameters == null) {
return;
}
final int count = this.typeParameters.size();
genericData.lock(count);
for (int i = 0; i < count; i++) {
final ITypeParameter typeParameter = this.typeParameters.get(i);
final IType typeArgument = genericData.resolveType(typeParameter);
if (typeArgument == null || typeArgument instanceof CovariantTypeVarType) {
final IType inferredType = typeParameter.getUpperBound();
markers.add(Markers.semantic(position, "method.typevar.infer", this.name, typeParameter.getName(), inferredType));
genericData.addMapping(typeParameter, inferredType);
} else if (!typeParameter.isAssignableFrom(typeArgument, genericData)) {
final Marker marker = Markers.semanticError(position, "method.typevar.incompatible", this.name, typeParameter.getName());
marker.addInfo(Markers.getSemantic("type.generic.argument", typeArgument));
marker.addInfo(Markers.getSemantic("type_parameter.declaration", typeParameter));
markers.add(marker);
}
}
}
Aggregations