-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Open
Labels
area-devexpFor issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages.For issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages.devexp-completionIssues with the analysis server's code completion featureIssues with the analysis server's code completion feature
Description
Look for bC^.
below.
import 'dart:io';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/overlay_file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/src/dart/analysis/results.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/fine/requirements.dart';
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer_testing/mock_packages/package_content/flutter_test/lib/flutter_test.dart';
import 'package:collection/collection.dart';
import 'package:convert/convert.dart';
import '../../test/src/summary/element_text.dart';
import '../../test/util/diff.dart';
Future<void> main(List<String> args) async {
const pkgPath = '/Users/scheglov/Source/Dart/sdk.git/sdk/pkg';
// args = ['$pkgPath/analyzer'];
args = ['$pkgPath/analyzer/lib/src/dart/analysis'];
var resourceProvider = OverlayResourceProvider(
PhysicalResourceProvider.INSTANCE,
);
var pathContext = resourceProvider.pathContext;
var folders = <Folder>[];
for (var relPath in args) {
var folder = resourceProvider.getFolder(relPath);
if (!folder.exists) {
stderr.writeln('Error: The directory "$relPath" does not exist.');
exit(1);
}
folders.add(folder);
}
var baseCollection = AnalysisContextCollectionImpl(
resourceProvider: resourceProvider,
includedPaths: [...folders.map((e) => e.path)],
);
var fineCollection = AnalysisContextCollectionImpl(
resourceProvider: resourceProvider,
includedPaths: [...folders.map((e) => e.path)],
);
var dartPaths =
baseCollection.contexts
.expand((context) => context.contextRoot.analyzedFiles())
.where((path) => file_paths.isDart(pathContext, path))
.sorted();
// print(dartFiles.join('\n'));
var timer = Stopwatch()..start();
var generateTextLength = 0;
for (var path in dartPaths) {
var baseElement = await baseCollection.getLibraryElement(path);
var baseText = getLibraryText(
library: baseElement,
configuration:
ElementTextConfiguration()..assertHandler = (_, _, {reason}) {},
);
generateTextLength += baseText.length;
withFineDependencies = true;
try {
var fineElement = await fineCollection.getLibraryElement(path);
var fineText = getLibraryText(
library: fineElement,
configuration:
ElementTextConfiguration()..assertHandler = (_, _, {reason}) {},
);
if (fineText != baseText) {
print('[path: $path]');
printPrettyDiff(baseText, fineText);
throw StateError('See the diff above');
}
} finally {
withFineDependencies = false;
}
}
print('[files: ${dartPaths.length}]');
print('[generateTextLength: $generateTextLength]');
print('[time: ${timer.elapsedMilliseconds} ms]');
print('${'-' * 24} baseCollection');
{
{
var buffer = StringBuffer();
baseCollection.scheduler.accumulatedPerformance.write(buffer: buffer);
bC^.scheduler.accumulatedPerformance = OperationPerformanceImpl(
'<scheduler>',
);
print(buffer);
}
}
// var tp =
// '/Users/scheglov/Source/Dart/sdk.git/sdk/pkg/analyzer/lib/src/dart/analysis/session.dart';
// var analysisSession = contextCollection.contextFor(tp).currentSession;
// var unitResult = await analysisSession.getUnitElement(tp);
// unitResult as UnitElementResultImpl;
//
// var libraryText = getLibraryText(
// library: unitResult.fragment.element,
// configuration:
// ElementTextConfiguration()..assertHandler = (_, _, {reason}) {},
// );
//
// print('-' * 64);
// print(libraryText);
// print('-' * 64);
}
extension on AnalysisContextCollectionImpl {
Future<LibraryElementImpl> getLibraryElement(String path) async {
var analysisSession = contextFor(path).currentSession;
var unitResult = await analysisSession.getUnitElement(path);
unitResult as UnitElementResultImpl;
return unitResult.fragment.element;
}
}
Metadata
Metadata
Assignees
Labels
area-devexpFor issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages.For issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages.devexp-completionIssues with the analysis server's code completion featureIssues with the analysis server's code completion feature