blob: c4e74c19076b713a1a174d0298f29b7a1483dc05 [file] [log] [blame]
// Copyright (c) 2015, 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:analyzer/dart/analysis/analysis_options.dart';
import 'package:analyzer/dart/analysis/declared_variables.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/dart/analysis/analysis_options.dart';
import 'package:analyzer/src/dart/analysis/analysis_options_map.dart';
import 'package:analyzer/src/dart/element/type_provider.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
import 'package:analyzer/src/generated/source.dart';
/// An [AnalysisContext] in which analysis can be performed.
class AnalysisContextImpl implements AnalysisContext {
AnalysisOptionsMap _analysisOptionsMap;
@override
final DeclaredVariables declaredVariables;
@override
final SourceFactory sourceFactory;
TypeProviderImpl? _typeProvider;
TypeSystemImpl? _typeSystem;
AnalysisContextImpl({
required AnalysisOptionsMap analysisOptionsMap,
required this.declaredVariables,
required this.sourceFactory,
}) : _analysisOptionsMap = analysisOptionsMap;
@Deprecated("Use 'getAnalysisOptionsForFile(file)' instead")
@override
AnalysisOptionsImpl get analysisOptions {
return _analysisOptionsMap.firstOrDefault;
}
// TODO(scheglov): Remove it, exists only for Cider.
set analysisOptions(AnalysisOptionsImpl analysisOptions) {
_analysisOptionsMap = AnalysisOptionsMap.forSharedOptions(analysisOptions);
}
bool get hasTypeProvider {
return _typeProvider != null;
}
TypeProviderImpl get typeProvider {
return _typeProvider!;
}
TypeSystemImpl get typeSystem {
return _typeSystem!;
}
void clearTypeProvider() {
_typeProvider = null;
_typeSystem = null;
}
@override
AnalysisOptions getAnalysisOptionsForFile(File file) =>
_analysisOptionsMap.getOptions(file);
void setTypeProviders({
required TypeProviderImpl typeProvider,
}) {
if (_typeProvider != null) {
throw StateError('TypeProvider can be set only once.');
}
_typeProvider = typeProvider;
_typeSystem = TypeSystemImpl(
typeProvider: typeProvider,
);
}
}