| import 'package:analyzer/dart/analysis/results.dart'; |
| import 'package:nnbd_migration/src/messages.dart'; |
| |
| /// A [StateError] specific to the ways that the NNBD experiment can be |
| /// misconfigured which may prevent the tool from working. |
| class ExperimentStatusException extends StateError { |
| /// The SDK was analyzed without NNBD semantics. |
| ExperimentStatusException.sdkExperimentDisabled() : super(nnbdExperimentOff); |
| |
| /// The SDK does not contain the NNBD sources, it is the pre-unfork copy. |
| ExperimentStatusException.sdkPreforkSources() : super(sdkNnbdOff); |
| |
| /// The user's code imports unmigrated dependencies. |
| ExperimentStatusException.unmigratedDependencies(List<String> uris) |
| : super(unmigratedDependenciesError(uris)); |
| |
| /// Throw an [ExperimentStatusException] if the [result] seems to have |
| /// incorrectly configured experiment flags/nnbd sources. |
| static void sanityCheck(ResolvedUnitResult result) { |
| final equalsParamType = result.typeProvider.objectType |
| .getMethod('==')! |
| .parameters[0] |
| .type |
| .getDisplayString(withNullability: true); |
| if (equalsParamType == 'Object*') { |
| throw ExperimentStatusException.sdkExperimentDisabled(); |
| } |
| |
| if (equalsParamType != 'Object') { |
| throw ExperimentStatusException.sdkPreforkSources(); |
| } |
| } |
| } |