Version 2.15.0-289.0.dev

Merge commit '41397cbb9ac364fa6d7feea64d569868f770f5a1' into 'dev'
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index b84e3fd..09adf9a 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -420,7 +420,6 @@
   
   
   
-  
 <h3>Requests</h3><dl><dt class="request"><a name="request_server.getVersion">server.getVersion</a></dt><dd><div class="box"><pre>request: {
   "id": String
   "method": "server.getVersion"
@@ -3082,8 +3081,6 @@
   
   
   
-  
-  
 <dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
     <p>
       A directive to begin overlaying the contents of a file. The supplied
@@ -5569,7 +5566,7 @@
       An enumeration of the services provided by the server domain.
     </p>
     
-  <dl><dt class="value">LOG</dt><dt class="value">STATUS</dt></dl></dd><dt class="typeDefinition"><a name="type_SourceChange">SourceChange: object</a></dt><dd>
+  <dl><dt class="value">STATUS</dt></dl></dd><dt class="typeDefinition"><a name="type_SourceChange">SourceChange: object</a></dt><dd>
     <p>
       A description of a set of edits that implement a single conceptual change.
     </p>
@@ -6065,7 +6062,7 @@
   TODO: TBD
 </p>
 <h2 class="domain"><a name="index">Index</a></h2>
-<h3>Domains</h3><h4>server (<a href="#domain_server">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_server.getVersion">getVersion</a></li><li><a href="#request_server.shutdown">shutdown</a></li><li><a href="#request_server.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_server.connected">connected</a></li><li><a href="#notification_server.error">error</a></li><li><a href="#notification_server.log">log</a></li><li><a href="#notification_server.status">status</a></li></ul></div></div><h4>analysis (<a href="#domain_analysis">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_analysis.getErrors">getErrors</a></li><li><a href="#request_analysis.getHover">getHover</a></li><li><a href="#request_analysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href="#request_analysis.getNavigation">getNavigation</a></li><li><a href="#request_analysis.getReachableSources">getReachableSources</a></li><li><a href="#request_analysis.reanalyze">reanalyze</a></li><li><a href="#request_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href="#request_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a href="#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><a href="#request_analysis.setSubscriptions">setSubscriptions</a></li><li><a href="#request_analysis.updateContent">updateContent</a></li><li><a href="#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_analysis.analyzedFiles">analyzedFiles</a></li><li><a href="#notification_analysis.closingLabels">closingLabels</a></li><li><a href="#notification_analysis.errors">errors</a></li><li><a href="#notification_analysis.flushResults">flushResults</a></li><li><a href="#notification_analysis.folding">folding</a></li><li><a href="#notification_analysis.highlights">highlights</a></li><li><a href="#notification_analysis.implemented">implemented</a></li><li><a href="#notification_analysis.invalidate">invalidate</a></li><li><a href="#notification_analysis.navigation">navigation</a></li><li><a href="#notification_analysis.occurrences">occurrences</a></li><li><a href="#notification_analysis.outline">outline</a></li><li><a href="#notification_analysis.overrides">overrides</a></li></ul></div></div><h4>completion (<a href="#domain_completion">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_completion.getSuggestions">getSuggestions</a></li><li><a href="#request_completion.setSubscriptions">setSubscriptions</a></li><li><a href="#request_completion.registerLibraryPaths">registerLibraryPaths</a></li><li><a href="#request_completion.getSuggestionDetails">getSuggestionDetails</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_completion.results">results</a></li><li><a href="#notification_completion.availableSuggestions">availableSuggestions</a></li><li><a href="#notification_completion.existingImports">existingImports</a></li></ul></div></div><h4>search (<a href="#domain_search">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_search.findElementReferences">findElementReferences</a></li><li><a href="#request_search.findMemberDeclarations">findMemberDeclarations</a></li><li><a href="#request_search.findMemberReferences">findMemberReferences</a></li><li><a href="#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a></li><li><a href="#request_search.getTypeHierarchy">getTypeHierarchy</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_search.results">results</a></li></ul></div></div><h4>edit (<a href="#domain_edit">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_edit.format">format</a></li><li><a href="#request_edit.getAssists">getAssists</a></li><li><a href="#request_edit.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href="#request_edit.getFixes">getFixes</a></li><li><a href="#request_edit.getPostfixCompletion">getPostfixCompletion</a></li><li><a href="#request_edit.getRefactoring">getRefactoring</a></li><li><a href="#request_edit.sortMembers">sortMembers</a></li><li><a href="#request_edit.organizeDirectives">organizeDirectives</a></li></ul></div><h4>execution (<a href="#domain_execution">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_execution.createContext">createContext</a></li><li><a href="#request_execution.deleteContext">deleteContext</a></li><li><a href="#request_execution.getSuggestions">getSuggestions</a></li><li><a href="#request_execution.mapUri">mapUri</a></li><li><a href="#request_execution.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_execution.launchData">launchData</a></li></ul></div></div><h4>diagnostic (<a href="#domain_diagnostic">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_diagnostic.getDiagnostics">getDiagnostics</a></li><li><a href="#request_diagnostic.getServerPort">getServerPort</a></li></ul></div><h4>flutter (<a href="#domain_flutter">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_flutter.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_flutter.outline">outline</a></li></ul></div></div><h3>Types (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a href="#type_AnalysisError">AnalysisError</a></li><li><a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a href="#type_AnalysisOptions">AnalysisOptions</a></li><li><a href="#type_AnalysisService">AnalysisService</a></li><li><a href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a href="#type_AvailableSuggestion">AvailableSuggestion</a></li><li><a href="#type_AvailableSuggestionRelevanceTag">AvailableSuggestionRelevanceTag</a></li><li><a href="#type_AvailableSuggestionSet">AvailableSuggestionSet</a></li><li><a href="#type_BulkFix">BulkFix</a></li><li><a href="#type_BulkFixDetail">BulkFixDetail</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_ClosingLabel">ClosingLabel</a></li><li><a href="#type_CompletionId">CompletionId</a></li><li><a href="#type_CompletionService">CompletionService</a></li><li><a href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a href="#type_ContextData">ContextData</a></li><li><a href="#type_DiagnosticMessage">DiagnosticMessage</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementDeclaration">ElementDeclaration</a></li><li><a href="#type_ElementKind">ElementKind</a></li><li><a href="#type_ExecutableFile">ExecutableFile</a></li><li><a href="#type_ExecutableKind">ExecutableKind</a></li><li><a href="#type_ExecutionContextId">ExecutionContextId</a></li><li><a href="#type_ExecutionService">ExecutionService</a></li><li><a href="#type_ExistingImport">ExistingImport</a></li><li><a href="#type_ExistingImports">ExistingImports</a></li><li><a href="#type_FileKind">FileKind</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FlutterOutline">FlutterOutline</a></li><li><a href="#type_FlutterOutlineAttribute">FlutterOutlineAttribute</a></li><li><a href="#type_FlutterOutlineKind">FlutterOutlineKind</a></li><li><a href="#type_FlutterService">FlutterService</a></li><li><a href="#type_FlutterWidgetProperty">FlutterWidgetProperty</a></li><li><a href="#type_FlutterWidgetPropertyEditor">FlutterWidgetPropertyEditor</a></li><li><a href="#type_FlutterWidgetPropertyEditorKind">FlutterWidgetPropertyEditorKind</a></li><li><a href="#type_FlutterWidgetPropertyValue">FlutterWidgetPropertyValue</a></li><li><a href="#type_FlutterWidgetPropertyValueEnumItem">FlutterWidgetPropertyValueEnumItem</a></li><li><a href="#type_FoldingKind">FoldingKind</a></li><li><a href="#type_FoldingRegion">FoldingRegion</a></li><li><a href="#type_GeneralAnalysisService">GeneralAnalysisService</a></li><li><a href="#type_HighlightRegion">HighlightRegion</a></li><li><a href="#type_HighlightRegionType">HighlightRegionType</a></li><li><a href="#type_HoverInformation">HoverInformation</a></li><li><a href="#type_ImplementedClass">ImplementedClass</a></li><li><a href="#type_ImplementedMember">ImplementedMember</a></li><li><a href="#type_ImportedElementSet">ImportedElementSet</a></li><li><a href="#type_ImportedElements">ImportedElements</a></li><li><a href="#type_IncludedSuggestionRelevanceTag">IncludedSuggestionRelevanceTag</a></li><li><a href="#type_IncludedSuggestionSet">IncludedSuggestionSet</a></li><li><a href="#type_KytheEntry">KytheEntry</a></li><li><a href="#type_KytheVName">KytheVName</a></li><li><a href="#type_LibraryPathSet">LibraryPathSet</a></li><li><a href="#type_LinkedEditGroup">LinkedEditGroup</a></li><li><a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a></li><li><a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></li><li><a href="#type_Location">Location</a></li><li><a href="#type_NavigationRegion">NavigationRegion</a></li><li><a href="#type_NavigationTarget">NavigationTarget</a></li><li><a href="#type_Occurrences">Occurrences</a></li><li><a href="#type_Outline">Outline</a></li><li><a href="#type_OverriddenMember">OverriddenMember</a></li><li><a href="#type_Override">Override</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PostfixTemplateDescriptor">PostfixTemplateDescriptor</a></li><li><a href="#type_PubStatus">PubStatus</a></li><li><a href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a href="#type_RefactoringKind">RefactoringKind</a></li><li><a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href="#type_RefactoringOptions">RefactoringOptions</a></li><li><a href="#type_RefactoringProblem">RefactoringProblem</a></li><li><a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href="#type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href="#type_RequestError">RequestError</a></li><li><a href="#type_RequestErrorCode">RequestErrorCode</a></li><li><a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a></li><li><a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a></li><li><a href="#type_RuntimeCompletionExpressionTypeKind">RuntimeCompletionExpressionTypeKind</a></li><li><a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</a></li><li><a href="#type_SearchId">SearchId</a></li><li><a href="#type_SearchResult">SearchResult</a></li><li><a href="#type_SearchResultKind">SearchResultKind</a></li><li><a href="#type_ServerService">ServerService</a></li><li><a href="#type_SourceChange">SourceChange</a></li><li><a href="#type_SourceEdit">SourceEdit</a></li><li><a href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a href="#type_TypeHierarchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a href="#refactoring_EXTRACT_WIDGET">EXTRACT_WIDGET</a></li><li><a href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a href="#refactoring_RENAME">RENAME</a></li></ul></div>
+<h3>Domains</h3><h4>server (<a href="#domain_server">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_server.getVersion">getVersion</a></li><li><a href="#request_server.shutdown">shutdown</a></li><li><a href="#request_server.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_server.connected">connected</a></li><li><a href="#notification_server.error">error</a></li><li><a href="#notification_server.status">status</a></li></ul></div></div><h4>analysis (<a href="#domain_analysis">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_analysis.getErrors">getErrors</a></li><li><a href="#request_analysis.getHover">getHover</a></li><li><a href="#request_analysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href="#request_analysis.getNavigation">getNavigation</a></li><li><a href="#request_analysis.getReachableSources">getReachableSources</a></li><li><a href="#request_analysis.reanalyze">reanalyze</a></li><li><a href="#request_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href="#request_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a href="#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><a href="#request_analysis.setSubscriptions">setSubscriptions</a></li><li><a href="#request_analysis.updateContent">updateContent</a></li><li><a href="#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_analysis.analyzedFiles">analyzedFiles</a></li><li><a href="#notification_analysis.closingLabels">closingLabels</a></li><li><a href="#notification_analysis.errors">errors</a></li><li><a href="#notification_analysis.flushResults">flushResults</a></li><li><a href="#notification_analysis.folding">folding</a></li><li><a href="#notification_analysis.highlights">highlights</a></li><li><a href="#notification_analysis.implemented">implemented</a></li><li><a href="#notification_analysis.invalidate">invalidate</a></li><li><a href="#notification_analysis.navigation">navigation</a></li><li><a href="#notification_analysis.occurrences">occurrences</a></li><li><a href="#notification_analysis.outline">outline</a></li><li><a href="#notification_analysis.overrides">overrides</a></li></ul></div></div><h4>completion (<a href="#domain_completion">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_completion.getSuggestions">getSuggestions</a></li><li><a href="#request_completion.setSubscriptions">setSubscriptions</a></li><li><a href="#request_completion.registerLibraryPaths">registerLibraryPaths</a></li><li><a href="#request_completion.getSuggestionDetails">getSuggestionDetails</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_completion.results">results</a></li><li><a href="#notification_completion.availableSuggestions">availableSuggestions</a></li><li><a href="#notification_completion.existingImports">existingImports</a></li></ul></div></div><h4>search (<a href="#domain_search">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_search.findElementReferences">findElementReferences</a></li><li><a href="#request_search.findMemberDeclarations">findMemberDeclarations</a></li><li><a href="#request_search.findMemberReferences">findMemberReferences</a></li><li><a href="#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a></li><li><a href="#request_search.getTypeHierarchy">getTypeHierarchy</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_search.results">results</a></li></ul></div></div><h4>edit (<a href="#domain_edit">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_edit.format">format</a></li><li><a href="#request_edit.getAssists">getAssists</a></li><li><a href="#request_edit.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href="#request_edit.getFixes">getFixes</a></li><li><a href="#request_edit.getPostfixCompletion">getPostfixCompletion</a></li><li><a href="#request_edit.getRefactoring">getRefactoring</a></li><li><a href="#request_edit.sortMembers">sortMembers</a></li><li><a href="#request_edit.organizeDirectives">organizeDirectives</a></li></ul></div><h4>execution (<a href="#domain_execution">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_execution.createContext">createContext</a></li><li><a href="#request_execution.deleteContext">deleteContext</a></li><li><a href="#request_execution.getSuggestions">getSuggestions</a></li><li><a href="#request_execution.mapUri">mapUri</a></li><li><a href="#request_execution.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_execution.launchData">launchData</a></li></ul></div></div><h4>diagnostic (<a href="#domain_diagnostic">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_diagnostic.getDiagnostics">getDiagnostics</a></li><li><a href="#request_diagnostic.getServerPort">getServerPort</a></li></ul></div><h4>flutter (<a href="#domain_flutter">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_flutter.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_flutter.outline">outline</a></li></ul></div></div><h3>Types (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a href="#type_AnalysisError">AnalysisError</a></li><li><a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a href="#type_AnalysisOptions">AnalysisOptions</a></li><li><a href="#type_AnalysisService">AnalysisService</a></li><li><a href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a href="#type_AvailableSuggestion">AvailableSuggestion</a></li><li><a href="#type_AvailableSuggestionRelevanceTag">AvailableSuggestionRelevanceTag</a></li><li><a href="#type_AvailableSuggestionSet">AvailableSuggestionSet</a></li><li><a href="#type_BulkFix">BulkFix</a></li><li><a href="#type_BulkFixDetail">BulkFixDetail</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_ClosingLabel">ClosingLabel</a></li><li><a href="#type_CompletionId">CompletionId</a></li><li><a href="#type_CompletionService">CompletionService</a></li><li><a href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a href="#type_ContextData">ContextData</a></li><li><a href="#type_DiagnosticMessage">DiagnosticMessage</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementDeclaration">ElementDeclaration</a></li><li><a href="#type_ElementKind">ElementKind</a></li><li><a href="#type_ExecutableFile">ExecutableFile</a></li><li><a href="#type_ExecutableKind">ExecutableKind</a></li><li><a href="#type_ExecutionContextId">ExecutionContextId</a></li><li><a href="#type_ExecutionService">ExecutionService</a></li><li><a href="#type_ExistingImport">ExistingImport</a></li><li><a href="#type_ExistingImports">ExistingImports</a></li><li><a href="#type_FileKind">FileKind</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FlutterOutline">FlutterOutline</a></li><li><a href="#type_FlutterOutlineAttribute">FlutterOutlineAttribute</a></li><li><a href="#type_FlutterOutlineKind">FlutterOutlineKind</a></li><li><a href="#type_FlutterService">FlutterService</a></li><li><a href="#type_FlutterWidgetProperty">FlutterWidgetProperty</a></li><li><a href="#type_FlutterWidgetPropertyEditor">FlutterWidgetPropertyEditor</a></li><li><a href="#type_FlutterWidgetPropertyEditorKind">FlutterWidgetPropertyEditorKind</a></li><li><a href="#type_FlutterWidgetPropertyValue">FlutterWidgetPropertyValue</a></li><li><a href="#type_FlutterWidgetPropertyValueEnumItem">FlutterWidgetPropertyValueEnumItem</a></li><li><a href="#type_FoldingKind">FoldingKind</a></li><li><a href="#type_FoldingRegion">FoldingRegion</a></li><li><a href="#type_GeneralAnalysisService">GeneralAnalysisService</a></li><li><a href="#type_HighlightRegion">HighlightRegion</a></li><li><a href="#type_HighlightRegionType">HighlightRegionType</a></li><li><a href="#type_HoverInformation">HoverInformation</a></li><li><a href="#type_ImplementedClass">ImplementedClass</a></li><li><a href="#type_ImplementedMember">ImplementedMember</a></li><li><a href="#type_ImportedElementSet">ImportedElementSet</a></li><li><a href="#type_ImportedElements">ImportedElements</a></li><li><a href="#type_IncludedSuggestionRelevanceTag">IncludedSuggestionRelevanceTag</a></li><li><a href="#type_IncludedSuggestionSet">IncludedSuggestionSet</a></li><li><a href="#type_KytheEntry">KytheEntry</a></li><li><a href="#type_KytheVName">KytheVName</a></li><li><a href="#type_LibraryPathSet">LibraryPathSet</a></li><li><a href="#type_LinkedEditGroup">LinkedEditGroup</a></li><li><a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a></li><li><a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></li><li><a href="#type_Location">Location</a></li><li><a href="#type_NavigationRegion">NavigationRegion</a></li><li><a href="#type_NavigationTarget">NavigationTarget</a></li><li><a href="#type_Occurrences">Occurrences</a></li><li><a href="#type_Outline">Outline</a></li><li><a href="#type_OverriddenMember">OverriddenMember</a></li><li><a href="#type_Override">Override</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PostfixTemplateDescriptor">PostfixTemplateDescriptor</a></li><li><a href="#type_PubStatus">PubStatus</a></li><li><a href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a href="#type_RefactoringKind">RefactoringKind</a></li><li><a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href="#type_RefactoringOptions">RefactoringOptions</a></li><li><a href="#type_RefactoringProblem">RefactoringProblem</a></li><li><a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href="#type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href="#type_RequestError">RequestError</a></li><li><a href="#type_RequestErrorCode">RequestErrorCode</a></li><li><a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a></li><li><a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a></li><li><a href="#type_RuntimeCompletionExpressionTypeKind">RuntimeCompletionExpressionTypeKind</a></li><li><a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</a></li><li><a href="#type_SearchId">SearchId</a></li><li><a href="#type_SearchResult">SearchResult</a></li><li><a href="#type_SearchResultKind">SearchResultKind</a></li><li><a href="#type_ServerService">ServerService</a></li><li><a href="#type_SourceChange">SourceChange</a></li><li><a href="#type_SourceEdit">SourceEdit</a></li><li><a href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a href="#type_TypeHierarchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a href="#refactoring_EXTRACT_WIDGET">EXTRACT_WIDGET</a></li><li><a href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a href="#refactoring_RENAME">RENAME</a></li></ul></div>
 
 
 </body></html>
\ No newline at end of file
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index 2689506..fd9998b 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -350,8 +350,6 @@
 const String SERVER_NOTIFICATION_ERROR_IS_FATAL = 'isFatal';
 const String SERVER_NOTIFICATION_ERROR_MESSAGE = 'message';
 const String SERVER_NOTIFICATION_ERROR_STACK_TRACE = 'stackTrace';
-const String SERVER_NOTIFICATION_LOG = 'server.log';
-const String SERVER_NOTIFICATION_LOG_ENTRY = 'entry';
 const String SERVER_NOTIFICATION_STATUS = 'server.status';
 const String SERVER_NOTIFICATION_STATUS_ANALYSIS = 'analysis';
 const String SERVER_NOTIFICATION_STATUS_PUB = 'pub';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index 8cd904d..ac2f847 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -15871,249 +15871,18 @@
   int get hashCode => version.hashCode;
 }
 
-/// ServerLogEntry
-///
-/// {
-///   "time": int
-///   "kind": ServerLogEntryKind
-///   "data": String
-/// }
-///
-/// Clients may not extend, implement or mix-in this class.
-class ServerLogEntry implements HasToJson {
-  /// The time (milliseconds since epoch) at which the server created this log
-  /// entry.
-  int time;
-
-  /// The kind of the entry, used to determine how to interpret the "data"
-  /// field.
-  ServerLogEntryKind kind;
-
-  /// The payload of the entry, the actual format is determined by the "kind"
-  /// field.
-  String data;
-
-  ServerLogEntry(this.time, this.kind, this.data);
-
-  factory ServerLogEntry.fromJson(
-      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
-    json ??= {};
-    if (json is Map) {
-      int time;
-      if (json.containsKey('time')) {
-        time = jsonDecoder.decodeInt(jsonPath + '.time', json['time']);
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, 'time');
-      }
-      ServerLogEntryKind kind;
-      if (json.containsKey('kind')) {
-        kind = ServerLogEntryKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, 'kind');
-      }
-      String data;
-      if (json.containsKey('data')) {
-        data = jsonDecoder.decodeString(jsonPath + '.data', json['data']);
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, 'data');
-      }
-      return ServerLogEntry(time, kind, data);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, 'ServerLogEntry', json);
-    }
-  }
-
-  @override
-  Map<String, Object> toJson() {
-    var result = <String, Object>{};
-    result['time'] = time;
-    result['kind'] = kind.toJson();
-    result['data'] = data;
-    return result;
-  }
-
-  @override
-  String toString() => json.encode(toJson());
-
-  @override
-  bool operator ==(other) {
-    if (other is ServerLogEntry) {
-      return time == other.time && kind == other.kind && data == other.data;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        time,
-        kind,
-        data,
-      );
-}
-
-/// ServerLogEntryKind
-///
-/// enum {
-///   NOTIFICATION
-///   RAW
-///   REQUEST
-///   RESPONSE
-/// }
-///
-/// Clients may not extend, implement or mix-in this class.
-class ServerLogEntryKind implements Enum {
-  /// A notification from the server, such as "analysis.highlights". The "data"
-  /// field contains a JSON object with abbreviated notification.
-  static const ServerLogEntryKind NOTIFICATION =
-      ServerLogEntryKind._('NOTIFICATION');
-
-  /// Arbitrary string, describing some event that happened in the server, e.g.
-  /// starting a file analysis, and details which files were accessed. These
-  /// entries are not structured, but provide context information about
-  /// requests and notification, and can be related by "time" for further
-  /// manual analysis.
-  static const ServerLogEntryKind RAW = ServerLogEntryKind._('RAW');
-
-  /// A request from the client, as the server views it, e.g.
-  /// "edit.getAssists". The "data" field contains a JSON object with
-  /// abbreviated request.
-  static const ServerLogEntryKind REQUEST = ServerLogEntryKind._('REQUEST');
-
-  /// Various counters and measurements related to execution of a request. The
-  /// "data" field contains a JSON object with following fields:
-  ///
-  /// - "id" - the id of the request - copied from the request.
-  /// - "method" - the method of the request, e.g. "edit.getAssists".
-  /// - "clientRequestTime" - the time (milliseconds since epoch) at which the
-  ///   client made the request - copied from the request.
-  /// - "serverRequestTime" - the time (milliseconds since epoch) at which the
-  ///   server received and decoded the JSON request.
-  /// - "responseTime" - the time (milliseconds since epoch) at which the
-  ///   server created the response to be encoded into JSON and sent to the
-  ///   client.
-  static const ServerLogEntryKind RESPONSE = ServerLogEntryKind._('RESPONSE');
-
-  /// A list containing all of the enum values that are defined.
-  static const List<ServerLogEntryKind> VALUES = <ServerLogEntryKind>[
-    NOTIFICATION,
-    RAW,
-    REQUEST,
-    RESPONSE
-  ];
-
-  @override
-  final String name;
-
-  const ServerLogEntryKind._(this.name);
-
-  factory ServerLogEntryKind(String name) {
-    switch (name) {
-      case 'NOTIFICATION':
-        return NOTIFICATION;
-      case 'RAW':
-        return RAW;
-      case 'REQUEST':
-        return REQUEST;
-      case 'RESPONSE':
-        return RESPONSE;
-    }
-    throw Exception('Illegal enum value: $name');
-  }
-
-  factory ServerLogEntryKind.fromJson(
-      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
-    if (json is String) {
-      try {
-        return ServerLogEntryKind(json);
-      } catch (_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, 'ServerLogEntryKind', json);
-  }
-
-  @override
-  String toString() => 'ServerLogEntryKind.$name';
-
-  String toJson() => name;
-}
-
-/// server.log params
-///
-/// {
-///   "entry": ServerLogEntry
-/// }
-///
-/// Clients may not extend, implement or mix-in this class.
-class ServerLogParams implements HasToJson {
-  ServerLogEntry entry;
-
-  ServerLogParams(this.entry);
-
-  factory ServerLogParams.fromJson(
-      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
-    json ??= {};
-    if (json is Map) {
-      ServerLogEntry entry;
-      if (json.containsKey('entry')) {
-        entry = ServerLogEntry.fromJson(
-            jsonDecoder, jsonPath + '.entry', json['entry']);
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, 'entry');
-      }
-      return ServerLogParams(entry);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, 'server.log params', json);
-    }
-  }
-
-  factory ServerLogParams.fromNotification(Notification notification) {
-    return ServerLogParams.fromJson(
-        ResponseDecoder(null), 'params', notification.params);
-  }
-
-  @override
-  Map<String, Object> toJson() {
-    var result = <String, Object>{};
-    result['entry'] = entry.toJson();
-    return result;
-  }
-
-  Notification toNotification() {
-    return Notification('server.log', toJson());
-  }
-
-  @override
-  String toString() => json.encode(toJson());
-
-  @override
-  bool operator ==(other) {
-    if (other is ServerLogParams) {
-      return entry == other.entry;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => entry.hashCode;
-}
-
 /// ServerService
 ///
 /// enum {
-///   LOG
 ///   STATUS
 /// }
 ///
 /// Clients may not extend, implement or mix-in this class.
 class ServerService implements Enum {
-  static const ServerService LOG = ServerService._('LOG');
-
   static const ServerService STATUS = ServerService._('STATUS');
 
   /// A list containing all of the enum values that are defined.
-  static const List<ServerService> VALUES = <ServerService>[LOG, STATUS];
+  static const List<ServerService> VALUES = <ServerService>[STATUS];
 
   @override
   final String name;
@@ -16122,8 +15891,6 @@
 
   factory ServerService(String name) {
     switch (name) {
-      case 'LOG':
-        return LOG;
       case 'STATUS':
         return STATUS;
     }
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 5a3e760..26000c7 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -40,7 +40,6 @@
 import 'package:analysis_server/src/server/sdk_configuration.dart';
 import 'package:analysis_server/src/services/flutter/widget_descriptions.dart';
 import 'package:analysis_server/src/utilities/process.dart';
-import 'package:analysis_server/src/utilities/request_statistics.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/exception/exception.dart';
@@ -131,7 +130,6 @@
     InstrumentationService instrumentationService, {
     http.Client? httpClient,
     ProcessRunner? processRunner,
-    RequestStatisticsHelper? requestStatistics,
     DiagnosticServer? diagnosticServer,
     this.detachableFileSystemManager,
     // Disable to avoid using this in unit tests.
@@ -146,7 +144,6 @@
           httpClient,
           processRunner,
           NotificationManager(channel, baseResourceProvider.pathContext),
-          requestStatistics: requestStatistics,
           enableBazelWatcher: enableBazelWatcher,
         ) {
     var contextManagerCallbacks =
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index 9e758b6..7779957 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -26,8 +26,6 @@
 import 'package:analysis_server/src/utilities/file_string_sink.dart';
 import 'package:analysis_server/src/utilities/null_string_sink.dart';
 import 'package:analysis_server/src/utilities/process.dart';
-import 'package:analysis_server/src/utilities/request_statistics.dart';
-import 'package:analysis_server/src/utilities/tee_string_sink.dart';
 import 'package:analyzer/dart/analysis/analysis_context.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
@@ -127,8 +125,6 @@
   /// Performance information before initial analysis is complete.
   final ServerPerformance performanceDuringStartup = ServerPerformance();
 
-  RequestStatisticsHelper? requestStatistics;
-
   PerformanceLog? analysisPerformanceLogger;
 
   /// The set of the files that are currently priority.
@@ -155,7 +151,6 @@
     http.Client? httpClient,
     ProcessRunner? processRunner,
     this.notificationManager, {
-    this.requestStatistics,
     bool enableBazelWatcher = false,
   })  : resourceProvider = OverlayResourceProvider(baseResourceProvider),
         pubApi = PubApi(instrumentationService, httpClient,
@@ -195,10 +190,6 @@
         sink = FileStringSink(path);
       }
     }
-    final requestStatistics = this.requestStatistics;
-    if (requestStatistics != null) {
-      sink = TeeStringSink(sink, requestStatistics.perfLoggerStringSink);
-    }
     final analysisPerformanceLogger =
         this.analysisPerformanceLogger = PerformanceLog(sink);
 
diff --git a/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart b/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart
index bfbc6ba..869c9b9 100644
--- a/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart
+++ b/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart
@@ -8,7 +8,6 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/src/channel/channel.dart';
-import 'package:analysis_server/src/utilities/request_statistics.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 
 /// Instances of the class [ByteStreamClientChannel] implement a
@@ -79,9 +78,6 @@
   /// The instrumentation service that is to be used by this analysis server.
   final InstrumentationService _instrumentationService;
 
-  /// The helper for recording request / response statistics.
-  final RequestStatisticsHelper? _requestStatistics;
-
   /// Completer that will be signalled when the input stream is closed.
   final Completer _closed = Completer();
 
@@ -89,11 +85,7 @@
   bool _closeRequested = false;
 
   ByteStreamServerChannel(
-      this._input, this._output, this._instrumentationService,
-      {RequestStatisticsHelper? requestStatistics})
-      : _requestStatistics = requestStatistics {
-    _requestStatistics?.serverChannel = this;
-  }
+      this._input, this._output, this._instrumentationService);
 
   /// Future that will be completed when the input stream is closed.
   Future get closed {
@@ -129,10 +121,7 @@
     }
     var jsonEncoding = json.encode(notification.toJson());
     _outputLine(jsonEncoding);
-    if (!identical(notification.event, 'server.log')) {
-      _instrumentationService.logNotification(jsonEncoding);
-      _requestStatistics?.logNotification(notification);
-    }
+    _instrumentationService.logNotification(jsonEncoding);
   }
 
   @override
@@ -142,7 +131,6 @@
     if (_closeRequested) {
       return;
     }
-    _requestStatistics?.addResponse(response);
     var jsonEncoding = json.encode(response.toJson());
     _outputLine(jsonEncoding);
     _instrumentationService.logResponse(jsonEncoding);
@@ -172,7 +160,6 @@
       sendResponse(Response.invalidRequestFormat());
       return;
     }
-    _requestStatistics?.addRequest(request);
     onRequest(request);
   }
 }
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 06753db..d44110b 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -501,8 +501,6 @@
           return;
         }
 
-        server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
-
         if (offset < 0 || offset > resolvedUnit.content.length) {
           server.sendResponse(Response.invalidParameter(
               request,
diff --git a/pkg/analysis_server/lib/src/domain_server.dart b/pkg/analysis_server/lib/src/domain_server.dart
index 559f3b8..78a3cee 100644
--- a/pkg/analysis_server/lib/src/domain_server.dart
+++ b/pkg/analysis_server/lib/src/domain_server.dart
@@ -49,9 +49,6 @@
     server.serverServices =
         ServerSetSubscriptionsParams.fromRequest(request).subscriptions.toSet();
 
-    server.requestStatistics?.isNotificationSubscribed =
-        server.serverServices.contains(ServerService.LOG);
-
     return ServerSetSubscriptionsResult().toResponse(request.id);
   }
 
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index b73448c..9f90b8b 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -207,7 +207,6 @@
     //
     var responses =
         await waitForResponses(pluginFutures, requestParameters: requestParams);
-    server.requestStatistics?.addItemTimeNow(request, 'pluginResponses');
     var converter = ResultConverter();
     var pluginChanges = <plugin.PrioritizedSourceChange>[];
     for (var response in responses) {
@@ -268,7 +267,6 @@
     //
     var responses =
         await waitForResponses(pluginFutures, requestParameters: requestParams);
-    server.requestStatistics?.addItemTimeNow(request, 'pluginResponses');
     var converter = ResultConverter();
     for (var response in responses) {
       var result = plugin.EditGetFixesResult.fromResponse(response);
@@ -593,7 +591,6 @@
       Request request, String file, int offset) async {
     var errorFixesList = <AnalysisErrorFixes>[];
     var result = await server.getResolvedUnit(file);
-    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
     if (result != null) {
       var lineInfo = result.lineInfo;
       var requestLine = lineInfo.getLocation(offset).lineNumber;
@@ -644,7 +641,6 @@
         }
       }
     }
-    server.requestStatistics?.addItemTimeNow(request, 'computedFixes');
     return errorFixesList;
   }
 
@@ -740,7 +736,6 @@
     var changes = <SourceChange>[];
 
     var result = await server.getResolvedUnit(file);
-    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
 
     if (result != null) {
       var context = DartAssistContextImpl(
@@ -770,8 +765,6 @@
           'parameters': parametersFile,
         });
       }
-
-      server.requestStatistics?.addItemTimeNow(request, 'computedAssists');
     }
 
     return changes;
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 5016f76..a44869e 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -24,7 +24,6 @@
 import 'package:analysis_server/src/server/sdk_configuration.dart';
 import 'package:analysis_server/src/server/stdio_server.dart';
 import 'package:analysis_server/src/socket_server.dart';
-import 'package:analysis_server/src/utilities/request_statistics.dart';
 import 'package:analysis_server/starter.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/instrumentation/file_instrumentation.dart';
@@ -303,7 +302,6 @@
           dartSdkManager,
           crashReportingAttachmentsBuilder,
           instrumentationService,
-          RequestStatisticsHelper(),
           analytics,
           diagnosticServerPort,
           errorNotifier,
@@ -318,7 +316,6 @@
     DartSdkManager dartSdkManager,
     CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder,
     InstrumentationService instrumentationService,
-    RequestStatisticsHelper requestStatistics,
     telemetry.Analytics analytics,
     int? diagnosticServerPort,
     ErrorNotifier errorNotifier,
@@ -353,7 +350,6 @@
         dartSdkManager,
         crashReportingAttachmentsBuilder,
         instrumentationService,
-        requestStatistics,
         diagnosticServer,
         detachableFileSystemManager);
     httpServer = HttpAnalysisServer(socketServer);
diff --git a/pkg/analysis_server/lib/src/server/isolate_analysis_server.dart b/pkg/analysis_server/lib/src/server/isolate_analysis_server.dart
index 2ef30d3..882f759 100644
--- a/pkg/analysis_server/lib/src/server/isolate_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/server/isolate_analysis_server.dart
@@ -28,7 +28,6 @@
       serverIsolateChannel.stream,
       IOSink(serverIsolateChannel.sink),
       socketServer.instrumentationService,
-      requestStatistics: socketServer.requestStatistics,
     );
     socketServer.createAnalysisServer(serverChannel);
     await serverChannel.closed;
diff --git a/pkg/analysis_server/lib/src/server/stdio_server.dart b/pkg/analysis_server/lib/src/server/stdio_server.dart
index 06c5030..78a036b 100644
--- a/pkg/analysis_server/lib/src/server/stdio_server.dart
+++ b/pkg/analysis_server/lib/src/server/stdio_server.dart
@@ -27,7 +27,6 @@
       stdin,
       stdout,
       socketServer.instrumentationService,
-      requestStatistics: socketServer.requestStatistics,
     );
     socketServer.createAnalysisServer(serverChannel);
     return serverChannel.closed;
diff --git a/pkg/analysis_server/lib/src/socket_server.dart b/pkg/analysis_server/lib/src/socket_server.dart
index 59cafe6..5763cfe 100644
--- a/pkg/analysis_server/lib/src/socket_server.dart
+++ b/pkg/analysis_server/lib/src/socket_server.dart
@@ -10,7 +10,6 @@
 import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
 import 'package:analysis_server/src/server/detachable_filesystem_manager.dart';
 import 'package:analysis_server/src/server/diagnostic_server.dart';
-import 'package:analysis_server/src/utilities/request_statistics.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/generated/sdk.dart';
@@ -36,7 +35,6 @@
 
   final CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder;
   final InstrumentationService instrumentationService;
-  final RequestStatisticsHelper? requestStatistics;
   @override
   final DiagnosticServer? diagnosticServer;
   final DetachableFileSystemManager? detachableFileSystemManager;
@@ -51,7 +49,6 @@
       this.sdkManager,
       this.crashReportingAttachmentsBuilder,
       this.instrumentationService,
-      this.requestStatistics,
       this.diagnosticServer,
       this.detachableFileSystemManager);
 
@@ -78,7 +75,6 @@
       sdkManager,
       crashReportingAttachmentsBuilder,
       instrumentationService,
-      requestStatistics: requestStatistics,
       diagnosticServer: diagnosticServer,
       detachableFileSystemManager: detachableFileSystemManager,
       enableBazelWatcher: true,
diff --git a/pkg/analysis_server/lib/src/utilities/request_statistics.dart b/pkg/analysis_server/lib/src/utilities/request_statistics.dart
deleted file mode 100644
index 7cdf234..0000000
--- a/pkg/analysis_server/lib/src/utilities/request_statistics.dart
+++ /dev/null
@@ -1,256 +0,0 @@
-// Copyright (c) 2019, 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 'dart:io';
-
-import 'package:analysis_server/protocol/protocol.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/channel/byte_stream_channel.dart';
-
-/// Helper for tracking request handling statistics.
-///
-/// All [DateTime] are local, not UTC.
-class RequestStatisticsHelper {
-  final String _sdkVersion = Platform.version.split(' ').first;
-
-  final Map<String, _RequestStatistics> _statisticsMap = {};
-
-  /// The [StringSink] to which performance logger should copy its output.
-  late final _ServerLogStringSink _perfLoggerStringSink =
-      _ServerLogStringSink(this);
-
-  /// The channel to send 'server.log' notifications to.
-  ByteStreamServerChannel? _serverChannel;
-
-  /// Is `true` if the client subscribed for "server.log" notification.
-  bool _isNotificationSubscribed = false;
-
-  RequestStatisticsHelper();
-
-  /// Set whether the client subscribed for "server.log" notification.
-  set isNotificationSubscribed(bool value) {
-    _isNotificationSubscribed = value;
-  }
-
-  /// The [StringSink] to which performance logger should copy its output.
-  StringSink get perfLoggerStringSink => _perfLoggerStringSink;
-
-  /// The channel sets itself using this method.
-  set serverChannel(ByteStreamServerChannel serverChannel) {
-    _serverChannel = serverChannel;
-  }
-
-  /// Add a time marker item to the data associated with the [request].
-  void addItemTimeNow(Request request, String name) {
-    var id = request.id;
-    var stat = _statisticsMap[id];
-    if (stat != null) {
-      stat.items.add(
-        _RequestStatisticsItem(
-          name,
-          timeValue: DateTime.now(),
-        ),
-      );
-    }
-  }
-
-  /// The new [request] was received. Record the time when the client sent it,
-  /// and the time when the server received it (now).
-  void addRequest(Request request) {
-    _logRequest(request);
-
-    var id = request.id;
-
-    var clientRequestMilliseconds = request.clientRequestTime;
-    if (clientRequestMilliseconds == null) {
-      return;
-    }
-    var clientRequestTime = DateTime.fromMillisecondsSinceEpoch(
-      clientRequestMilliseconds,
-    );
-
-    var serverRequestTime = DateTime.now();
-
-    _statisticsMap[id] = _RequestStatistics(
-      id,
-      request.method,
-      clientRequestTime,
-      serverRequestTime,
-    );
-  }
-
-  /// The server finished processing a request, and sends the [response].
-  /// Record the time when the response is about to be sent to the client.
-  void addResponse(Response response) {
-    if (!_isNotificationSubscribed) return;
-    if (_serverChannel == null) return;
-
-    var id = response.id;
-    var stat = _statisticsMap.remove(id);
-    if (stat != null) {
-      var responseTime = DateTime.now();
-      _sendLogEntry(ServerLogEntryKind.RESPONSE, stat.toJson(responseTime));
-    }
-  }
-
-  void logNotification(Notification notification) {
-    if (!_isNotificationSubscribed) return;
-    if (_serverChannel == null) return;
-
-    var event = notification.event;
-
-    // Don't log large and often notifications.
-    if (event == 'analysis.errors' ||
-        event == 'completion.availableSuggestions') {
-      return;
-    }
-
-    var params = notification.params;
-    if (params == null) {
-      return;
-    }
-
-    var map = <String, Object>{
-      'event': event,
-    };
-
-    if (event == 'analysis.highlights' ||
-        event == 'analysis.implemented' ||
-        event == 'analysis.navigation' ||
-        event == 'analysis.outline' ||
-        event == 'analysis.overrides') {
-      map['file'] = params['file'] as String;
-    }
-
-    if (event == 'server.status') {
-      var analysis = params['analysis'];
-      if (analysis is Map<String, Object?>) {
-        map['isAnalyzing'] = analysis['isAnalyzing'] as bool;
-      }
-    }
-
-    _sendLogEntry(ServerLogEntryKind.NOTIFICATION, map);
-  }
-
-  void _logRequest(Request request) {
-    if (!_isNotificationSubscribed) return;
-    if (_serverChannel == null) return;
-
-    var method = request.method;
-    var map = <String, Object>{
-      'id': request.id,
-      'method': method,
-    };
-
-    {
-      var clientRequestTime = request.clientRequestTime;
-      if (clientRequestTime != null) {
-        map['clientRequestTime'] = clientRequestTime;
-      }
-    }
-
-    if (method == 'analysis.updateContent') {
-      var filesMap = request.params['files'];
-      if (filesMap is Map<String, Object>) {
-        map['files'] = filesMap.keys.toList();
-      }
-    } else {
-      map = request.toJson();
-    }
-
-    _sendLogEntry(ServerLogEntryKind.REQUEST, map);
-  }
-
-  void _sendLogEntry(ServerLogEntryKind kind, Object data) {
-    if (!_isNotificationSubscribed) return;
-
-    var serverChannel = _serverChannel;
-    if (serverChannel == null) return;
-
-    serverChannel.sendNotification(
-      Notification(
-        'server.log',
-        <String, Object>{
-          'time': DateTime.now().millisecondsSinceEpoch,
-          'kind': kind.toJson(),
-          'data': data,
-          'sdkVersion': _sdkVersion,
-        },
-      ),
-    );
-  }
-}
-
-class _RequestStatistics {
-  final String id;
-  final String method;
-  final DateTime clientRequestTime;
-  final DateTime serverRequestTime;
-  final List<_RequestStatisticsItem> items = [];
-
-  _RequestStatistics(
-    this.id,
-    this.method,
-    this.clientRequestTime,
-    this.serverRequestTime,
-  );
-
-  Map<String, Object> toJson(DateTime responseTime) {
-    var map = {
-      'id': id,
-      'method': method,
-      'clientRequestTime': clientRequestTime.millisecondsSinceEpoch,
-      'serverRequestTime': serverRequestTime.millisecondsSinceEpoch,
-      'responseTime': responseTime.millisecondsSinceEpoch,
-    };
-    if (items.isNotEmpty) {
-      map['items'] = items.map((item) => item.toJson()).toList();
-    }
-    return map;
-  }
-}
-
-class _RequestStatisticsItem {
-  final String name;
-  final DateTime? timeValue;
-
-  _RequestStatisticsItem(this.name, {this.timeValue});
-
-  Map<String, Object> toJson() {
-    final timeValue = this.timeValue;
-    if (timeValue != null) {
-      return {
-        'name': name,
-        'timeValue': timeValue.millisecondsSinceEpoch,
-      };
-    }
-    throw StateError('Unknown value: $name');
-  }
-}
-
-class _ServerLogStringSink implements StringSink {
-  final RequestStatisticsHelper helper;
-
-  _ServerLogStringSink(this.helper);
-
-  @override
-  void write(Object? obj) {
-    throw UnimplementedError();
-  }
-
-  @override
-  void writeAll(Iterable objects, [String separator = '']) {
-    throw UnimplementedError();
-  }
-
-  @override
-  void writeCharCode(int charCode) {
-    throw UnimplementedError();
-  }
-
-  @override
-  void writeln([Object? obj = '']) {
-    helper._sendLogEntry(ServerLogEntryKind.RAW, '$obj');
-  }
-}
diff --git a/pkg/analysis_server/lib/src/utilities/tee_string_sink.dart b/pkg/analysis_server/lib/src/utilities/tee_string_sink.dart
deleted file mode 100644
index 2b715c2..0000000
--- a/pkg/analysis_server/lib/src/utilities/tee_string_sink.dart
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2019, 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.
-
-/// A [StringSink] that writes into two other [StringSink]s.
-class TeeStringSink implements StringSink {
-  final StringSink sink1;
-  final StringSink sink2;
-
-  TeeStringSink(this.sink1, this.sink2);
-
-  @override
-  void write(Object? obj) {
-    sink1.write(obj);
-    sink2.write(obj);
-  }
-
-  @override
-  void writeAll(Iterable<dynamic> objects, [String separator = '']) {
-    sink1.writeAll(objects, separator);
-    sink2.writeAll(objects, separator);
-  }
-
-  @override
-  void writeCharCode(int charCode) {
-    sink1.writeCharCode(charCode);
-    sink2.writeCharCode(charCode);
-  }
-
-  @override
-  void writeln([Object? obj = '']) {
-    sink1.writeln(obj);
-    sink2.writeln(obj);
-  }
-}
diff --git a/pkg/analysis_server/test/integration/support/integration_test_methods.dart b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
index 9a707cf..b84f147b 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -112,16 +112,6 @@
   /// Stream controller for [onServerError].
   late StreamController<ServerErrorParams> _onServerError;
 
-  /// The stream of entries describing events happened in the server.
-  ///
-  /// Parameters
-  ///
-  /// entry: ServerLogEntry
-  late Stream<ServerLogParams> onServerLog;
-
-  /// Stream controller for [onServerLog].
-  late StreamController<ServerLogParams> _onServerLog;
-
   /// Reports the current status of the server. Parameters are omitted if there
   /// has been no change in the status represented by that parameter.
   ///
@@ -2586,8 +2576,6 @@
     onServerConnected = _onServerConnected.stream.asBroadcastStream();
     _onServerError = StreamController<ServerErrorParams>(sync: true);
     onServerError = _onServerError.stream.asBroadcastStream();
-    _onServerLog = StreamController<ServerLogParams>(sync: true);
-    onServerLog = _onServerLog.stream.asBroadcastStream();
     _onServerStatus = StreamController<ServerStatusParams>(sync: true);
     onServerStatus = _onServerStatus.stream.asBroadcastStream();
     _onAnalysisAnalyzedFiles =
@@ -2660,10 +2648,6 @@
         _onServerError
             .add(ServerErrorParams.fromJson(decoder, 'params', params));
         break;
-      case 'server.log':
-        outOfTestExpect(params, isServerLogParams);
-        _onServerLog.add(ServerLogParams.fromJson(decoder, 'params', params));
-        break;
       case 'server.status':
         outOfTestExpect(params, isServerStatusParams);
         _onServerStatus
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index 5fd8c3c..ae6e670 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -1559,35 +1559,12 @@
   'WRITE'
 ]);
 
-/// ServerLogEntry
-///
-/// {
-///   "time": int
-///   "kind": ServerLogEntryKind
-///   "data": String
-/// }
-final Matcher isServerLogEntry = LazyMatcher(() => MatchesJsonObject(
-    'ServerLogEntry',
-    {'time': isInt, 'kind': isServerLogEntryKind, 'data': isString}));
-
-/// ServerLogEntryKind
-///
-/// enum {
-///   NOTIFICATION
-///   RAW
-///   REQUEST
-///   RESPONSE
-/// }
-final Matcher isServerLogEntryKind = MatchesEnum(
-    'ServerLogEntryKind', ['NOTIFICATION', 'RAW', 'REQUEST', 'RESPONSE']);
-
 /// ServerService
 ///
 /// enum {
-///   LOG
 ///   STATUS
 /// }
-final Matcher isServerService = MatchesEnum('ServerService', ['LOG', 'STATUS']);
+final Matcher isServerService = MatchesEnum('ServerService', ['STATUS']);
 
 /// SourceChange
 ///
@@ -3044,14 +3021,6 @@
 final Matcher isServerGetVersionResult = LazyMatcher(
     () => MatchesJsonObject('server.getVersion result', {'version': isString}));
 
-/// server.log params
-///
-/// {
-///   "entry": ServerLogEntry
-/// }
-final Matcher isServerLogParams = LazyMatcher(
-    () => MatchesJsonObject('server.log params', {'entry': isServerLogEntry}));
-
 /// server.setSubscriptions params
 ///
 /// {
diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart
index 1c7bb82..e82b6b8 100644
--- a/pkg/analysis_server/test/socket_server_test.dart
+++ b/pkg/analysis_server/test/socket_server_test.dart
@@ -101,13 +101,13 @@
   static SocketServer _createSocketServer(MockServerChannel channel) {
     final errorNotifier = ErrorNotifier();
     final server = SocketServer(
-        AnalysisServerOptions(),
-        DartSdkManager(''),
-        CrashReportingAttachmentsBuilder.empty,
-        errorNotifier,
-        null,
-        null,
-        null);
+      AnalysisServerOptions(),
+      DartSdkManager(''),
+      CrashReportingAttachmentsBuilder.empty,
+      errorNotifier,
+      null,
+      null,
+    );
 
     server.createAnalysisServer(channel);
     errorNotifier.server = server.analysisServer;
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ServerLogEntry.java b/pkg/analysis_server/tool/spec/generated/java/types/ServerLogEntry.java
deleted file mode 100644
index c590fe5..0000000
--- a/pkg/analysis_server/tool/spec/generated/java/types/ServerLogEntry.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2019, 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.
- *
- * This file has been automatically generated. Please do not edit it manually.
- * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
- */
-package org.dartlang.analysis.server.protocol;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import com.google.common.collect.Lists;
-import com.google.dart.server.utilities.general.JsonUtilities;
-import com.google.dart.server.utilities.general.ObjectUtilities;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-import java.util.ArrayList;
-import java.util.Iterator;
-import org.apache.commons.lang3.StringUtils;
-
-/**
- * A log entry from the server.
- *
- * @coverage dart.server.generated.types
- */
-@SuppressWarnings("unused")
-public class ServerLogEntry {
-
-  public static final ServerLogEntry[] EMPTY_ARRAY = new ServerLogEntry[0];
-
-  public static final List<ServerLogEntry> EMPTY_LIST = Lists.newArrayList();
-
-  /**
-   * The time (milliseconds since epoch) at which the server created this log entry.
-   */
-  private final int time;
-
-  /**
-   * The kind of the entry, used to determine how to interpret the "data" field.
-   */
-  private final String kind;
-
-  /**
-   * The payload of the entry, the actual format is determined by the "kind" field.
-   */
-  private final String data;
-
-  /**
-   * Constructor for {@link ServerLogEntry}.
-   */
-  public ServerLogEntry(int time, String kind, String data) {
-    this.time = time;
-    this.kind = kind;
-    this.data = data;
-  }
-
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof ServerLogEntry) {
-      ServerLogEntry other = (ServerLogEntry) obj;
-      return
-        other.time == time &&
-        ObjectUtilities.equals(other.kind, kind) &&
-        ObjectUtilities.equals(other.data, data);
-    }
-    return false;
-  }
-
-  public static ServerLogEntry fromJson(JsonObject jsonObject) {
-    int time = jsonObject.get("time").getAsInt();
-    String kind = jsonObject.get("kind").getAsString();
-    String data = jsonObject.get("data").getAsString();
-    return new ServerLogEntry(time, kind, data);
-  }
-
-  public static List<ServerLogEntry> fromJsonArray(JsonArray jsonArray) {
-    if (jsonArray == null) {
-      return EMPTY_LIST;
-    }
-    ArrayList<ServerLogEntry> list = new ArrayList<ServerLogEntry>(jsonArray.size());
-    Iterator<JsonElement> iterator = jsonArray.iterator();
-    while (iterator.hasNext()) {
-      list.add(fromJson(iterator.next().getAsJsonObject()));
-    }
-    return list;
-  }
-
-  /**
-   * The payload of the entry, the actual format is determined by the "kind" field.
-   */
-  public String getData() {
-    return data;
-  }
-
-  /**
-   * The kind of the entry, used to determine how to interpret the "data" field.
-   */
-  public String getKind() {
-    return kind;
-  }
-
-  /**
-   * The time (milliseconds since epoch) at which the server created this log entry.
-   */
-  public int getTime() {
-    return time;
-  }
-
-  @Override
-  public int hashCode() {
-    HashCodeBuilder builder = new HashCodeBuilder();
-    builder.append(time);
-    builder.append(kind);
-    builder.append(data);
-    return builder.toHashCode();
-  }
-
-  public JsonObject toJson() {
-    JsonObject jsonObject = new JsonObject();
-    jsonObject.addProperty("time", time);
-    jsonObject.addProperty("kind", kind);
-    jsonObject.addProperty("data", data);
-    return jsonObject;
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder builder = new StringBuilder();
-    builder.append("[");
-    builder.append("time=");
-    builder.append(time + ", ");
-    builder.append("kind=");
-    builder.append(kind + ", ");
-    builder.append("data=");
-    builder.append(data);
-    builder.append("]");
-    return builder.toString();
-  }
-
-}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ServerLogEntryKind.java b/pkg/analysis_server/tool/spec/generated/java/types/ServerLogEntryKind.java
deleted file mode 100644
index 9964b6f..0000000
--- a/pkg/analysis_server/tool/spec/generated/java/types/ServerLogEntryKind.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2019, 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.
- *
- * This file has been automatically generated. Please do not edit it manually.
- * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
- */
-package org.dartlang.analysis.server.protocol;
-
-/**
- * An enumeration of the kinds of server long entries.
- *
- * @coverage dart.server.generated.types
- */
-public class ServerLogEntryKind {
-
-  /**
-   * A notification from the server, such as "analysis.highlights". The "data" field contains a JSON
-   * object with abbreviated notification.
-   */
-  public static final String NOTIFICATION = "NOTIFICATION";
-
-  /**
-   * Arbitrary string, describing some event that happened in the server, e.g. starting a file
-   * analysis, and details which files were accessed. These entries are not structured, but provide
-   * context information about requests and notification, and can be related by "time" for further
-   * manual analysis.
-   */
-  public static final String RAW = "RAW";
-
-  /**
-   * A request from the client, as the server views it, e.g. "edit.getAssists". The "data" field
-   * contains a JSON object with abbreviated request.
-   */
-  public static final String REQUEST = "REQUEST";
-
-  /**
-   * Various counters and measurements related to execution of a request. The "data" field contains a
-   * JSON object with following fields:
-   *
-   * - "id" - the id of the request - copied from the request.
-   * - "method" - the method of the request, e.g. "edit.getAssists".
-   * - "clientRequestTime" - the time (milliseconds since epoch) at which the client made the request
-   *   - copied from the request.
-   * - "serverRequestTime" - the time (milliseconds since epoch) at which the server received and
-   *   decoded the JSON request.
-   * - "responseTime" - the time (milliseconds since epoch) at which the server created the response
-   *   to be encoded into JSON and sent to the client.
-   */
-  public static final String RESPONSE = "RESPONSE";
-
-}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java b/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
index 99f51b9..fed7a98 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
@@ -15,8 +15,6 @@
  */
 public class ServerService {
 
-  public static final String LOG = "LOG";
-
   public static final String STATUS = "STATUS";
 
 }
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index aa08d74..cbbe829 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -354,16 +354,6 @@
       </field>
     </params>
   </notification>
-  <notification event="log" experimental="true">
-    <p>
-      The stream of entries describing events happened in the server.
-    </p>
-    <params>
-      <field name="entry">
-        <ref>ServerLogEntry</ref>
-      </field>
-    </params>
-  </notification>
   <notification event="status">
     <p>
       Reports the current status of the server. Parameters are
@@ -5324,7 +5314,6 @@
       An enumeration of the services provided by the server domain.
     </p>
     <enum>
-      <value><code>LOG</code></value>
       <value><code>STATUS</code></value>
     </enum>
   </type>
@@ -5399,94 +5388,6 @@
       </field>
     </object>
   </type>
-  <type name="ServerLogEntry" experimental="true">
-    <p>
-      A log entry from the server.
-    </p>
-    <object>
-      <field name="time">
-        <ref>int</ref>
-        <p>
-          The time (milliseconds since epoch) at which the server created
-          this log entry.
-        </p>
-      </field>
-      <field name="kind" >
-        <ref>ServerLogEntryKind</ref>
-        <p>
-          The kind of the entry, used to determine how to interpret the "data"
-          field.
-        </p>
-      </field>
-      <field name="data">
-        <ref>String</ref>
-        <p>
-          The payload of the entry, the actual format is determined by the
-          "kind" field.
-        </p>
-      </field>
-    </object>
-  </type>
-  <type name="ServerLogEntryKind" experimental="true">
-    <p>
-      An enumeration of the kinds of server long entries.
-    </p>
-    <enum>
-      <value>
-        <code>NOTIFICATION</code>
-        <p>
-          A notification from the server, such as "analysis.highlights".
-          The "data" field contains a JSON object with abbreviated notification.
-        </p>
-      </value>
-      <value>
-        <code>RAW</code>
-        <p>
-          Arbitrary string, describing some event that happened in the server,
-          e.g. starting a file analysis, and details which files were accessed.
-          These entries are not structured, but provide context information
-          about requests and notification, and can be related by "time" for
-          further manual analysis.
-        </p>
-      </value>
-      <value>
-        <code>REQUEST</code>
-        <p>
-          A request from the client, as the server views it, e.g.
-          "edit.getAssists". The "data" field contains a JSON object with
-          abbreviated request.
-        </p>
-      </value>
-      <value>
-        <code>RESPONSE</code>
-        <p>
-          Various counters and measurements related to execution of a request.
-          The "data" field contains a JSON object with following fields:
-        </p>
-        <ul>
-          <li>
-            "id" - the id of the request - copied from the request.
-          </li>
-          <li>
-            "method" - the method of the request, e.g. "edit.getAssists".
-          </li>
-          <li>
-            "clientRequestTime" - the time (milliseconds since epoch) at which
-            the client made the request - copied from the request.
-          </li>
-          <li>
-            "serverRequestTime" - the time (milliseconds since epoch) at which
-            the server received and decoded the JSON request.
-          </li>
-          <li>
-            "responseTime" - the time (milliseconds since epoch) at which the
-            server created the response to be encoded into JSON and sent to the
-            client.
-          </li>
-        </ul>
-      </value>
-    </enum>
-  </type>
 </types>
 <refactorings>
   <h2><a name="refactorings">Refactorings</a></h2>
diff --git a/pkg/analysis_server_client/lib/handler/notification_handler.dart b/pkg/analysis_server_client/lib/handler/notification_handler.dart
index 2d8715a..f7ec39c 100644
--- a/pkg/analysis_server_client/lib/handler/notification_handler.dart
+++ b/pkg/analysis_server_client/lib/handler/notification_handler.dart
@@ -99,9 +99,6 @@
       case SERVER_NOTIFICATION_ERROR:
         onServerError(ServerErrorParams.fromJson(decoder, 'params', params));
         break;
-      case SERVER_NOTIFICATION_LOG:
-        onServerLog(ServerLogParams.fromJson(decoder, 'params', params));
-        break;
       case SERVER_NOTIFICATION_STATUS:
         onServerStatus(ServerStatusParams.fromJson(decoder, 'params', params));
         break;
@@ -279,9 +276,6 @@
   /// notification.
   void onServerError(ServerErrorParams params) {}
 
-  /// The stream of entries describing events happened in the server.
-  void onServerLog(ServerLogParams params) {}
-
   /// Reports the current status of the server. Parameters are
   /// omitted if there has been no change in the status
   /// represented by that parameter.
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
index 2689506..fd9998b 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
@@ -350,8 +350,6 @@
 const String SERVER_NOTIFICATION_ERROR_IS_FATAL = 'isFatal';
 const String SERVER_NOTIFICATION_ERROR_MESSAGE = 'message';
 const String SERVER_NOTIFICATION_ERROR_STACK_TRACE = 'stackTrace';
-const String SERVER_NOTIFICATION_LOG = 'server.log';
-const String SERVER_NOTIFICATION_LOG_ENTRY = 'entry';
 const String SERVER_NOTIFICATION_STATUS = 'server.status';
 const String SERVER_NOTIFICATION_STATUS_ANALYSIS = 'analysis';
 const String SERVER_NOTIFICATION_STATUS_PUB = 'pub';
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
index 2dcbd32..ad1ed76 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
@@ -15871,249 +15871,18 @@
   int get hashCode => version.hashCode;
 }
 
-/// ServerLogEntry
-///
-/// {
-///   "time": int
-///   "kind": ServerLogEntryKind
-///   "data": String
-/// }
-///
-/// Clients may not extend, implement or mix-in this class.
-class ServerLogEntry implements HasToJson {
-  /// The time (milliseconds since epoch) at which the server created this log
-  /// entry.
-  int time;
-
-  /// The kind of the entry, used to determine how to interpret the "data"
-  /// field.
-  ServerLogEntryKind kind;
-
-  /// The payload of the entry, the actual format is determined by the "kind"
-  /// field.
-  String data;
-
-  ServerLogEntry(this.time, this.kind, this.data);
-
-  factory ServerLogEntry.fromJson(
-      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
-    json ??= {};
-    if (json is Map) {
-      int time;
-      if (json.containsKey('time')) {
-        time = jsonDecoder.decodeInt(jsonPath + '.time', json['time']);
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, 'time');
-      }
-      ServerLogEntryKind kind;
-      if (json.containsKey('kind')) {
-        kind = ServerLogEntryKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, 'kind');
-      }
-      String data;
-      if (json.containsKey('data')) {
-        data = jsonDecoder.decodeString(jsonPath + '.data', json['data']);
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, 'data');
-      }
-      return ServerLogEntry(time, kind, data);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, 'ServerLogEntry', json);
-    }
-  }
-
-  @override
-  Map<String, Object> toJson() {
-    var result = <String, Object>{};
-    result['time'] = time;
-    result['kind'] = kind.toJson();
-    result['data'] = data;
-    return result;
-  }
-
-  @override
-  String toString() => json.encode(toJson());
-
-  @override
-  bool operator ==(other) {
-    if (other is ServerLogEntry) {
-      return time == other.time && kind == other.kind && data == other.data;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => Object.hash(
-        time,
-        kind,
-        data,
-      );
-}
-
-/// ServerLogEntryKind
-///
-/// enum {
-///   NOTIFICATION
-///   RAW
-///   REQUEST
-///   RESPONSE
-/// }
-///
-/// Clients may not extend, implement or mix-in this class.
-class ServerLogEntryKind implements Enum {
-  /// A notification from the server, such as "analysis.highlights". The "data"
-  /// field contains a JSON object with abbreviated notification.
-  static const ServerLogEntryKind NOTIFICATION =
-      ServerLogEntryKind._('NOTIFICATION');
-
-  /// Arbitrary string, describing some event that happened in the server, e.g.
-  /// starting a file analysis, and details which files were accessed. These
-  /// entries are not structured, but provide context information about
-  /// requests and notification, and can be related by "time" for further
-  /// manual analysis.
-  static const ServerLogEntryKind RAW = ServerLogEntryKind._('RAW');
-
-  /// A request from the client, as the server views it, e.g.
-  /// "edit.getAssists". The "data" field contains a JSON object with
-  /// abbreviated request.
-  static const ServerLogEntryKind REQUEST = ServerLogEntryKind._('REQUEST');
-
-  /// Various counters and measurements related to execution of a request. The
-  /// "data" field contains a JSON object with following fields:
-  ///
-  /// - "id" - the id of the request - copied from the request.
-  /// - "method" - the method of the request, e.g. "edit.getAssists".
-  /// - "clientRequestTime" - the time (milliseconds since epoch) at which the
-  ///   client made the request - copied from the request.
-  /// - "serverRequestTime" - the time (milliseconds since epoch) at which the
-  ///   server received and decoded the JSON request.
-  /// - "responseTime" - the time (milliseconds since epoch) at which the
-  ///   server created the response to be encoded into JSON and sent to the
-  ///   client.
-  static const ServerLogEntryKind RESPONSE = ServerLogEntryKind._('RESPONSE');
-
-  /// A list containing all of the enum values that are defined.
-  static const List<ServerLogEntryKind> VALUES = <ServerLogEntryKind>[
-    NOTIFICATION,
-    RAW,
-    REQUEST,
-    RESPONSE
-  ];
-
-  @override
-  final String name;
-
-  const ServerLogEntryKind._(this.name);
-
-  factory ServerLogEntryKind(String name) {
-    switch (name) {
-      case 'NOTIFICATION':
-        return NOTIFICATION;
-      case 'RAW':
-        return RAW;
-      case 'REQUEST':
-        return REQUEST;
-      case 'RESPONSE':
-        return RESPONSE;
-    }
-    throw Exception('Illegal enum value: $name');
-  }
-
-  factory ServerLogEntryKind.fromJson(
-      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
-    if (json is String) {
-      try {
-        return ServerLogEntryKind(json);
-      } catch (_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, 'ServerLogEntryKind', json);
-  }
-
-  @override
-  String toString() => 'ServerLogEntryKind.$name';
-
-  String toJson() => name;
-}
-
-/// server.log params
-///
-/// {
-///   "entry": ServerLogEntry
-/// }
-///
-/// Clients may not extend, implement or mix-in this class.
-class ServerLogParams implements HasToJson {
-  ServerLogEntry entry;
-
-  ServerLogParams(this.entry);
-
-  factory ServerLogParams.fromJson(
-      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
-    json ??= {};
-    if (json is Map) {
-      ServerLogEntry entry;
-      if (json.containsKey('entry')) {
-        entry = ServerLogEntry.fromJson(
-            jsonDecoder, jsonPath + '.entry', json['entry']);
-      } else {
-        throw jsonDecoder.mismatch(jsonPath, 'entry');
-      }
-      return ServerLogParams(entry);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, 'server.log params', json);
-    }
-  }
-
-  factory ServerLogParams.fromNotification(Notification notification) {
-    return ServerLogParams.fromJson(
-        ResponseDecoder(null), 'params', notification.params);
-  }
-
-  @override
-  Map<String, Object> toJson() {
-    var result = <String, Object>{};
-    result['entry'] = entry.toJson();
-    return result;
-  }
-
-  Notification toNotification() {
-    return Notification('server.log', toJson());
-  }
-
-  @override
-  String toString() => json.encode(toJson());
-
-  @override
-  bool operator ==(other) {
-    if (other is ServerLogParams) {
-      return entry == other.entry;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode => entry.hashCode;
-}
-
 /// ServerService
 ///
 /// enum {
-///   LOG
 ///   STATUS
 /// }
 ///
 /// Clients may not extend, implement or mix-in this class.
 class ServerService implements Enum {
-  static const ServerService LOG = ServerService._('LOG');
-
   static const ServerService STATUS = ServerService._('STATUS');
 
   /// A list containing all of the enum values that are defined.
-  static const List<ServerService> VALUES = <ServerService>[LOG, STATUS];
+  static const List<ServerService> VALUES = <ServerService>[STATUS];
 
   @override
   final String name;
@@ -16122,8 +15891,6 @@
 
   factory ServerService(String name) {
     switch (name) {
-      case 'LOG':
-        return LOG;
       case 'STATUS':
         return STATUS;
     }
diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
index 9f10c18..dc1ec97 100644
--- a/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
@@ -44,8 +44,7 @@
   Uri get uri => _uriAndPrefix.uri;
   String get prefix => _uriAndPrefix.prefix;
 
-  ReferenceNode(this._uriAndPrefix, {name})
-      : super(name ?? _uriAndPrefix.prefix);
+  ReferenceNode(String name, this._uriAndPrefix) : super(name);
 
   @override
   Map<String, dynamic> toJson() {
@@ -60,8 +59,8 @@
     if (nodeJson['type'] != 'reference') {
       throw 'Unrecognized type for reference node: ${nodeJson['type']}.';
     }
-    return ReferenceNode(UriAndPrefix.fromJson(nodeJson['import']),
-        name: nodeJson['name']);
+    return ReferenceNode(
+        nodeJson['name'], UriAndPrefix.fromJson(nodeJson['import']));
   }
 
   @override
@@ -193,9 +192,10 @@
   final Map<String, NamedNode> namedNodes = {};
   ReferenceNodeNamer _referenceNodeNamer;
 
-  /// The prefix in the 'uri#prefix' string will become a key to reference this
-  /// node in other builder calls.
-  String _prefixNamer(UriAndPrefix uriAndPrefix) => uriAndPrefix.prefix;
+  /// 'uri#prefix' will become a key to reference this node in other builder
+  /// calls.
+  String _uriAndPrefixNamer(UriAndPrefix uriAndPrefix) =>
+      uriAndPrefix.toString();
 
   /// Override the default reference node namer.
   set referenceNodeNamer(ReferenceNodeNamer namer) =>
@@ -203,7 +203,16 @@
 
   /// Returns the [ReferenceNodeNamer] to use for naming.
   ReferenceNodeNamer get referenceNodeNamer =>
-      _referenceNodeNamer ?? _prefixNamer;
+      _referenceNodeNamer ?? _uriAndPrefixNamer;
+
+  NamedNode _addNamedNode(NamedNode node) {
+    if (namedNodes.containsKey(node.name)) {
+      throw 'Node with name ${node.name} already exists: '
+          '${namedNodes[node.name]}';
+    }
+    namedNodes[node.name] = node;
+    return node;
+  }
 
   /// Returns a [ReferenceNode] referencing [importUriAndPrefix].
   /// [ReferenceNode]s are typically created in bulk, by mapping over a list of
@@ -212,10 +221,8 @@
   /// [referenceNodeNamer] per [ReferenceNode].
   ReferenceNode referenceNode(String importUriAndPrefix) {
     var uriAndPrefix = UriAndPrefix.fromJson(importUriAndPrefix);
-    var referenceNode = ReferenceNode(uriAndPrefix);
     var name = referenceNodeNamer(uriAndPrefix);
-    namedNodes[name] = referenceNode;
-    return referenceNode;
+    return _addNamedNode(ReferenceNode(name, uriAndPrefix));
   }
 
   /// Creates an unnamed [RelativeOrderNode] referencing two [NamedNode]s.
@@ -226,29 +233,37 @@
 
   /// Creates a [CombinerNode] which can be referenced by [name] in further
   /// calls to the builder.
-  CombinerNode combinerNode(
-      String name, List<String> nodes, CombinerType type) {
-    var combinerNode = CombinerNode(name, type,
-        nodes.map((name) => namedNodes[name] as ReferenceNode).toSet());
-    namedNodes[name] = combinerNode;
-    return combinerNode;
+  CombinerNode combinerNode(String name, Set<String> nodes, CombinerType type) {
+    ReferenceNode _lookup(String nodeName) {
+      if (!namedNodes.containsKey(nodeName)) {
+        throw 'Missing reference node for $nodeName';
+      }
+      var node = namedNodes[nodeName];
+      if (node is! ReferenceNode) {
+        // TODO(joshualitt): Implement nested combiners.
+        throw '$name references node $nodeName which is not a ReferenceNode.';
+      }
+      return node as ReferenceNode;
+    }
+
+    return _addNamedNode(CombinerNode(name, type, nodes.map(_lookup).toSet()));
   }
 
   /// Creates an 'and' [CombinerNode] which can be referenced by [name] in
   /// further calls to the builder.
-  CombinerNode andNode(String name, List<String> nodes) {
+  CombinerNode andNode(String name, Set<String> nodes) {
     return combinerNode(name, nodes, CombinerType.and);
   }
 
   /// Creates a 'fuse' [CombinerNode] which can be referenced by [name] in
   /// further calls to the builder.
-  CombinerNode fuseNode(String name, List<String> nodes) {
+  CombinerNode fuseNode(String name, Set<String> nodes) {
     return combinerNode(name, nodes, CombinerType.fuse);
   }
 
   /// Creates an 'or' [CombinerNode] which can be referenced by [name] in
   /// further calls to the builder.
-  CombinerNode orNode(String name, List<String> nodes) {
+  CombinerNode orNode(String name, Set<String> nodes) {
     return combinerNode(name, nodes, CombinerType.or);
   }
 }
diff --git a/pkg/compiler/test/custom_split/custom_split_test.dart b/pkg/compiler/test/custom_split/custom_split_test.dart
index fb0968a..f1e4fd4 100644
--- a/pkg/compiler/test/custom_split/custom_split_test.dart
+++ b/pkg/compiler/test/custom_split/custom_split_test.dart
@@ -83,17 +83,30 @@
   return json;
 }
 
+Uri getFileInTestFolder(String test, String file) =>
+    Platform.script.resolve('data/$test/$file');
+
+Future<String> compileConstraintsToJson(String test, Compiler compiler) async {
+  var constraints = getFileInTestFolder(test, 'constraints.dart');
+  var component = compiler.componentForTesting;
+  return constraintsToJson(component, constraints);
+}
+
+File getConstraintsJsonFile(String test) {
+  var constraintsJsonUri = getFileInTestFolder(test, 'constraints.json');
+  return File(constraintsJsonUri.toFilePath());
+}
+
 /// Verifies the programmatic API produces the expected JSON.
 Future<void> verifyCompiler(String test, Compiler compiler) async {
-  var constraints = Platform.script.resolve('data/$test/constraints.dart');
-  var constraintsJsonUri =
-      Platform.script.resolve('data/$test/constraints.json');
-  var component = compiler.componentForTesting;
-  var json = await constraintsToJson(component, constraints);
-  var constraintsJson =
-      File(constraintsJsonUri.toFilePath()).readAsStringSync();
-  constraintsJson = constraintsJson.substring(0, constraintsJson.length - 1);
-  Expect.equals(json, constraintsJson);
+  var json = await compileConstraintsToJson(test, compiler);
+  Expect.equals(getConstraintsJsonFile(test).readAsStringSync(), json);
+}
+
+/// Generates constraint JSON.
+Future<void> generateJSON(String test, Compiler compiler) async {
+  var json = await compileConstraintsToJson(test, compiler);
+  getConstraintsJsonFile(test).writeAsStringSync(json);
 }
 
 /// Compute the [OutputUnit]s for all source files involved in the test, and
@@ -102,6 +115,7 @@
 /// or all supporting libraries to be in the `libs` folder, starting with the
 /// same name as the original file in `data`.
 main(List<String> args) {
+  bool generateGoldens = args.contains('-g');
   asyncTest(() async {
     Directory dataDir = Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(dataDir, const OutputUnitDataComputer(),
@@ -109,6 +123,8 @@
         perTestOptions: createPerTestOptions(),
         args: args, setUpFunction: () {
       importPrefixes.clear();
-    }, testedConfigs: allSpecConfigs, verifyCompiler: verifyCompiler);
+    },
+        testedConfigs: allSpecConfigs,
+        verifyCompiler: generateGoldens ? generateJSON : verifyCompiler);
   });
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.dart b/pkg/compiler/test/custom_split/data/diamond/constraints.dart
index 92a7665..88ccb84 100644
--- a/pkg/compiler/test/custom_split/data/diamond/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.dart
@@ -12,12 +12,16 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
+  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
+  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
+  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
+  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.orderNode('step1', 'step2a'),
-    builder.orderNode('step1', 'step2b'),
-    builder.orderNode('step2a', 'step3'),
-    builder.orderNode('step2b', 'step3'),
+    builder.orderNode(step1, step2a),
+    builder.orderNode(step1, step2b),
+    builder.orderNode(step2a, step3),
+    builder.orderNode(step2b, step3),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.json b/pkg/compiler/test/custom_split/data/diamond/constraints.json
index 83dfe0a..21b8afa 100644
--- a/pkg/compiler/test/custom_split/data/diamond/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.json
@@ -1,42 +1,42 @@
 [
   {
     "type": "reference",
-    "name": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2a"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2b"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "order",
-    "predecessor": "step2a",
-    "successor": "step3"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step2a",
+    "successor": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "step2b",
-    "successor": "step3"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step2b",
+    "successor": "memory:sdk/tests/web/native/main.dart#step3"
   }
-]
+]
\ No newline at end of file
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
index b3a40ca..a333016 100644
--- a/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
@@ -12,11 +12,15 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
+  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
+  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
+  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
+  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.andNode('step2', ['step2a', 'step2b']),
-    builder.orderNode('step1', 'step2'),
-    builder.orderNode('step2', 'step3'),
+    builder.andNode('step2', {step2a, step2b}),
+    builder.orderNode(step1, 'step2'),
+    builder.orderNode('step2', step3),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/constraints.json b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
index 931a910..85344e7 100644
--- a/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "and",
     "name": "step2",
     "nodes": [
-      "step2a",
-      "step2b"
+      "memory:sdk/tests/web/native/main.dart#step2a",
+      "memory:sdk/tests/web/native/main.dart#step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "step1",
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "step3"
+    "successor": "memory:sdk/tests/web/native/main.dart#step3"
   }
-]
+]
\ No newline at end of file
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
index 6fdf62e..145cbd1 100644
--- a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
@@ -12,11 +12,15 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
+  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
+  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
+  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
+  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.fuseNode('step2', ['step2a', 'step2b']),
-    builder.orderNode('step1', 'step2'),
-    builder.orderNode('step2', 'step3'),
+    builder.fuseNode('step2', {step2a, step2b}),
+    builder.orderNode(step1, 'step2'),
+    builder.orderNode('step2', step3),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
index f170d18..dccfe20 100644
--- a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "fuse",
     "name": "step2",
     "nodes": [
-      "step2a",
-      "step2b"
+      "memory:sdk/tests/web/native/main.dart#step2a",
+      "memory:sdk/tests/web/native/main.dart#step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "step1",
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "step3"
+    "successor": "memory:sdk/tests/web/native/main.dart#step3"
   }
-]
+]
\ No newline at end of file
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
index 659bf73..bdc5e1f 100644
--- a/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
@@ -12,11 +12,15 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
+  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
+  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
+  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
+  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.orNode('step2', ['step2a', 'step2b']),
-    builder.orderNode('step1', 'step2'),
-    builder.orderNode('step2', 'step3'),
+    builder.orNode('step2', {step2a, step2b}),
+    builder.orderNode(step1, 'step2'),
+    builder.orderNode('step2', step3),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/constraints.json b/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
index 5fcc300..c4091f4 100644
--- a/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "or",
     "name": "step2",
     "nodes": [
-      "step2a",
-      "step2b"
+      "memory:sdk/tests/web/native/main.dart#step2a",
+      "memory:sdk/tests/web/native/main.dart#step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "step1",
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "step3"
+    "successor": "memory:sdk/tests/web/native/main.dart#step3"
   }
-]
+]
\ No newline at end of file
diff --git a/pkg/compiler/test/custom_split/data/two_branch/constraints.dart b/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
index 1e6ad05..27a00ab 100644
--- a/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
@@ -12,10 +12,13 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
+  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
+  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
+  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.orderNode('step1', 'step2a'),
-    builder.orderNode('step1', 'step2b'),
+    builder.orderNode(step1, step2a),
+    builder.orderNode(step1, step2b),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/two_branch/constraints.json b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
index 8b86071..1a29d7b 100644
--- a/pkg/compiler/test/custom_split/data/two_branch/constraints.json
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
@@ -1,27 +1,27 @@
 [
   {
     "type": "reference",
-    "name": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2a"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2b"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2b"
   }
-]
+]
\ No newline at end of file
diff --git a/pkg/compiler/test/custom_split/data/two_step/constraints.dart b/pkg/compiler/test/custom_split/data/two_step/constraints.dart
index 9089c5c..fe0d8a5 100644
--- a/pkg/compiler/test/custom_split/data/two_step/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.dart
@@ -12,10 +12,13 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
+  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
+  var step2 = 'memory:sdk/tests/web/native/main.dart#step2';
+  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.orderNode('step1', 'step2'),
-    builder.orderNode('step2', 'step3'),
+    builder.orderNode(step1, step2),
+    builder.orderNode(step2, step3),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/two_step/constraints.json b/pkg/compiler/test/custom_split/data/two_step/constraints.json
index b72db44..77a02de 100644
--- a/pkg/compiler/test/custom_split/data/two_step/constraints.json
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.json
@@ -1,27 +1,27 @@
 [
   {
     "type": "reference",
-    "name": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2",
+    "name": "memory:sdk/tests/web/native/main.dart#step2",
     "import": "memory:sdk/tests/web/native/main.dart#step2"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2"
   },
   {
     "type": "order",
-    "predecessor": "step2",
-    "successor": "step3"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step2",
+    "successor": "memory:sdk/tests/web/native/main.dart#step3"
   }
-]
+]
\ No newline at end of file
diff --git a/tools/VERSION b/tools/VERSION
index 4eb5ac1..cdd0b9e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 288
+PRERELEASE 289
 PRERELEASE_PATCH 0
\ No newline at end of file