analyzeProject method
Implementation
Future<SymbolAnalysisResult> analyzeProject() async {
final graph = SymbolGraph();
final List<String> warnings = [];
final normalizedRoot = p.normalize(Directory(projectRoot).absolute.path);
try {
final collection = AnalysisContextCollection(includedPaths: [normalizedRoot]);
final context = collection.contextFor(normalizedRoot);
final session = context.currentSession;
final libDir = Directory(p.join(normalizedRoot, 'lib'));
final testDir = Directory(p.join(normalizedRoot, 'test'));
final List<File> filesToAnalyze = [];
if (libDir.existsSync()) {
final entities = libDir.listSync(recursive: true);
for (final e in entities) {
if (e is File && e.path.endsWith('.dart') && !e.path.endsWith('.g.dart') && !e.path.endsWith('.freezed.dart')) {
filesToAnalyze.add(e);
}
}
}
if (testDir.existsSync()) {
final entities = testDir.listSync(recursive: true);
for (final e in entities) {
if (e is File && e.path.endsWith('.dart')) {
filesToAnalyze.add(e);
}
}
}
for (final file in filesToAnalyze) {
final normalizedFilePath = p.normalize(file.absolute.path);
final relativePath = p.relative(normalizedFilePath, from: normalizedRoot).replaceAll('\\', '/');
try {
final result = await session.getResolvedUnit(normalizedFilePath);
if (result is ResolvedUnitResult) {
final resolvedUnit = result;
final visitor = SymbolAstVisitor(
filePath: relativePath,
packageName: packageName,
projectRoot: normalizedRoot,
graph: graph,
);
resolvedUnit.unit.accept(visitor);
} else {
warnings.add('Could not resolve unit for ' + relativePath);
}
} catch (e) {
warnings.add('Error analyzing symbols in ' + relativePath + ': ' + e.toString());
}
}
return SymbolAnalysisResult(
graph: graph,
warnings: warnings,
isSuccess: true,
);
} catch (e) {
warnings.add('Failed to initialize AnalysisContextCollection: ' + e.toString());
return SymbolAnalysisResult(
graph: graph,
warnings: warnings,
isSuccess: false,
);
}
}