Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 9b41728

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Remove FileParseExceptionHandler from FileSystemState.
This handler is holding a reference to AnalysisDriver, which references AnalysisDriverScheduler, etc. And FileSystemState is referenced from _ContentCacheWrapper that we set for AnlysisContext(s). So, I suspect that this might cause a memory leak. This mostly reverts https://dart-review.googlesource.com/c/sdk/+/17561 R=brianwilkerson@google.com Change-Id: Ib8aebcbab4c37399fcfe35a604598356ad2df87b Reviewed-on: https://dart-review.googlesource.com/c/79433 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
1 parent eee8787 commit 9b41728

2 files changed

Lines changed: 40 additions & 86 deletions

File tree

pkg/analyzer/lib/src/dart/analysis/driver.dart

Lines changed: 32 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,8 +1282,8 @@ class AnalysisDriver implements AnalysisDriverGeneric {
12821282
libraryContext?.dispose();
12831283
}
12841284
} catch (exception, stackTrace) {
1285-
String contextKey = _storeExceptionContextDuringAnalysis(
1286-
path, library, exception, stackTrace);
1285+
String contextKey =
1286+
_storeExceptionContext(path, library, exception, stackTrace);
12871287
throw new _ExceptionState(exception, stackTrace, contextKey);
12881288
}
12891289
});
@@ -1351,16 +1351,16 @@ class AnalysisDriver implements AnalysisDriverGeneric {
13511351
void _createFileTracker() {
13521352
_fillSalt();
13531353
_fsState = new FileSystemState(
1354-
_logger,
1355-
_byteStore,
1356-
_contentOverlay,
1357-
_resourceProvider,
1358-
sourceFactory,
1359-
analysisOptions,
1360-
_unlinkedSalt,
1361-
_linkedSalt,
1362-
externalSummaries: _externalSummaries,
1363-
parseExceptionHandler: _storeExceptionContextDuringParsing);
1354+
_logger,
1355+
_byteStore,
1356+
_contentOverlay,
1357+
_resourceProvider,
1358+
sourceFactory,
1359+
analysisOptions,
1360+
_unlinkedSalt,
1361+
_linkedSalt,
1362+
externalSummaries: _externalSummaries,
1363+
);
13641364
_fileTracker = new FileTracker(_logger, _fsState, _changeHook);
13651365
}
13661366

@@ -1573,9 +1573,27 @@ class AnalysisDriver implements AnalysisDriverGeneric {
15731573
.toBuffer();
15741574
}
15751575

1576-
String _storeExceptionContext(AnalysisDriverExceptionContextBuilder builder) {
1576+
String _storeExceptionContext(
1577+
String path, FileState libraryFile, exception, StackTrace stackTrace) {
1578+
if (allowedNumberOfContextsToWrite <= 0) {
1579+
return null;
1580+
} else {
1581+
allowedNumberOfContextsToWrite--;
1582+
}
15771583
try {
1578-
List<int> bytes = builder.toBuffer();
1584+
List<AnalysisDriverExceptionFileBuilder> contextFiles = libraryFile
1585+
.transitiveFiles
1586+
.map((file) => new AnalysisDriverExceptionFileBuilder(
1587+
path: file.path, content: file.content))
1588+
.toList();
1589+
contextFiles.sort((a, b) => a.path.compareTo(b.path));
1590+
AnalysisDriverExceptionContextBuilder contextBuilder =
1591+
new AnalysisDriverExceptionContextBuilder(
1592+
path: path,
1593+
exception: exception.toString(),
1594+
stackTrace: stackTrace.toString(),
1595+
files: contextFiles);
1596+
List<int> bytes = contextBuilder.toBuffer();
15791597

15801598
String _twoDigits(int n) {
15811599
if (n >= 10) return '$n';
@@ -1604,53 +1622,6 @@ class AnalysisDriver implements AnalysisDriverGeneric {
16041622
}
16051623
}
16061624

1607-
String _storeExceptionContextDuringAnalysis(
1608-
String path, FileState libraryFile, exception, StackTrace stackTrace) {
1609-
if (allowedNumberOfContextsToWrite <= 0) {
1610-
return null;
1611-
} else {
1612-
allowedNumberOfContextsToWrite--;
1613-
}
1614-
try {
1615-
List<AnalysisDriverExceptionFileBuilder> contextFiles = libraryFile
1616-
.transitiveFiles
1617-
.map((file) => new AnalysisDriverExceptionFileBuilder(
1618-
path: file.path, content: file.content))
1619-
.toList();
1620-
contextFiles.sort((a, b) => a.path.compareTo(b.path));
1621-
AnalysisDriverExceptionContextBuilder contextBuilder =
1622-
new AnalysisDriverExceptionContextBuilder(
1623-
path: path,
1624-
exception: exception.toString(),
1625-
stackTrace: stackTrace.toString(),
1626-
files: contextFiles);
1627-
return _storeExceptionContext(contextBuilder);
1628-
} catch (_) {
1629-
return null;
1630-
}
1631-
}
1632-
1633-
String _storeExceptionContextDuringParsing(
1634-
FileState file, exception, StackTrace stackTrace) {
1635-
if (allowedNumberOfContextsToWrite <= 0) {
1636-
return null;
1637-
} else {
1638-
allowedNumberOfContextsToWrite--;
1639-
}
1640-
try {
1641-
var fileBuilder = new AnalysisDriverExceptionFileBuilder(
1642-
path: file.path, content: file.content);
1643-
var contextBuilder = new AnalysisDriverExceptionContextBuilder(
1644-
path: file.path,
1645-
exception: exception.toString(),
1646-
stackTrace: stackTrace.toString(),
1647-
files: [fileBuilder]);
1648-
return _storeExceptionContext(contextBuilder);
1649-
} catch (_) {
1650-
return null;
1651-
}
1652-
}
1653-
16541625
/**
16551626
* If the driver is used in the read-only mode with infinite cache,
16561627
* we should not allow invocations that change files.

pkg/analyzer/lib/src/dart/analysis/file_state.dart

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import 'package:analyzer/dart/ast/standard_ast_factory.dart';
1010
import 'package:analyzer/dart/ast/token.dart';
1111
import 'package:analyzer/error/listener.dart';
1212
import 'package:analyzer/file_system/file_system.dart';
13+
import 'package:analyzer/src/dart/analysis/byte_store.dart';
1314
import 'package:analyzer/src/dart/analysis/defined_names.dart';
15+
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
1416
import 'package:analyzer/src/dart/analysis/referenced_names.dart';
1517
import 'package:analyzer/src/dart/analysis/top_level_declaration.dart';
1618
import 'package:analyzer/src/dart/analysis/unlinked_api_signature.dart';
@@ -21,25 +23,17 @@ import 'package:analyzer/src/generated/parser.dart';
2123
import 'package:analyzer/src/generated/source.dart';
2224
import 'package:analyzer/src/generated/utilities_dart.dart';
2325
import 'package:analyzer/src/source/source_resource.dart';
26+
import 'package:analyzer/src/summary/api_signature.dart';
2427
import 'package:analyzer/src/summary/format.dart';
2528
import 'package:analyzer/src/summary/idl.dart';
2629
import 'package:analyzer/src/summary/name_filter.dart';
2730
import 'package:analyzer/src/summary/package_bundle_reader.dart';
2831
import 'package:analyzer/src/summary/summarize_ast.dart';
2932
import 'package:convert/convert.dart';
3033
import 'package:crypto/crypto.dart';
31-
import 'package:analyzer/src/dart/analysis/byte_store.dart';
32-
import 'package:analyzer/src/summary/api_signature.dart';
33-
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
3434
import 'package:front_end/src/fasta/scanner/token.dart';
3535
import 'package:meta/meta.dart';
3636

37-
/**
38-
* The type of the function that is notified about an error during parsing.
39-
*/
40-
typedef void FileParseExceptionHandler(
41-
FileState file, exception, StackTrace stackTrace);
42-
4337
/**
4438
* [FileContentOverlay] is used to temporary override content of files.
4539
*/
@@ -377,10 +371,7 @@ class FileState {
377371
return PerformanceStatistics.parse.makeCurrentWhile(() {
378372
return _parse(errorListener);
379373
});
380-
} catch (exception, stackTrace) {
381-
if (_fsState.parseExceptionHandler != null) {
382-
_fsState.parseExceptionHandler(this, exception, stackTrace);
383-
}
374+
} catch (_) {
384375
return _createEmptyCompilationUnit();
385376
}
386377
}
@@ -730,15 +721,6 @@ class FileSystemState {
730721
*/
731722
final SummaryDataStore externalSummaries;
732723

733-
/**
734-
* The optional handler for scanning and parsing exceptions.
735-
*
736-
* We hope that these exceptions never happen, but we might need to get
737-
* additional information if there are exception when we are replacing
738-
* Analyzer's scanner and parser with implementations from FrontEnd.
739-
*/
740-
final FileParseExceptionHandler parseExceptionHandler;
741-
742724
/**
743725
* Mapping from a URI to the corresponding [FileState].
744726
*/
@@ -807,10 +789,11 @@ class FileSystemState {
807789
this._unlinkedSalt,
808790
this._linkedSalt, {
809791
this.externalSummaries,
810-
this.parseExceptionHandler,
811792
}) {
812-
_fileContentCache =
813-
_FileContentCache.getInstance(_resourceProvider, _contentOverlay);
793+
_fileContentCache = _FileContentCache.getInstance(
794+
_resourceProvider,
795+
_contentOverlay,
796+
);
814797
_testView = new FileSystemStateTestView(this);
815798
}
816799

0 commit comments

Comments
 (0)