blob: 7130b0cedac7af68e4c0655ba71ff9e13ea92d27 [file] [log] [blame]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:kernel/ast.dart';
import 'package:kernel/class_hierarchy.dart';
import '../kernel/type_algorithms.dart';
import 'declaration_builders.dart';
import 'library_builder.dart';
import 'nullability_builder.dart';
import 'type_builder.dart';
/// Type builder for invalid types as a type builder.
///
/// This builder results in the creation of an [InvalidType] and can only be
/// used when an error has already been reported.
class InvalidTypeBuilderImpl extends InvalidTypeBuilder {
@override
final Uri fileUri;
@override
final int charOffset;
InvalidTypeBuilderImpl(this.fileUri, this.charOffset);
@override
DartType build(LibraryBuilder library, TypeUse typeUse,
{ClassHierarchyBase? hierarchy}) {
return const InvalidType();
}
@override
DartType buildAliased(
LibraryBuilder library, TypeUse typeUse, ClassHierarchyBase? hierarchy) {
return const InvalidType();
}
@override
// Coverage-ignore(suite): Not run.
Supertype? buildMixedInType(LibraryBuilder library) {
return null;
}
@override
// Coverage-ignore(suite): Not run.
Supertype? buildSupertype(LibraryBuilder library, TypeUse typeUse) {
return null;
}
@override
String get debugName => 'InvalidTypeBuilder';
@override
bool get isExplicit => true;
@override
// Coverage-ignore(suite): Not run.
bool get isVoidType => false;
@override
// Coverage-ignore(suite): Not run.
TypeName? get typeName => null;
@override
// Coverage-ignore(suite): Not run.
NullabilityBuilder get nullabilityBuilder =>
const NullabilityBuilder.inherent();
@override
// Coverage-ignore(suite): Not run.
StringBuffer printOn(StringBuffer buffer) => buffer;
@override
// Coverage-ignore(suite): Not run.
TypeBuilder withNullabilityBuilder(NullabilityBuilder nullabilityBuilder) {
return this;
}
@override
Nullability computeNullability(
{required Map<TypeVariableBuilder, TraversalState>
typeVariablesTraversalState}) {
// TODO(johnniwinther,cstefantsova): Consider implementing
// invalidNullability.
return Nullability.nullable;
}
@override
// Coverage-ignore(suite): Not run.
void collectReferencesFrom(Map<TypeVariableBuilder, int> variableIndices,
List<List<int>> edges, int index) {}
@override
TypeBuilder? substituteRange(
Map<TypeVariableBuilder, TypeBuilder> upperSubstitution,
Map<TypeVariableBuilder, TypeBuilder> lowerSubstitution,
List<TypeBuilder> unboundTypes,
List<StructuralVariableBuilder> unboundTypeVariables,
{Variance variance = Variance.covariant}) {
return null;
}
@override
TypeBuilder? unaliasAndErase() => this;
@override
// Coverage-ignore(suite): Not run.
bool usesTypeVariables(Set<String> typeVariableNames) => false;
@override
// Coverage-ignore(suite): Not run.
List<TypeWithInBoundReferences> findRawTypesWithInboundReferences() =>
const [];
}