Version 2.12.0-61.0.dev
Merge commit 'dcafee77cea26842e66324c05b8c62ed2966c4a4' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index d9dd292..ca8348b 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -118,7 +118,7 @@
"name": "bazel_worker",
"rootUri": "../third_party/pkg/bazel_worker",
"packageUri": "lib/",
- "languageVersion": "2.3"
+ "languageVersion": "2.12"
},
{
"name": "benchmark_harness",
@@ -495,7 +495,7 @@
"name": "protobuf",
"rootUri": "../third_party/pkg/protobuf/protobuf",
"packageUri": "lib/",
- "languageVersion": "2.0"
+ "languageVersion": "2.12"
},
{
"name": "pub",
diff --git a/DEPS b/DEPS
index c3a0f78..8e475fa 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
# co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
# hashes. It requires access to the dart-build-access group, which EngProd
# has.
- "co19_rev": "de1f3498dff1091b7ca715eb7f831e24ec1a8c64",
+ "co19_rev": "1653a8f5242599b7b8d40b9f1466f717556626d0",
"co19_2_rev": "e48b3090826cf40b8037648f19d211e8eab1b4b6",
# The internal benchmarks to use. See go/dart-benchmarks-internal
@@ -70,7 +70,7 @@
# Revisions of /third_party/* dependencies.
"args_tag": "1.6.0",
"async_rev": "695b3ac280f107c84adf7488743abfdfaaeea68f",
- "bazel_worker_rev": "26680d5e249b249c7216ab2fed0ac8ed4ee285c5",
+ "bazel_worker_rev": "060c55a933d39798681a4f533b161b81dc48d77e",
"benchmark_harness_rev": "ec6b646f5443faa871e126ac1ba248c94ca06257",
"boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
"boringssl_gen_rev": "429ccb1877f7987a6f3988228bc2440e61293499",
@@ -84,7 +84,7 @@
"convert_rev": "dd3bd28f63be7cb8ab961f38bc73229e4473b555",
"crypto_rev": "f7c48b334b1386bc5ab0f706fbcd6df8496a87fc",
"csslib_rev": "6f77b3dcee957d3e2d5083f666221a220e9ed1f1",
- "dart2js_info_rev" : "0632a623b08e1f601c7eba99e0186a581ae799e9",
+ "dart2js_info_rev" : "83504e459e13862cc6a61c147147ef7892a0d285",
# Note: Updates to dart_style have to be coordinated with the infrastructure
# team so that the internal formatter in `tools/sdks/dart-sdk/bin/dartfmt`
@@ -131,7 +131,7 @@
"pedantic_rev": "a884ea2db943b8756cc94385990bd750aec06928",
"ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
"pool_rev": "eedbd5fde84f9a1a8da643b475305a81841da599",
- "protobuf_rev": "3746c8fd3f2b0147623a8e3db89c3ff4330de760",
+ "protobuf_rev": "0d03fd588df69e9863e2a2efc0059dee8f18d5b2",
"pub_rev": "228e69e53862879c283c42b98086aa7536012a66",
"pub_semver_tag": "v1.4.4",
"resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index 8ee02fc..c58b195 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -68,11 +68,13 @@
organizeImports,
sendWorkspaceEdit,
performRefactor,
+ fixAllOfErrorCodeInFile,
];
static const sortMembers = 'edit.sortMembers';
static const organizeImports = 'edit.organizeImports';
static const sendWorkspaceEdit = 'edit.sendWorkspaceEdit';
static const performRefactor = 'refactor.perform';
+ static const fixAllOfErrorCodeInFile = 'edit.fixAll.errorCodeInFile';
}
abstract class CustomMethods {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all_of_error_code_in_file.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all_of_error_code_in_file.dart
new file mode 100644
index 0000000..d43b9d9
--- /dev/null
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all_of_error_code_in_file.dart
@@ -0,0 +1,69 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/lsp_protocol/protocol_special.dart';
+import 'package:analysis_server/src/lsp/constants.dart';
+import 'package:analysis_server/src/lsp/handlers/commands/simple_edit_handler.dart';
+import 'package:analysis_server/src/lsp/handlers/handlers.dart';
+import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
+import 'package:analysis_server/src/lsp/mapping.dart';
+import 'package:analysis_server/src/lsp/progress.dart';
+import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
+
+/// This command allows a client to request request applying all fixes for a
+/// type of error.
+class FixAllOfErrorCodeInFileCommandHandler extends SimpleEditCommandHandler {
+ FixAllOfErrorCodeInFileCommandHandler(LspAnalysisServer server)
+ : super(server);
+
+ @override
+ String get commandName => 'Fix All of Error Code in File';
+
+ @override
+ Future<ErrorOr<void>> handle(List<dynamic> arguments,
+ ProgressReporter reporter, CancellationToken cancellationToken) async {
+ if (arguments == null ||
+ arguments.length != 3 ||
+ arguments[0] is! String ||
+ arguments[1] is! String ||
+ (arguments[2] is! int && arguments[2] != null)) {
+ return ErrorOr.error(ResponseError(
+ code: ServerErrorCodes.InvalidCommandArguments,
+ message: '$commandName requires three arguments: '
+ '1) an ErrorCode, '
+ '2) a file path, '
+ '3) a document version',
+ ));
+ }
+
+ final errorCode = arguments[0] as String;
+ final path = arguments[1] as String;
+ final clientDocumentVersion = arguments[2] as int;
+
+ if (fileHasBeenModified(path, clientDocumentVersion)) {
+ return fileModifiedError;
+ }
+
+ final result = await requireResolvedUnit(path);
+
+ if (cancellationToken.isCancellationRequested) {
+ return error(ErrorCodes.RequestCancelled, 'Request was cancelled');
+ }
+
+ return result.mapResult((result) async {
+ final workspace = DartChangeWorkspace(server.currentSessions);
+ final processor =
+ BulkFixProcessor(server.instrumentationService, workspace);
+
+ final changeBuilder = await processor.fixOfTypeInUnit(result, errorCode);
+
+ final edit =
+ createWorkspaceEdit(server, changeBuilder.sourceChange.edits);
+
+ return await sendWorkspaceEditToClient(edit);
+ });
+ }
+}
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/perform_refactor.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/perform_refactor.dart
index bd880eb..4a302a2 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/perform_refactor.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/perform_refactor.dart
@@ -83,18 +83,14 @@
// If the file changed while we were validating and preparing the change,
// we should fail to avoid sending bad edits.
- if (docVersion != null &&
- docVersion !=
- server.getVersionedDocumentIdentifier(path).version) {
- return error(ErrorCodes.ContentModified,
- 'Content was modified before refactor was applied');
+ if (fileHasBeenModified(path, docVersion)) {
+ return fileModifiedError;
}
final edit = createWorkspaceEdit(server, change.edits);
return await sendWorkspaceEditToClient(edit);
} on InconsistentAnalysisException {
- return error(ErrorCodes.ContentModified,
- 'Content was modified before refactor was applied');
+ return fileModifiedError;
} finally {
_manager.end(cancellationToken);
reporter.end();
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
index 9d6fb0a..355cbde 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
@@ -12,9 +12,10 @@
import 'package:analysis_server/src/lsp/handlers/handlers.dart';
import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
import 'package:analysis_server/src/lsp/mapping.dart';
-import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analysis_server/src/protocol_server.dart' hide Position;
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart';
import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/fix/dart/top_level_declarations.dart';
@@ -23,7 +24,9 @@
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/analysis/session.dart'
show InconsistentAnalysisException;
+import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
import 'package:collection/collection.dart' show groupBy;
class CodeActionHandler extends MessageHandler<CodeActionParams,
@@ -89,6 +92,21 @@
});
}
+ /// Creates a comparer for [CodeActions] that compares the column distance from [pos].
+ Function(CodeAction a, CodeAction b) _codeActionColumnDistanceComparer(
+ Position pos) {
+ Position posOf(CodeAction action) => action.diagnostics.isNotEmpty
+ ? action.diagnostics.first.range.start
+ : pos;
+
+ return (a, b) => _columnDistance(posOf(a), pos)
+ .compareTo(_columnDistance(posOf(b), pos));
+ }
+
+ /// Returns the distance (in columns, ignoring lines) between two positions.
+ int _columnDistance(Position a, Position b) =>
+ (a.character - b.character).abs();
+
/// Wraps a command in a CodeAction if the client supports it so that a
/// CodeActionKind can be supplied.
Either2<Command, CodeAction> _commandOrCodeAction(
@@ -129,33 +147,80 @@
);
}
- /// Dedupes actions that perform the same edit and merge their diagnostics
- /// together. This avoids duplicates where there are multiple errors on
- /// the same line that have the same fix (for example importing a
- /// library that fixes multiple unresolved types).
- List<CodeAction> _dedupeActions(Iterable<CodeAction> actions) {
- final groups = groupBy(actions, (CodeAction action) => action.edit);
- return groups.keys.map((edit) {
- final first = groups[edit].first;
- // Avoid constructing new CodeActions if there was only one in this group.
- if (groups[edit].length == 1) {
- return first;
+ /// Creates a CodeAction command to apply a particular fix for all instances of
+ /// a specific error in the file for [path].
+ CodeAction _createFixAllCommand(Fix fix, Diagnostic diagnostic, String path) {
+ final title = 'Apply all: ${fix.change.message}';
+ return CodeAction(
+ title: title,
+ kind: CodeActionKind.QuickFix,
+ diagnostics: [diagnostic],
+ command: Command(
+ command: Commands.fixAllOfErrorCodeInFile,
+ title: title,
+ arguments: [
+ diagnostic.code,
+ path,
+ server.getVersionedDocumentIdentifier(path).version
+ ],
+ ),
+ );
+ }
+
+ /// Dedupes/merges actions that have the same title, selecting the one nearest [pos].
+ ///
+ /// If actions perform the same edit/command, their diagnostics will be merged
+ /// together. Otherwise, the additional accounts are just dropped.
+ ///
+ /// The first diagnostic for an action is used to determine the position (using
+ /// its `start`). If there is no diagnostic, it will be treated as being at [pos].
+ ///
+ /// If multiple actions have the same position, one will arbitrarily be chosen.
+ List<CodeAction> _dedupeActions(Iterable<CodeAction> actions, Position pos) {
+ final groups = groupBy(actions, (CodeAction action) => action.title);
+ return groups.keys.map((title) {
+ final actions = groups[title];
+
+ // If there's only one in the group, just return it.
+ if (actions.length == 1) {
+ return actions.single;
}
+
+ // Otherwise, find the action nearest to the caret.
+ actions.sort(_codeActionColumnDistanceComparer(pos));
+ final first = actions.first;
+
+ // Get any actions with the same fix (edit/command) for merging diagnostics.
+ final others = actions.skip(1).where(
+ (other) =>
+ // Compare either edits or commands based on which the selected action has.
+ first.edit != null
+ ? first.edit == other.edit
+ : first.command != null
+ ? first.command == other.command
+ : false,
+ );
+
// Build a new CodeAction that merges the diagnostics from each same
// code action onto a single one.
return CodeAction(
- title: first.title,
- kind: first.kind,
- // Merge diagnostics from all of the CodeActions.
- diagnostics: groups[edit].expand((r) => r.diagnostics).toList(),
- edit: first.edit,
- command: first.command);
+ title: first.title,
+ kind: first.kind,
+ // Merge diagnostics from all of the matching CodeActions.
+ diagnostics: [
+ ...?first.diagnostics,
+ for (final other in others) ...?other.diagnostics,
+ ],
+ edit: first.edit,
+ command: first.command,
+ );
}).toList();
}
Future<List<Either2<Command, CodeAction>>> _getAssistActions(
HashSet<CodeActionKind> clientSupportedCodeActionKinds,
bool clientSupportsLiteralCodeActions,
+ Range range,
int offset,
int length,
ResolvedUnitResult unit,
@@ -178,7 +243,8 @@
final assists = await processor.compute();
assists.sort(Assist.SORT_BY_RELEVANCE);
- final assistActions = _dedupeActions(assists.map(_createAssistAction));
+ final assistActions =
+ _dedupeActions(assists.map(_createAssistAction), range.start);
return assistActions
.map((action) => Either2<Command, CodeAction>.t2(action))
@@ -205,7 +271,7 @@
final results = await Future.wait([
_getSourceActions(
kinds, supportsLiterals, supportsWorkspaceApplyEdit, path),
- _getAssistActions(kinds, supportsLiterals, offset, length, unit),
+ _getAssistActions(kinds, supportsLiterals, range, offset, length, unit),
_getRefactorActions(kinds, supportsLiterals, path, offset, length, unit),
_getFixActions(
kinds, supportsLiterals, supportedDiagnosticTags, range, unit),
@@ -230,40 +296,82 @@
final lineInfo = unit.lineInfo;
final codeActions = <CodeAction>[];
+ final fixAllCodeActions = <CodeAction>[];
final fixContributor = DartFixContributor();
try {
+ final errorCodeCounts = <ErrorCode, int>{};
+ // Count the errors by code so we know whether to include a fix-all.
+ for (final error in unit.errors) {
+ errorCodeCounts[error.errorCode] =
+ (errorCodeCounts[error.errorCode] ?? 0) + 1;
+ }
+
+ // Because an error code may appear multiple times, cache the possible fixes
+ // as we discover them to avoid re-computing them for a given diagnostic.
+ final possibleFixesForErrorCode = <ErrorCode, Set<FixKind>>{};
+ final workspace = DartChangeWorkspace(server.currentSessions);
+ final processor =
+ BulkFixProcessor(server.instrumentationService, workspace);
+
for (final error in unit.errors) {
// Server lineNumber is one-based so subtract one.
var errorLine = lineInfo.getLocation(error.offset).lineNumber - 1;
- if (errorLine >= range.start.line && errorLine <= range.end.line) {
- var workspace = DartChangeWorkspace(server.currentSessions);
- var context = DartFixContextImpl(
- server.instrumentationService, workspace, unit, error, (name) {
- var tracker = server.declarationsTracker;
- return TopLevelDeclarationsProvider(tracker).get(
- unit.session.analysisContext,
- unit.path,
- name,
- );
- });
- final fixes = await fixContributor.computeFixes(context);
- if (fixes.isNotEmpty) {
- fixes.sort(Fix.SORT_BY_RELEVANCE);
+ if (errorLine < range.start.line || errorLine > range.end.line) {
+ continue;
+ }
+ var workspace = DartChangeWorkspace(server.currentSessions);
+ var context = DartFixContextImpl(
+ server.instrumentationService, workspace, unit, error, (name) {
+ var tracker = server.declarationsTracker;
+ return TopLevelDeclarationsProvider(tracker).get(
+ unit.session.analysisContext,
+ unit.path,
+ name,
+ );
+ });
+ final fixes = await fixContributor.computeFixes(context);
+ if (fixes.isNotEmpty) {
+ fixes.sort(Fix.SORT_BY_RELEVANCE);
- final diagnostic = toDiagnostic(
- unit,
- error,
- supportedTags: supportedDiagnosticTags,
- );
- codeActions.addAll(
- fixes.map((fix) => _createFixAction(fix, diagnostic)),
- );
+ final diagnostic = toDiagnostic(
+ unit,
+ error,
+ supportedTags: supportedDiagnosticTags,
+ );
+ codeActions.addAll(
+ fixes.map((fix) => _createFixAction(fix, diagnostic)),
+ );
+
+ // Only consider an apply-all if there's more than one of these errors.
+ if (errorCodeCounts[error.errorCode] > 1) {
+ // Find out which fixes the bulk processor can handle.
+ possibleFixesForErrorCode[error.errorCode] ??=
+ processor.producableFixesForError(unit, error).toSet();
+
+ // Get the intersection of single-fix kinds we created and those
+ // the bulk processor can handle.
+ final possibleFixes = possibleFixesForErrorCode[error.errorCode]
+ .intersection(fixes.map((f) => f.kind).toSet())
+ // Exclude data-driven fixes as they're more likely to apply
+ // different fixes for the same error/fix kind that users
+ // might not expect.
+ ..remove(DartFixKind.DATA_DRIVEN);
+
+ // Until we can apply a specific fix, only include apply-all when
+ // there's exactly one.
+ if (possibleFixes.length == 1) {
+ fixAllCodeActions.addAll(fixes.map(
+ (fix) => _createFixAllCommand(fix, diagnostic, unit.path)));
+ }
}
}
}
- final dedupedActions = _dedupeActions(codeActions);
+ // Append all fix-alls to the very end.
+ codeActions.addAll(fixAllCodeActions);
+
+ final dedupedActions = _dedupeActions(codeActions, range.start);
return dedupedActions
.map((action) => Either2<Command, CodeAction>.t2(action))
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_execute_command.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_execute_command.dart
index 967e8e8..60416b4 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_execute_command.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_execute_command.dart
@@ -5,6 +5,7 @@
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/lsp_protocol/protocol_special.dart';
import 'package:analysis_server/src/lsp/constants.dart';
+import 'package:analysis_server/src/lsp/handlers/commands/fix_all_of_error_code_in_file.dart';
import 'package:analysis_server/src/lsp/handlers/commands/organize_imports.dart';
import 'package:analysis_server/src/lsp/handlers/commands/perform_refactor.dart';
import 'package:analysis_server/src/lsp/handlers/commands/send_workspace_edit.dart';
@@ -24,6 +25,8 @@
Commands.organizeImports: OrganizeImportsCommandHandler(server),
Commands.performRefactor: PerformRefactorCommandHandler(server),
Commands.sendWorkspaceEdit: SendWorkspaceEditCommandHandler(server),
+ Commands.fixAllOfErrorCodeInFile:
+ FixAllOfErrorCodeInFileCommandHandler(server),
},
super(server);
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
index 7375cc2..71205a0 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
@@ -95,8 +95,9 @@
// send the edits.
final docIdentifier = await path.mapResult((path) => success(
params.textDocument is VersionedTextDocumentIdentifier
- ? params.textDocument
+ ? params.textDocument as VersionedTextDocumentIdentifier
: server.getVersionedDocumentIdentifier(path)));
+
final unit = await path.mapResult(requireResolvedUnit);
final offset = await unit.mapResult((unit) => toOffset(unit.lineInfo, pos));
@@ -178,10 +179,8 @@
// Before we send anything back, ensure the original file didn't change
// while we were computing changes.
- if (server.getVersionedDocumentIdentifier(path.result) !=
- docIdentifier.result) {
- return error(ErrorCodes.ContentModified,
- 'Document was modified while rename was being computed', null);
+ if (fileHasBeenModified(path.result, docIdentifier.result.version)) {
+ return fileModifiedError;
}
final workspaceEdit = createWorkspaceEdit(server, change.edits);
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
index 41f20f4..96db148 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
@@ -55,6 +55,15 @@
mixin Handler<P, R> {
LspAnalysisServer server;
+ final fileModifiedError = error<R>(ErrorCodes.ContentModified,
+ 'Document was modified before operation completed', null);
+
+ bool fileHasBeenModified(String path, int clientVersion) {
+ final serverDocIdentifier = server.getVersionedDocumentIdentifier(path);
+ return clientVersion != null &&
+ clientVersion != serverDocIdentifier.version;
+ }
+
ErrorOr<LineInfo> getLineInfo(String path) {
final lineInfo = server.getLineInfo(path);
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index a8f267c..0dae89c 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -75,6 +75,7 @@
import 'package:analyzer/src/generated/utilities_general.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
/// A fix producer that produces changes to fix multiple diagnostics.
class BulkFixProcessor {
@@ -393,6 +394,92 @@
return builder;
}
+ /// Return a change builder that has been used to create all fixes for a
+ /// specific diagnostic code in the given [unit].
+ Future<ChangeBuilder> fixOfTypeInUnit(
+ ResolvedUnitResult unit,
+ String errorCode,
+ ) async {
+ final errorCodeLowercase = errorCode.toLowerCase();
+ final errors = unit.errors.where(
+ (error) => error.errorCode.name.toLowerCase() == errorCodeLowercase,
+ );
+
+ final analysisOptions = unit.session.analysisContext.analysisOptions;
+ final fixContext = DartFixContextImpl(
+ instrumentationService,
+ workspace,
+ unit,
+ null,
+ (name) => [],
+ );
+
+ for (var error in errors) {
+ final processor = ErrorProcessor.getProcessor(analysisOptions, error);
+ // Only fix errors not filtered out in analysis options.
+ if (processor == null || processor.severity != null) {
+ await _fixSingleError(fixContext, unit, error);
+ }
+ }
+
+ return builder;
+ }
+
+ /// Returns the potential [FixKind]s that may be available for a given diagnostic.
+ ///
+ /// The presence of a kind does not guarantee a fix will be produced, nor does
+ /// the absence of a kind mean that it definitely will not (some producers
+ /// do not provide FixKinds up-front). These results are intended as a hint
+ /// for populating something like a quick-fix menu with possible apply-all fixes.
+ Iterable<FixKind> producableFixesForError(
+ ResolvedUnitResult result,
+ AnalysisError diagnostic,
+ ) sync* {
+ final errorCode = diagnostic.errorCode;
+ if (errorCode is LintCode) {
+ final generators = lintProducerMap[errorCode.name];
+ if (generators != null) {
+ yield* generators.map((g) => g().fixKind).where((k) => k != null);
+ }
+ return;
+ }
+
+ final generator = nonLintProducerMap[errorCode];
+ if (generator != null) {
+ final kind = generator().fixKind;
+ if (kind != null) yield kind;
+ }
+
+ final multiGenerators = nonLintMultiProducerMap[errorCode];
+ if (multiGenerators != null) {
+ final fixContext = DartFixContextImpl(
+ instrumentationService,
+ workspace,
+ result,
+ null,
+ (name) => [],
+ );
+
+ var context = CorrectionProducerContext(
+ applyingBulkFixes: true,
+ dartFixContext: fixContext,
+ diagnostic: diagnostic,
+ resolvedResult: result,
+ selectionOffset: diagnostic.offset,
+ selectionLength: diagnostic.length,
+ workspace: workspace,
+ );
+
+ for (final multiGenerator in multiGenerators) {
+ final multiProducer = multiGenerator();
+ multiProducer.configure(context);
+ yield* multiProducer.producers
+ .map((p) => p.fixKind)
+ .where((k) => k != null);
+ }
+ }
+ }
+
/// Use the change [builder] to create fixes for the diagnostics in the
/// library associated with the analysis [result].
Future<void> _fixErrorsInLibrary(ResolvedLibraryResult result) async {
diff --git a/pkg/analysis_server/test/lsp/code_actions_abstract.dart b/pkg/analysis_server/test/lsp/code_actions_abstract.dart
index df1425e..3f59ec8 100644
--- a/pkg/analysis_server/test/lsp/code_actions_abstract.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_abstract.dart
@@ -4,6 +4,7 @@
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
import 'package:analysis_server/lsp_protocol/protocol_special.dart';
+import 'package:analysis_server/src/lsp/constants.dart';
import 'package:test/test.dart';
import 'server_abstract.dart';
@@ -45,7 +46,7 @@
[String wantedTitle]) {
for (var codeAction in actions) {
final id = codeAction.map(
- (cmd) => cmd.command, (action) => action.command.command);
+ (cmd) => cmd.command, (action) => action.command?.command);
final title =
codeAction.map((cmd) => cmd.title, (action) => action.title);
if (id == commandID && (wantedTitle == null || wantedTitle == title)) {
@@ -74,6 +75,15 @@
}).toList();
}
+ Future<Either2<Command, CodeAction>> getFixAllAction(
+ String title, Uri uri, String content) async {
+ final codeActions =
+ await getCodeActions(uri.toString(), range: rangeFromMarkers(content));
+ final fixAction =
+ findCommand(codeActions, Commands.fixAllOfErrorCodeInFile, title);
+ return fixAction;
+ }
+
/// Verifies that executing the given code actions command on the server
/// results in an edit being sent in the client that updates the file to match
/// the expected content.
diff --git a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
index c424137..bf327be 100644
--- a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
@@ -12,6 +12,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(FixesCodeActionsTest);
+ defineReflectiveTests(FixesCodeActionsWithNullSafetyTest);
});
}
@@ -95,7 +96,7 @@
expect(contents[mainFilePath], equals(expectedContent));
}
- Future<void> test_noDuplicates() async {
+ Future<void> test_noDuplicates_sameFix() async {
const content = '''
var a = [Test, Test, Te[[]]st];
''';
@@ -209,3 +210,153 @@
expect(codeActions, isEmpty);
}
}
+
+@reflectiveTest
+class FixesCodeActionsWithNullSafetyTest extends AbstractCodeActionsTest {
+ @override
+ String get testPackageLanguageVersion => latestLanguageVersion;
+
+ Future<void> test_fixAll_notForAmbigiousProducers() async {
+ // The ReplaceWithIsEmpty producer does not provide a FixKind up-front, as
+ // it may produce `REPLACE_WITH_IS_EMPTY` or `REPLACE_WITH_IS_NOT_EMPTY`
+ // depending on the code.
+ // This test ensures this does not crash, and does not produce an apply-all.
+ registerLintRules();
+ newFile(analysisOptionsPath, content: '''
+linter:
+ rules:
+ - prefer_is_empty
+ ''');
+
+ const content = '''
+var a = [];
+var b = a.[[length]] == 0;
+var c = a.length == 0;
+ ''';
+
+ newFile(mainFilePath, content: withoutMarkers(content));
+ await initialize(
+ textDocumentCapabilities: withCodeActionKinds(
+ emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
+ );
+
+ final allFixes = await getCodeActions(mainFileUri.toString(),
+ range: rangeFromMarkers(content));
+
+ // Expect only the single-fix, there should be no apply-all.
+ expect(allFixes, hasLength(1));
+ final fixTitle = allFixes.first.map((f) => f.title, (f) => f.title);
+ expect(fixTitle, equals("Replace with \'isEmpty\'"));
+ }
+
+ Future<void> test_fixAll_notWhenNoBatchFix() async {
+ // Some fixes (for example 'create function foo') are not available in the
+ // batch processor, so should not generate Apply-all fixes even if there
+ // are multiple.
+ const content = '''
+var a = [[foo]]();
+var b = bar();
+ ''';
+
+ newFile(mainFilePath, content: withoutMarkers(content));
+ await initialize(
+ textDocumentCapabilities: withCodeActionKinds(
+ emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
+ );
+
+ final allFixes = await getCodeActions(mainFileUri.toString(),
+ range: rangeFromMarkers(content));
+
+ // Expect only the single-fix, there should be no apply-all.
+ expect(allFixes, hasLength(1));
+ final fixTitle = allFixes.first.map((f) => f.title, (f) => f.title);
+ expect(fixTitle, equals("Create function 'foo'"));
+ }
+
+ Future<void> test_fixAll_notWhenSingle() async {
+ const content = '''
+void f(String a) {
+ [[print(a!)]];
+}
+ ''';
+
+ newFile(mainFilePath, content: withoutMarkers(content));
+ await initialize(
+ textDocumentCapabilities: withCodeActionKinds(
+ emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
+ );
+
+ final fixAction = await getFixAllAction(
+ "Apply all: Remove the '!'", mainFileUri, content);
+
+ // Should not appear if there was only a single error.
+ expect(fixAction, isNull);
+ }
+
+ Future<void> test_fixAll_whenMultiple() async {
+ const content = '''
+void f(String a) {
+ [[print(a!!)]];
+ print(a!!);
+}
+ ''';
+
+ const expectedContent = '''
+void f(String a) {
+ print(a);
+ print(a);
+}
+ ''';
+ newFile(mainFilePath, content: withoutMarkers(content));
+ await initialize(
+ textDocumentCapabilities: withCodeActionKinds(
+ emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
+ );
+
+ final fixAction = await getFixAllAction(
+ "Apply all: Remove the '!'", mainFileUri, content);
+
+ expect(fixAction, isNotNull);
+
+ await verifyCodeActionEdits(
+ fixAction, withoutMarkers(content), expectedContent);
+ }
+
+ Future<void> test_noDuplicates_differentFix() async {
+ // For convenience, quick-fixes are usually returned for the entire line,
+ // though this can lead to duplicate entries (by title) when multiple
+ // diagnostics have their own fixes of the same type.
+ //
+ // Expect only the only one nearest to the start of the range to be returned.
+ const content = '''
+ main() {
+ var a = [];
+ print(a!!);^
+ }
+ ''';
+
+ newFile(mainFilePath, content: withoutMarkers(content));
+ await initialize(
+ textDocumentCapabilities: withCodeActionKinds(
+ emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
+ );
+
+ final caretPos = positionFromMarker(content);
+
+ final codeActions = await getCodeActions(mainFileUri.toString(),
+ range: Range(start: caretPos, end: caretPos));
+ final removeNnaAction = findEditActions(codeActions,
+ CodeActionKind('quickfix.remove.nonNullAssertion'), "Remove the '!'");
+
+ // Expect only one of the fixes.
+ expect(removeNnaAction, hasLength(1));
+
+ // Ensure the action is for the diagnostic on the second bang which was
+ // closest to the range requested.
+ final secondBangPos =
+ positionFromOffset(withoutMarkers(content).indexOf('!);'), content);
+ expect(removeNnaAction.first.diagnostics, hasLength(1));
+ final diagStart = removeNnaAction.first.diagnostics.first.range.start;
+ expect(diagStart, equals(secondBangPos));
+ }
+}
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 006ce0b..c6eae2c 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -589,18 +589,18 @@
/// logic.
void validateChangesCanBeApplied() {
/// Check if a position is before (but not equal) to another position.
- bool isBefore(Position p, Position other) =>
+ bool isBeforeOrEqual(Position p, Position other) =>
p.line < other.line ||
- (p.line == other.line && p.character < other.character);
+ (p.line == other.line && p.character <= other.character);
/// Check if a position is after (but not equal) to another position.
- bool isAfter(Position p, Position other) =>
+ bool isAfterOrEqual(Position p, Position other) =>
p.line > other.line ||
- (p.line == other.line && p.character > other.character);
- // Check if two ranges intersect or touch.
+ (p.line == other.line && p.character >= other.character);
+ // Check if two ranges intersect.
bool rangesIntersect(Range r1, Range r2) {
- var endsBefore = isBefore(r1.end, r2.start);
- var startsAfter = isAfter(r1.start, r2.end);
+ var endsBefore = isBeforeOrEqual(r1.end, r2.start);
+ var startsAfter = isAfterOrEqual(r1.start, r2.end);
return !(endsBefore || startsAfter);
}
@@ -1225,7 +1225,7 @@
if (p1.line > p2.line) return 1;
if (p1.character < p2.character) return -1;
- if (p1.character > p2.character) return -1;
+ if (p1.character > p2.character) return 1;
return 0;
}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/bulk/data_driven_test.dart b/pkg/analysis_server/test/src/services/correction/fix/bulk/data_driven_test.dart
index 8404c8b..88e911a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/bulk/data_driven_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/bulk/data_driven_test.dart
@@ -2,8 +2,11 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart';
+import 'package:analysis_server/src/services/correction/dart/data_driven.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
+import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'bulk_fix_processor.dart';
@@ -30,6 +33,7 @@
defineReflectiveTests(WrongNumberOfTypeArgumentsExtensionTest);
defineReflectiveTests(WrongNumberOfTypeArgumentsMethodTest);
defineReflectiveTests(WrongNumberOfTypeArgumentsTest);
+ defineReflectiveTests(NoProducerOverlapsTest);
});
}
@@ -493,6 +497,39 @@
}
@reflectiveTest
+class NoProducerOverlapsTest {
+ void test_noProducerOverlaps() {
+ // Ensure that no error code is used by both data-driven fixes and
+ // non-data-driven fixes, as this could result in an LSP "Apply-all" code
+ // action accidentally executing data-driven fixes.
+
+ final dataDrivenCodes = <String>{};
+ final nonDataDrivenCodes = <String>{
+ ...BulkFixProcessor.lintProducerMap.keys,
+ ...BulkFixProcessor.nonLintProducerMap.keys.map((c) => c.uniqueName),
+ };
+
+ for (final code in BulkFixProcessor.nonLintMultiProducerMap.keys) {
+ for (final producerFunc
+ in BulkFixProcessor.nonLintMultiProducerMap[code]) {
+ final producer = producerFunc();
+ if (producer is DataDriven) {
+ dataDrivenCodes.add(code.uniqueName);
+ } else {
+ nonDataDrivenCodes.add(code.uniqueName);
+ }
+ }
+ }
+
+ final intersection = dataDrivenCodes.intersection(nonDataDrivenCodes);
+ if (intersection.isNotEmpty) {
+ fail(
+ 'Error codes $intersection have both data-driven and non-data-driven fixes');
+ }
+ }
+}
+
+@reflectiveTest
class NotEnoughPositionalArgumentsTest extends _DataDrivenTest {
Future<void> test_addParameter() async {
setPackageContent('''
diff --git a/pkg/dartdev/lib/src/commands/pub.dart b/pkg/dartdev/lib/src/commands/pub.dart
deleted file mode 100644
index e6162a5..0000000
--- a/pkg/dartdev/lib/src/commands/pub.dart
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) 2020, 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:async';
-
-import 'package:args/args.dart';
-
-import '../core.dart';
-import '../experiments.dart';
-import '../sdk.dart';
-import '../vm_interop_handler.dart';
-
-class PubCommand extends DartdevCommand {
- static const String cmdName = 'pub';
-
- PubCommand() : super(cmdName, 'Work with packages.');
-
- // TODO(jwren) as soon as pub commands are are implemented directly in
- // dartdev, remove this static list.
- /// A list of all subcommands, used only for the implementation of
- /// [usagePath], see below.
- static List<String> pubSubcommands = [
- 'cache',
- 'deps',
- 'downgrade',
- 'get',
- 'global',
- 'logout',
- 'outdated',
- 'publish',
- 'run',
- 'upgrade',
- 'uploader',
- 'version',
- ];
-
- @override
- ArgParser createArgParser() => ArgParser.allowAnything();
-
- @override
- void printUsage() {
- // Override [printUsage] for invocations of 'dart help pub' which won't
- // execute [run] below. Without this, the 'dart help pub' reports the
- // command pub with no commands or flags.
- if (!Sdk.checkArtifactExists(sdk.pubSnapshot)) {
- return;
- }
- final command = sdk.pubSnapshot;
- final args = ['help'];
-
- log.trace('$command ${args.first}');
-
- // Call 'pub help'
- VmInteropHandler.run(command, args, packageConfigOverride: null);
- }
-
- @override
- FutureOr<int> run() async {
- if (!Sdk.checkArtifactExists(sdk.pubSnapshot)) {
- return 255;
- }
- final command = sdk.pubSnapshot;
- var args = argResults.arguments;
-
- // Pass any --enable-experiment options along.
- if (args.isNotEmpty && wereExperimentsSpecified) {
- List<String> experimentIds = specifiedExperiments;
-
- if (args.first == 'run') {
- args = [
- ...args.sublist(0, 1),
- '--$experimentFlagName=${experimentIds.join(',')}',
- ...args.sublist(1),
- ];
- } else if (args.length > 1 && args[0] == 'global' && args[0] == 'run') {
- args = [
- ...args.sublist(0, 2),
- '--$experimentFlagName=${experimentIds.join(',')}',
- ...args.sublist(2),
- ];
- }
- }
-
- log.trace('$command ${args.join(' ')}');
- VmInteropHandler.run(command, args, packageConfigOverride: null);
- return 0;
- }
-}
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index d65d47e..ae9ae5d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1415,7 +1415,11 @@
}
ReturnStatementImpl fakeReturn = new ReturnStatementImpl(true, expression);
-
+ if (formals != null) {
+ for (int i = 0; i < formals.length; i++) {
+ typeInferrer?.flowAnalysis?.declare(formals[i].variable, true);
+ }
+ }
Statement inferredStatement = typeInferrer?.inferFunctionBody(
this, fileOffset, const DynamicType(), AsyncMarker.Sync, fakeReturn);
assert(
diff --git a/pkg/vm/lib/transformations/protobuf_aware_treeshaker/transformer.dart b/pkg/vm/lib/transformations/protobuf_aware_treeshaker/transformer.dart
index 245d77d..2a88c7c 100644
--- a/pkg/vm/lib/transformations/protobuf_aware_treeshaker/transformer.dart
+++ b/pkg/vm/lib/transformations/protobuf_aware_treeshaker/transformer.dart
@@ -213,6 +213,17 @@
node.body.accept(this);
}
+ String _extractFieldName(Expression expression) {
+ if (expression is StringLiteral) {
+ return expression.value;
+ }
+ if (expression is ConditionalExpression) {
+ return _extractFieldName(expression.otherwise);
+ }
+ throw ArgumentError.value(
+ expression, 'expression', 'Unsupported expression');
+ }
+
void _changeCascadeEntry(Expression initializer) {
if (initializer is MethodInvocation &&
initializer.interfaceTarget?.enclosingClass == builderInfoClass &&
@@ -222,7 +233,7 @@
if (!usedTagNumbers.contains(tagNumber)) {
if (info != null) {
final fieldName =
- (initializer.arguments.positional[1] as StringLiteral).value;
+ _extractFieldName(initializer.arguments.positional[1]);
info.removedMessageFields.add("${visitedClass.name}.$fieldName");
}
diff --git a/pkg/vm/testcases/transformations/protobuf_aware_treeshaker/lib/generated/foo.pb.dart b/pkg/vm/testcases/transformations/protobuf_aware_treeshaker/lib/generated/foo.pb.dart
index cab7883..19c9bac5 100644
--- a/pkg/vm/testcases/transformations/protobuf_aware_treeshaker/lib/generated/foo.pb.dart
+++ b/pkg/vm/testcases/transformations/protobuf_aware_treeshaker/lib/generated/foo.pb.dart
@@ -2,38 +2,40 @@
// Generated code. Do not modify.
// source: foo.proto
//
-// @dart = 2.3
-// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class FooKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('FooKeep', createEmptyInstance: create)
- ..aOM<BarKeep>(1, 'barKeep',
- protoName: 'barKeep', subBuilder: BarKeep.create)
- ..aOM<BarKeep>(2, 'barDrop',
- protoName: 'barDrop', subBuilder: BarKeep.create)
- ..m<$core.String, BarKeep>(3, 'mapKeep',
- protoName: 'mapKeep',
- entryClassName: 'FooKeep.MapKeepEntry',
- keyFieldType: $pb.PbFieldType.OS,
- valueFieldType: $pb.PbFieldType.OM,
- valueCreator: BarKeep.create)
- ..m<$core.String, ZopDrop>(4, 'mapDrop',
- protoName: 'mapDrop',
- entryClassName: 'FooKeep.MapDropEntry',
- keyFieldType: $pb.PbFieldType.OS,
- valueFieldType: $pb.PbFieldType.OM,
- valueCreator: ZopDrop.create)
- ..a<$core.int>(5, 'aKeep', $pb.PbFieldType.O3, protoName: 'aKeep')
- ..aOM<HasKeep>(6, 'hasKeep',
- protoName: 'hasKeep', subBuilder: HasKeep.create)
- ..aOM<ClearKeep>(7, 'clearKeep',
- protoName: 'clearKeep', subBuilder: ClearKeep.create)
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'FooKeep',
+ createEmptyInstance: create)
+ ..aOM<BarKeep>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'barKeep',
+ protoName: 'barKeep', subBuilder: BarKeep.create)
+ ..aOM<BarKeep>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'barDrop',
+ protoName: 'barDrop', subBuilder: BarKeep.create)
+ ..m<$core.String, BarKeep>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'mapKeep',
+ protoName: 'mapKeep',
+ entryClassName: 'FooKeep.MapKeepEntry',
+ keyFieldType: $pb.PbFieldType.OS,
+ valueFieldType: $pb.PbFieldType.OM,
+ valueCreator: BarKeep.create)
+ ..m<$core.String, ZopDrop>(
+ 4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'mapDrop',
+ protoName: 'mapDrop',
+ entryClassName: 'FooKeep.MapDropEntry',
+ keyFieldType: $pb.PbFieldType.OS,
+ valueFieldType: $pb.PbFieldType.OM,
+ valueCreator: ZopDrop.create)
+ ..a<$core.int>(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'aKeep', $pb.PbFieldType.O3,
+ protoName: 'aKeep')
+ ..aOM<HasKeep>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'hasKeep',
+ protoName: 'hasKeep', subBuilder: HasKeep.create)
+ ..aOM<ClearKeep>(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'clearKeep',
+ protoName: 'clearKeep', subBuilder: ClearKeep.create)
+ ..hasRequiredFields = false;
FooKeep._() : super();
factory FooKeep() => create();
@@ -43,9 +45,16 @@
factory FooKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
FooKeep clone() => FooKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
FooKeep copyWith(void Function(FooKeep) updates) =>
- super.copyWith((message) => updates(message as FooKeep));
+ super.copyWith((message) => updates(message as FooKeep))
+ as FooKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static FooKeep create() => FooKeep._();
@@ -54,7 +63,7 @@
@$core.pragma('dart2js:noInline')
static FooKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<FooKeep>(create);
- static FooKeep _defaultInstance;
+ static FooKeep? _defaultInstance;
@$pb.TagNumber(1)
BarKeep get barKeep => $_getN(0);
@@ -132,11 +141,26 @@
}
class BarKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('BarKeep', createEmptyInstance: create)
- ..a<$core.int>(1, 'aKeep', $pb.PbFieldType.O3, protoName: 'aKeep')
- ..a<$core.int>(2, 'bDrop', $pb.PbFieldType.O3, protoName: 'bDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'BarKeep',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aKeep',
+ $pb.PbFieldType.O3,
+ protoName: 'aKeep')
+ ..a<$core.int>(
+ 2,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'bDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'bDrop')
+ ..hasRequiredFields = false;
BarKeep._() : super();
factory BarKeep() => create();
@@ -146,9 +170,16 @@
factory BarKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
BarKeep clone() => BarKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
BarKeep copyWith(void Function(BarKeep) updates) =>
- super.copyWith((message) => updates(message as BarKeep));
+ super.copyWith((message) => updates(message as BarKeep))
+ as BarKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BarKeep create() => BarKeep._();
@@ -157,7 +188,7 @@
@$core.pragma('dart2js:noInline')
static BarKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BarKeep>(create);
- static BarKeep _defaultInstance;
+ static BarKeep? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aKeep => $_getIZ(0);
@@ -185,10 +216,19 @@
}
class HasKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('HasKeep', createEmptyInstance: create)
- ..a<$core.int>(1, 'aDrop', $pb.PbFieldType.O3, protoName: 'aDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'HasKeep',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'aDrop')
+ ..hasRequiredFields = false;
HasKeep._() : super();
factory HasKeep() => create();
@@ -198,9 +238,16 @@
factory HasKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
HasKeep clone() => HasKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
HasKeep copyWith(void Function(HasKeep) updates) =>
- super.copyWith((message) => updates(message as HasKeep));
+ super.copyWith((message) => updates(message as HasKeep))
+ as HasKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static HasKeep create() => HasKeep._();
@@ -209,7 +256,7 @@
@$core.pragma('dart2js:noInline')
static HasKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<HasKeep>(create);
- static HasKeep _defaultInstance;
+ static HasKeep? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aDrop => $_getIZ(0);
@@ -225,10 +272,19 @@
}
class ClearKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('ClearKeep', createEmptyInstance: create)
- ..a<$core.int>(1, 'aDrop', $pb.PbFieldType.O3, protoName: 'aDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'ClearKeep',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'aDrop')
+ ..hasRequiredFields = false;
ClearKeep._() : super();
factory ClearKeep() => create();
@@ -238,9 +294,16 @@
factory ClearKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
ClearKeep clone() => ClearKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
ClearKeep copyWith(void Function(ClearKeep) updates) =>
- super.copyWith((message) => updates(message as ClearKeep));
+ super.copyWith((message) => updates(message as ClearKeep))
+ as ClearKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ClearKeep create() => ClearKeep._();
@@ -249,7 +312,7 @@
@$core.pragma('dart2js:noInline')
static ClearKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ClearKeep>(create);
- static ClearKeep _defaultInstance;
+ static ClearKeep? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aDrop => $_getIZ(0);
@@ -265,10 +328,19 @@
}
class ZopDrop extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('ZopDrop', createEmptyInstance: create)
- ..a<$core.int>(1, 'aDrop', $pb.PbFieldType.O3, protoName: 'aDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'ZopDrop',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'aDrop')
+ ..hasRequiredFields = false;
ZopDrop._() : super();
factory ZopDrop() => create();
@@ -278,9 +350,16 @@
factory ZopDrop.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
ZopDrop clone() => ZopDrop()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
ZopDrop copyWith(void Function(ZopDrop) updates) =>
- super.copyWith((message) => updates(message as ZopDrop));
+ super.copyWith((message) => updates(message as ZopDrop))
+ as ZopDrop; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ZopDrop create() => ZopDrop._();
@@ -289,7 +368,7 @@
@$core.pragma('dart2js:noInline')
static ZopDrop getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ZopDrop>(create);
- static ZopDrop _defaultInstance;
+ static ZopDrop? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aDrop => $_getIZ(0);
@@ -305,10 +384,19 @@
}
class MobDrop extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('MobDrop', createEmptyInstance: create)
- ..a<$core.int>(1, 'aDrop', $pb.PbFieldType.O3, protoName: 'aDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'MobDrop',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'aDrop')
+ ..hasRequiredFields = false;
MobDrop._() : super();
factory MobDrop() => create();
@@ -318,9 +406,16 @@
factory MobDrop.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
MobDrop clone() => MobDrop()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
MobDrop copyWith(void Function(MobDrop) updates) =>
- super.copyWith((message) => updates(message as MobDrop));
+ super.copyWith((message) => updates(message as MobDrop))
+ as MobDrop; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static MobDrop create() => MobDrop._();
@@ -329,7 +424,7 @@
@$core.pragma('dart2js:noInline')
static MobDrop getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<MobDrop>(create);
- static MobDrop _defaultInstance;
+ static MobDrop? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aDrop => $_getIZ(0);
diff --git a/pkg/vm/testcases/transformations/protobuf_aware_treeshaker/lib/generated/name_mangling.pb.dart b/pkg/vm/testcases/transformations/protobuf_aware_treeshaker/lib/generated/name_mangling.pb.dart
index bc76b27..c42141a 100644
--- a/pkg/vm/testcases/transformations/protobuf_aware_treeshaker/lib/generated/name_mangling.pb.dart
+++ b/pkg/vm/testcases/transformations/protobuf_aware_treeshaker/lib/generated/name_mangling.pb.dart
@@ -2,17 +2,20 @@
// Generated code. Do not modify.
// source: name_mangling.proto
//
-// @dart = 2.3
-// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class AKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('AKeep', createEmptyInstance: create)
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'AKeep',
+ createEmptyInstance: create)
+ ..hasRequiredFields = false;
AKeep._() : super();
factory AKeep() => create();
@@ -22,9 +25,16 @@
factory AKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
AKeep clone() => AKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
AKeep copyWith(void Function(AKeep) updates) =>
- super.copyWith((message) => updates(message as AKeep));
+ super.copyWith((message) => updates(message as AKeep))
+ as AKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static AKeep create() => AKeep._();
@@ -33,14 +43,22 @@
@$core.pragma('dart2js:noInline')
static AKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AKeep>(create);
- static AKeep _defaultInstance;
+ static AKeep? _defaultInstance;
}
class NameManglingKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('NameManglingKeep', createEmptyInstance: create)
- ..aOM<AKeep>(10, 'clone', subBuilder: AKeep.create)
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'NameManglingKeep',
+ createEmptyInstance: create)
+ ..aOM<AKeep>(
+ 10,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'clone',
+ subBuilder: AKeep.create)
+ ..hasRequiredFields = false;
NameManglingKeep._() : super();
factory NameManglingKeep() => create();
@@ -50,9 +68,16 @@
factory NameManglingKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
NameManglingKeep clone() => NameManglingKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
NameManglingKeep copyWith(void Function(NameManglingKeep) updates) =>
- super.copyWith((message) => updates(message as NameManglingKeep));
+ super.copyWith((message) => updates(message as NameManglingKeep))
+ as NameManglingKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static NameManglingKeep create() => NameManglingKeep._();
@@ -62,7 +87,7 @@
@$core.pragma('dart2js:noInline')
static NameManglingKeep getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<NameManglingKeep>(create);
- static NameManglingKeep _defaultInstance;
+ static NameManglingKeep? _defaultInstance;
@$pb.TagNumber(10)
AKeep get clone_10 => $_getN(0);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
index 8726004..3c20021 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
@@ -13,7 +13,7 @@
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep* #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
} =>#t2;
- [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 2;
} =>#t3);
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
@@ -26,7 +26,7 @@
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}();
});
}
-library foo.pb.dart;
+library foo.pb.dart /*isNonNullableByDefault*/;
import self as self;
import "package:protobuf/protobuf.dart" as pro;
import "dart:core" as core;
@@ -35,99 +35,99 @@
import "package:protobuf/protobuf.dart" as $pb;
class FooKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t1 = new pro::BuilderInfo::•("FooKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep*>(1, "barKeep", #C1);
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "FooKeep") in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2);
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String*, self::BarKeep*>(3, "mapKeep", "FooKeep.MapKeepEntry", #C2, "mapKeep", #C1, #C3);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(3, (#C1) ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", #C3, "mapKeep", #C2, #C4);
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int*>(5, "aKeep", #C4);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep*>(6, "hasKeep", #C5);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep*>(7, "clearKeep", #C6);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep", #C5, "aKeep");
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C6);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C7);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t1;
- constructor _() → self::FooKeep*
+ constructor _() → self::FooKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::FooKeep*
+ static factory •() → self::FooKeep
return [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::FooKeep::_i;
- @#C9
- static method create() → self::FooKeep*
+ @#C10
+ static method create() → self::FooKeep
return new self::FooKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C11
- get barKeep() → self::BarKeep*
- return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep*>(0);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C11
- set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C12
+ get barKeep() → self::BarKeep
+ return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>(0);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C12
+ set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(1, v);
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C13
- get mapKeep() → core::Map<core::String*, self::BarKeep*>*
- return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String*, self::BarKeep*>(2);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=()->i] @#C15
- get aKeep() → core::int*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C14
+ get mapKeep() → core::Map<core::String, self::BarKeep>
+ return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(2);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=()->i] @#C16
+ get aKeep() → core::int
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(i)->b] @#C15
- set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(i)->b] @#C16
+ set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v);
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] @#C17
- method hasHasKeep() → core::bool*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] @#C18
+ method hasHasKeep() → core::bool
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}(5);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] @#C19
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] @#C20
method clearClearKeep() → void
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}(7);
}
class BarKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t2 = new pro::BuilderInfo::•("BarKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int*>(1, "aKeep", #C4);
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "BarKeep") in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep", #C5, "aKeep");
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t2;
- constructor _() → self::BarKeep*
+ constructor _() → self::BarKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::BarKeep*
+ static factory •() → self::BarKeep
return [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::BarKeep::_i;
- @#C9
- static method create() → self::BarKeep*
+ @#C10
+ static method create() → self::BarKeep
return new self::BarKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=()->i] @#C11
- get aKeep() → core::int*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=()->i] @#C12
+ get aKeep() → core::int
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(i)->b] @#C11
- set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(i)->b] @#C12
+ set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v);
}
}
class HasKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t3 = new pro::BuilderInfo::•("HasKeep") in block {
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "HasKeep") in block {
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t3;
- constructor _() → self::HasKeep*
+ constructor _() → self::HasKeep
: super pro::GeneratedMessage::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::HasKeep::_i;
- @#C9
- static method create() → self::HasKeep*
+ @#C10
+ static method create() → self::HasKeep
return new self::HasKeep::_();
}
class ClearKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t4 = new pro::BuilderInfo::•("ClearKeep") in block {
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "ClearKeep") in block {
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t4;
- constructor _() → self::ClearKeep*
+ constructor _() → self::ClearKeep
: super pro::GeneratedMessage::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::ClearKeep::_i;
- @#C9
- static method create() → self::ClearKeep*
+ @#C10
+ static method create() → self::ClearKeep
return new self::ClearKeep::_();
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
index f59d5b9..73d4dc4 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
@@ -19,7 +19,7 @@
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}();
});
}
-library foo.pb.dart;
+library foo.pb.dart /*isNonNullableByDefault*/;
import self as self;
import "package:protobuf/protobuf.dart" as pro;
import "dart:core" as core;
@@ -28,111 +28,87 @@
import "package:protobuf/protobuf.dart" as $pb;
class FooKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t1 = new pro::BuilderInfo::•("FooKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep*>(1, "barKeep", #C1);
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "FooKeep", createEmptyInstance: #C2) in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C3);
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String*, self::BarKeep*>(3, "mapKeep", "FooKeep.MapKeepEntry", #C2, "mapKeep", #C1, #C3);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(3, (#C1) ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", #C4, "mapKeep", #C3, #C5);
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int*>(5, "aKeep", #C4);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep*>(6, "hasKeep", #C5);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep*>(7, "clearKeep", #C6);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep", #C6, "aKeep");
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C7);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C8);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t1;
- constructor _() → self::FooKeep*
+ constructor _() → self::FooKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::FooKeep*
- return [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create();
- static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int*>] core::List<core::int*>* i) → self::FooKeep*
- return let final self::FooKeep* #t2 = [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create() in block {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::GeneratedMessage::mergeFromBuffer}(i, #C7);
+ static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int*>] core::List<core::int> i) → self::FooKeep
+ return let final self::FooKeep #t2 = [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create() in block {
+ [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::GeneratedMessage::mergeFromBuffer}(i, #C9);
} =>#t2;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method clone() → self::FooKeep*
- return let final self::FooKeep* #t3 = [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::•() in block {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromMessage] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::GeneratedMessage::mergeFromMessage}(this);
- } =>#t3;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::FooKeep::_i;
- @#C10
- static method create() → self::FooKeep*
+ @#C12
+ static method create() → self::FooKeep
return new self::FooKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C12
- get barKeep() → self::BarKeep*
- return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep*>(0);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] @#C14
- get mapKeep() → core::Map<core::String*, self::BarKeep*>*
- return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String*, self::BarKeep*>(2);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:6] [@vm.unboxing-info.metadata=()->i] @#C16
- get aKeep() → core::int*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2] @#C14
+ get barKeep() → self::BarKeep
+ return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>(0);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] @#C16
+ get mapKeep() → core::Map<core::String, self::BarKeep>
+ return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(2);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] [@vm.unboxing-info.metadata=()->i] @#C18
+ get aKeep() → core::int
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] @#C18
- method hasHasKeep() → core::bool*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] @#C20
+ method hasHasKeep() → core::bool
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}(5);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] @#C20
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] @#C22
method clearClearKeep() → void
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}(7);
}
class BarKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t4 = new pro::BuilderInfo::•("BarKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::a}<core::int*>(1, "aKeep", #C4);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
- } =>#t4;
- constructor _() → self::BarKeep*
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "BarKeep", createEmptyInstance: #C3) in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep", #C6, "aKeep");
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
+ } =>#t3;
+ constructor _() → self::BarKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::BarKeep*
- return [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method clone() → self::BarKeep*
- return let final self::BarKeep* #t5 = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep::•() in block {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromMessage] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::GeneratedMessage::mergeFromMessage}(this);
- } =>#t5;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::BarKeep::_i;
- @#C10
- static method create() → self::BarKeep*
+ @#C12
+ static method create() → self::BarKeep
return new self::BarKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:11] [@vm.unboxing-info.metadata=()->i] @#C12
- get aKeep() → core::int*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:9] [@vm.unboxing-info.metadata=()->i] @#C14
+ get aKeep() → core::int
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0);
}
class HasKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t6 = new pro::BuilderInfo::•("HasKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t6.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t6.{pro::BuilderInfo::hasRequiredFields} = false;
- } =>#t6;
- constructor _() → self::HasKeep*
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "HasKeep", createEmptyInstance: #C7) in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
+ } =>#t4;
+ constructor _() → self::HasKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::HasKeep*
- return [@vm.inferred-type.metadata=foo.pb.dart::HasKeep] self::HasKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method clone() → self::HasKeep*
- return let final self::HasKeep* #t7 = [@vm.inferred-type.metadata=foo.pb.dart::HasKeep] self::HasKeep::•() in block {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromMessage] [@vm.inferred-type.metadata=!? (skip check)] #t7.{pro::GeneratedMessage::mergeFromMessage}(this);
- } =>#t7;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::HasKeep::_i;
- @#C10
- static method create() → self::HasKeep*
+ @#C12
+ static method create() → self::HasKeep
return new self::HasKeep::_();
}
class ClearKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t8 = new pro::BuilderInfo::•("ClearKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t8.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t8.{pro::BuilderInfo::hasRequiredFields} = false;
- } =>#t8;
- constructor _() → self::ClearKeep*
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t5 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "ClearKeep", createEmptyInstance: #C8) in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::hasRequiredFields} = false;
+ } =>#t5;
+ constructor _() → self::ClearKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::ClearKeep*
- return [@vm.inferred-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method clone() → self::ClearKeep*
- return let final self::ClearKeep* #t9 = [@vm.inferred-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep::•() in block {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromMessage] [@vm.inferred-type.metadata=!? (skip check)] #t9.{pro::GeneratedMessage::mergeFromMessage}(this);
- } =>#t9;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::ClearKeep::_i;
- @#C10
- static method create() → self::ClearKeep*
+ @#C12
+ static method create() → self::ClearKeep
return new self::ClearKeep::_();
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
index 66a360a..09a43b0 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
@@ -15,10 +15,10 @@
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.bDrop] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::bDrop} = 4;
} =>#t2;
- [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 42;
} =>#t3);
- [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapDrop] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapDrop}.{core::Map::[]=}("zop", let final pb::ZopDrop* #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop] pb::ZopDrop::•() in block {
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapDrop] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapDrop}.{core::Map::[]=}("zop", let final pb::ZopDrop* #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop] pb::ZopDrop::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop.aDrop] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pb::ZopDrop::aDrop} = 3;
} =>#t4);
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
@@ -33,7 +33,7 @@
}
core::print("];");
}
-library foo.pb.dart;
+library foo.pb.dart /*isNonNullableByDefault*/;
import self as self;
import "package:protobuf/protobuf.dart" as pro;
import "dart:core" as core;
@@ -42,123 +42,123 @@
import "package:protobuf/protobuf.dart" as $pb;
class FooKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t1 = new pro::BuilderInfo::•("FooKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep*>(1, "barKeep", #C1);
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "FooKeep") in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2);
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String*, self::BarKeep*>(3, "mapKeep", "FooKeep.MapKeepEntry", #C2, "mapKeep", #C1, #C3);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String*, self::ZopDrop*>(4, "mapDrop", "FooKeep.MapDropEntry", #C2, "mapDrop", #C4, #C3);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int*>(5, "aKeep", #C5);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep*>(6, "hasKeep", #C6);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep*>(7, "clearKeep", #C7);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(3, (#C1) ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", #C3, "mapKeep", #C2, #C4);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::ZopDrop>(4, (#C1) ?{core::String} "" : "mapDrop", "FooKeep.MapDropEntry", #C3, "mapDrop", #C5, #C4);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep", #C6, "aKeep");
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C7);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C8);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t1;
- constructor _() → self::FooKeep*
+ constructor _() → self::FooKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::FooKeep*
+ static factory •() → self::FooKeep
return [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::FooKeep::_i;
- @#C10
- static method create() → self::FooKeep*
+ @#C11
+ static method create() → self::FooKeep
return new self::FooKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2] @#C12
- set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2] @#C13
+ set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(1, v);
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] @#C14
- get mapKeep() → core::Map<core::String*, self::BarKeep*>*
- return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String*, self::BarKeep*>(2);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C16
- get mapDrop() → core::Map<core::String*, self::ZopDrop*>*
- return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String*, self::ZopDrop*>(3);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] [@vm.unboxing-info.metadata=(i)->b] @#C18
- set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] @#C15
+ get mapKeep() → core::Map<core::String, self::BarKeep>
+ return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(2);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C17
+ get mapDrop() → core::Map<core::String, self::ZopDrop>
+ return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::ZopDrop>(3);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] [@vm.unboxing-info.metadata=(i)->b] @#C19
+ set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v);
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6] @#C20
- set hasKeep([@vm.inferred-type.metadata=foo.pb.dart::HasKeep] self::HasKeep* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6] @#C21
+ set hasKeep([@vm.inferred-type.metadata=foo.pb.dart::HasKeep] self::HasKeep v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(6, v);
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7] @#C22
- set clearKeep([@vm.inferred-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7] @#C23
+ set clearKeep([@vm.inferred-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(7, v);
}
}
class BarKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t2 = new pro::BuilderInfo::•("BarKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int*>(1, "aKeep", #C5);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int*>(2, "bDrop", #C5);
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "BarKeep") in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep", #C6, "aKeep");
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(2, (#C1) ?{core::String} "" : "bDrop", #C6, "bDrop");
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t2;
- constructor _() → self::BarKeep*
+ constructor _() → self::BarKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::BarKeep*
+ static factory •() → self::BarKeep
return [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::BarKeep::_i;
- @#C10
- static method create() → self::BarKeep*
+ @#C11
+ static method create() → self::BarKeep
return new self::BarKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8] [@vm.unboxing-info.metadata=(i)->b] @#C12
- set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8] [@vm.unboxing-info.metadata=(i)->b] @#C13
+ set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v);
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9] [@vm.unboxing-info.metadata=(i)->b] @#C24
- set bDrop([@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] core::int* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9] [@vm.unboxing-info.metadata=(i)->b] @#C25
+ set bDrop([@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] core::int v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(1, v);
}
}
class HasKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t3 = new pro::BuilderInfo::•("HasKeep") in block {
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "HasKeep") in block {
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t3;
- constructor _() → self::HasKeep*
+ constructor _() → self::HasKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::HasKeep*
+ static factory •() → self::HasKeep
return [@vm.inferred-type.metadata=foo.pb.dart::HasKeep] self::HasKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::HasKeep::_i;
- @#C10
- static method create() → self::HasKeep*
+ @#C11
+ static method create() → self::HasKeep
return new self::HasKeep::_();
}
class ClearKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t4 = new pro::BuilderInfo::•("ClearKeep") in block {
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "ClearKeep") in block {
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t4;
- constructor _() → self::ClearKeep*
+ constructor _() → self::ClearKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::ClearKeep*
+ static factory •() → self::ClearKeep
return [@vm.inferred-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::ClearKeep::_i;
- @#C10
- static method create() → self::ClearKeep*
+ @#C11
+ static method create() → self::ClearKeep
return new self::ClearKeep::_();
}
class ZopDrop extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t5 = new pro::BuilderInfo::•("ZopDrop") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::a}<core::int*>(1, "aDrop", #C5);
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t5 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "ZopDrop") in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aDrop", #C6, "aDrop");
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t5;
- constructor _() → self::ZopDrop*
+ constructor _() → self::ZopDrop
: super pro::GeneratedMessage::•()
;
- static factory •() → self::ZopDrop*
+ static factory •() → self::ZopDrop
return [@vm.inferred-type.metadata=foo.pb.dart::ZopDrop] self::ZopDrop::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::ZopDrop::_i;
- @#C10
- static method create() → self::ZopDrop*
+ @#C11
+ static method create() → self::ZopDrop
return new self::ZopDrop::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:10] [@vm.unboxing-info.metadata=(i)->b] @#C12
- set aDrop([@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] core::int* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:10] [@vm.unboxing-info.metadata=(i)->b] @#C13
+ set aDrop([@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] core::int v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v);
}
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
index 6423786..50cebc8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
@@ -16,7 +16,7 @@
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep* #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
} =>#t2;
- [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 2;
} =>#t3);
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
@@ -30,7 +30,7 @@
exp::expect(() → void => [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(), [@vm.inferred-type.metadata=library package:test_api/src/frontend/throws_matcher.dart::Throws] thr::throwsA(#C2));
});
}
-library foo.pb.dart;
+library foo.pb.dart /*isNonNullableByDefault*/;
import self as self;
import "package:protobuf/protobuf.dart" as pro;
import "dart:core" as core;
@@ -39,99 +39,99 @@
import "package:protobuf/protobuf.dart" as $pb;
class FooKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t1 = new pro::BuilderInfo::•("FooKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep*>(1, "barKeep", #C1);
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "FooKeep") in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2);
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String*, self::BarKeep*>(3, "mapKeep", "FooKeep.MapKeepEntry", #C2, "mapKeep", #C1, #C3);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(3, (#C1) ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", #C3, "mapKeep", #C2, #C4);
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int*>(5, "aKeep", #C4);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep*>(6, "hasKeep", #C5);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep*>(7, "clearKeep", #C6);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep", #C5, "aKeep");
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C6);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C7);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t1;
- constructor _() → self::FooKeep*
+ constructor _() → self::FooKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::FooKeep*
+ static factory •() → self::FooKeep
return [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::FooKeep::_i;
- @#C9
- static method create() → self::FooKeep*
+ @#C10
+ static method create() → self::FooKeep
return new self::FooKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C11
- get barKeep() → self::BarKeep*
- return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep*>(0);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C11
- set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C12
+ get barKeep() → self::BarKeep
+ return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>(0);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C12
+ set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(1, v);
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C13
- get mapKeep() → core::Map<core::String*, self::BarKeep*>*
- return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String*, self::BarKeep*>(2);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=()->i] @#C15
- get aKeep() → core::int*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C14
+ get mapKeep() → core::Map<core::String, self::BarKeep>
+ return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(2);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=()->i] @#C16
+ get aKeep() → core::int
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(i)->b] @#C15
- set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(i)->b] @#C16
+ set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v);
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] @#C17
- method hasHasKeep() → core::bool*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] @#C18
+ method hasHasKeep() → core::bool
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}(5);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] @#C19
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] @#C20
method clearClearKeep() → void
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}(7);
}
class BarKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t2 = new pro::BuilderInfo::•("BarKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int*>(1, "aKeep", #C4);
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "BarKeep") in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep", #C5, "aKeep");
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t2;
- constructor _() → self::BarKeep*
+ constructor _() → self::BarKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::BarKeep*
+ static factory •() → self::BarKeep
return [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::BarKeep::_i;
- @#C9
- static method create() → self::BarKeep*
+ @#C10
+ static method create() → self::BarKeep
return new self::BarKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=()->i] @#C11
- get aKeep() → core::int*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=()->i] @#C12
+ get aKeep() → core::int
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(i)->b] @#C11
- set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int* v) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(i)->b] @#C12
+ set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v);
}
}
class HasKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t3 = new pro::BuilderInfo::•("HasKeep") in block {
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "HasKeep") in block {
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t3;
- constructor _() → self::HasKeep*
+ constructor _() → self::HasKeep
: super pro::GeneratedMessage::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::HasKeep::_i;
- @#C9
- static method create() → self::HasKeep*
+ @#C10
+ static method create() → self::HasKeep
return new self::HasKeep::_();
}
class ClearKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t4 = new pro::BuilderInfo::•("ClearKeep") in block {
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "ClearKeep") in block {
[@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t4;
- constructor _() → self::ClearKeep*
+ constructor _() → self::ClearKeep
: super pro::GeneratedMessage::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::ClearKeep::_i;
- @#C9
- static method create() → self::ClearKeep*
+ @#C10
+ static method create() → self::ClearKeep
return new self::ClearKeep::_();
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart
index cab7883..19c9bac5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart
@@ -2,38 +2,40 @@
// Generated code. Do not modify.
// source: foo.proto
//
-// @dart = 2.3
-// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class FooKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('FooKeep', createEmptyInstance: create)
- ..aOM<BarKeep>(1, 'barKeep',
- protoName: 'barKeep', subBuilder: BarKeep.create)
- ..aOM<BarKeep>(2, 'barDrop',
- protoName: 'barDrop', subBuilder: BarKeep.create)
- ..m<$core.String, BarKeep>(3, 'mapKeep',
- protoName: 'mapKeep',
- entryClassName: 'FooKeep.MapKeepEntry',
- keyFieldType: $pb.PbFieldType.OS,
- valueFieldType: $pb.PbFieldType.OM,
- valueCreator: BarKeep.create)
- ..m<$core.String, ZopDrop>(4, 'mapDrop',
- protoName: 'mapDrop',
- entryClassName: 'FooKeep.MapDropEntry',
- keyFieldType: $pb.PbFieldType.OS,
- valueFieldType: $pb.PbFieldType.OM,
- valueCreator: ZopDrop.create)
- ..a<$core.int>(5, 'aKeep', $pb.PbFieldType.O3, protoName: 'aKeep')
- ..aOM<HasKeep>(6, 'hasKeep',
- protoName: 'hasKeep', subBuilder: HasKeep.create)
- ..aOM<ClearKeep>(7, 'clearKeep',
- protoName: 'clearKeep', subBuilder: ClearKeep.create)
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'FooKeep',
+ createEmptyInstance: create)
+ ..aOM<BarKeep>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'barKeep',
+ protoName: 'barKeep', subBuilder: BarKeep.create)
+ ..aOM<BarKeep>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'barDrop',
+ protoName: 'barDrop', subBuilder: BarKeep.create)
+ ..m<$core.String, BarKeep>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'mapKeep',
+ protoName: 'mapKeep',
+ entryClassName: 'FooKeep.MapKeepEntry',
+ keyFieldType: $pb.PbFieldType.OS,
+ valueFieldType: $pb.PbFieldType.OM,
+ valueCreator: BarKeep.create)
+ ..m<$core.String, ZopDrop>(
+ 4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'mapDrop',
+ protoName: 'mapDrop',
+ entryClassName: 'FooKeep.MapDropEntry',
+ keyFieldType: $pb.PbFieldType.OS,
+ valueFieldType: $pb.PbFieldType.OM,
+ valueCreator: ZopDrop.create)
+ ..a<$core.int>(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'aKeep', $pb.PbFieldType.O3,
+ protoName: 'aKeep')
+ ..aOM<HasKeep>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'hasKeep',
+ protoName: 'hasKeep', subBuilder: HasKeep.create)
+ ..aOM<ClearKeep>(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'clearKeep',
+ protoName: 'clearKeep', subBuilder: ClearKeep.create)
+ ..hasRequiredFields = false;
FooKeep._() : super();
factory FooKeep() => create();
@@ -43,9 +45,16 @@
factory FooKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
FooKeep clone() => FooKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
FooKeep copyWith(void Function(FooKeep) updates) =>
- super.copyWith((message) => updates(message as FooKeep));
+ super.copyWith((message) => updates(message as FooKeep))
+ as FooKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static FooKeep create() => FooKeep._();
@@ -54,7 +63,7 @@
@$core.pragma('dart2js:noInline')
static FooKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<FooKeep>(create);
- static FooKeep _defaultInstance;
+ static FooKeep? _defaultInstance;
@$pb.TagNumber(1)
BarKeep get barKeep => $_getN(0);
@@ -132,11 +141,26 @@
}
class BarKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('BarKeep', createEmptyInstance: create)
- ..a<$core.int>(1, 'aKeep', $pb.PbFieldType.O3, protoName: 'aKeep')
- ..a<$core.int>(2, 'bDrop', $pb.PbFieldType.O3, protoName: 'bDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'BarKeep',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aKeep',
+ $pb.PbFieldType.O3,
+ protoName: 'aKeep')
+ ..a<$core.int>(
+ 2,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'bDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'bDrop')
+ ..hasRequiredFields = false;
BarKeep._() : super();
factory BarKeep() => create();
@@ -146,9 +170,16 @@
factory BarKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
BarKeep clone() => BarKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
BarKeep copyWith(void Function(BarKeep) updates) =>
- super.copyWith((message) => updates(message as BarKeep));
+ super.copyWith((message) => updates(message as BarKeep))
+ as BarKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BarKeep create() => BarKeep._();
@@ -157,7 +188,7 @@
@$core.pragma('dart2js:noInline')
static BarKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BarKeep>(create);
- static BarKeep _defaultInstance;
+ static BarKeep? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aKeep => $_getIZ(0);
@@ -185,10 +216,19 @@
}
class HasKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('HasKeep', createEmptyInstance: create)
- ..a<$core.int>(1, 'aDrop', $pb.PbFieldType.O3, protoName: 'aDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'HasKeep',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'aDrop')
+ ..hasRequiredFields = false;
HasKeep._() : super();
factory HasKeep() => create();
@@ -198,9 +238,16 @@
factory HasKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
HasKeep clone() => HasKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
HasKeep copyWith(void Function(HasKeep) updates) =>
- super.copyWith((message) => updates(message as HasKeep));
+ super.copyWith((message) => updates(message as HasKeep))
+ as HasKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static HasKeep create() => HasKeep._();
@@ -209,7 +256,7 @@
@$core.pragma('dart2js:noInline')
static HasKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<HasKeep>(create);
- static HasKeep _defaultInstance;
+ static HasKeep? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aDrop => $_getIZ(0);
@@ -225,10 +272,19 @@
}
class ClearKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('ClearKeep', createEmptyInstance: create)
- ..a<$core.int>(1, 'aDrop', $pb.PbFieldType.O3, protoName: 'aDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'ClearKeep',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'aDrop')
+ ..hasRequiredFields = false;
ClearKeep._() : super();
factory ClearKeep() => create();
@@ -238,9 +294,16 @@
factory ClearKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
ClearKeep clone() => ClearKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
ClearKeep copyWith(void Function(ClearKeep) updates) =>
- super.copyWith((message) => updates(message as ClearKeep));
+ super.copyWith((message) => updates(message as ClearKeep))
+ as ClearKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ClearKeep create() => ClearKeep._();
@@ -249,7 +312,7 @@
@$core.pragma('dart2js:noInline')
static ClearKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ClearKeep>(create);
- static ClearKeep _defaultInstance;
+ static ClearKeep? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aDrop => $_getIZ(0);
@@ -265,10 +328,19 @@
}
class ZopDrop extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('ZopDrop', createEmptyInstance: create)
- ..a<$core.int>(1, 'aDrop', $pb.PbFieldType.O3, protoName: 'aDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'ZopDrop',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'aDrop')
+ ..hasRequiredFields = false;
ZopDrop._() : super();
factory ZopDrop() => create();
@@ -278,9 +350,16 @@
factory ZopDrop.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
ZopDrop clone() => ZopDrop()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
ZopDrop copyWith(void Function(ZopDrop) updates) =>
- super.copyWith((message) => updates(message as ZopDrop));
+ super.copyWith((message) => updates(message as ZopDrop))
+ as ZopDrop; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ZopDrop create() => ZopDrop._();
@@ -289,7 +368,7 @@
@$core.pragma('dart2js:noInline')
static ZopDrop getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ZopDrop>(create);
- static ZopDrop _defaultInstance;
+ static ZopDrop? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aDrop => $_getIZ(0);
@@ -305,10 +384,19 @@
}
class MobDrop extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('MobDrop', createEmptyInstance: create)
- ..a<$core.int>(1, 'aDrop', $pb.PbFieldType.O3, protoName: 'aDrop')
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'MobDrop',
+ createEmptyInstance: create)
+ ..a<$core.int>(
+ 1,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'aDrop',
+ $pb.PbFieldType.O3,
+ protoName: 'aDrop')
+ ..hasRequiredFields = false;
MobDrop._() : super();
factory MobDrop() => create();
@@ -318,9 +406,16 @@
factory MobDrop.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
MobDrop clone() => MobDrop()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
MobDrop copyWith(void Function(MobDrop) updates) =>
- super.copyWith((message) => updates(message as MobDrop));
+ super.copyWith((message) => updates(message as MobDrop))
+ as MobDrop; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static MobDrop create() => MobDrop._();
@@ -329,7 +424,7 @@
@$core.pragma('dart2js:noInline')
static MobDrop getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<MobDrop>(create);
- static MobDrop _defaultInstance;
+ static MobDrop? _defaultInstance;
@$pb.TagNumber(1)
$core.int get aDrop => $_getIZ(0);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart
index bc76b27..c42141a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart
@@ -2,17 +2,20 @@
// Generated code. Do not modify.
// source: name_mangling.proto
//
-// @dart = 2.3
-// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class AKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('AKeep', createEmptyInstance: create)
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'AKeep',
+ createEmptyInstance: create)
+ ..hasRequiredFields = false;
AKeep._() : super();
factory AKeep() => create();
@@ -22,9 +25,16 @@
factory AKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
AKeep clone() => AKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
AKeep copyWith(void Function(AKeep) updates) =>
- super.copyWith((message) => updates(message as AKeep));
+ super.copyWith((message) => updates(message as AKeep))
+ as AKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static AKeep create() => AKeep._();
@@ -33,14 +43,22 @@
@$core.pragma('dart2js:noInline')
static AKeep getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AKeep>(create);
- static AKeep _defaultInstance;
+ static AKeep? _defaultInstance;
}
class NameManglingKeep extends $pb.GeneratedMessage {
- static final $pb.BuilderInfo _i =
- $pb.BuilderInfo('NameManglingKeep', createEmptyInstance: create)
- ..aOM<AKeep>(10, 'clone', subBuilder: AKeep.create)
- ..hasRequiredFields = false;
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+ const $core.bool.fromEnvironment('protobuf.omit_message_names')
+ ? ''
+ : 'NameManglingKeep',
+ createEmptyInstance: create)
+ ..aOM<AKeep>(
+ 10,
+ const $core.bool.fromEnvironment('protobuf.omit_field_names')
+ ? ''
+ : 'clone',
+ subBuilder: AKeep.create)
+ ..hasRequiredFields = false;
NameManglingKeep._() : super();
factory NameManglingKeep() => create();
@@ -50,9 +68,16 @@
factory NameManglingKeep.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
NameManglingKeep clone() => NameManglingKeep()..mergeFromMessage(this);
+ @$core.Deprecated('Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
NameManglingKeep copyWith(void Function(NameManglingKeep) updates) =>
- super.copyWith((message) => updates(message as NameManglingKeep));
+ super.copyWith((message) => updates(message as NameManglingKeep))
+ as NameManglingKeep; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static NameManglingKeep create() => NameManglingKeep._();
@@ -62,7 +87,7 @@
@$core.pragma('dart2js:noInline')
static NameManglingKeep getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<NameManglingKeep>(create);
- static NameManglingKeep _defaultInstance;
+ static NameManglingKeep? _defaultInstance;
@$pb.TagNumber(10)
AKeep get clone_10 => $_getN(0);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
index 599d0eb..7f311bf 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
@@ -12,7 +12,7 @@
core::print("Has clone field");
}
}
-library name_mangling.pb.dart;
+library name_mangling.pb.dart /*isNonNullableByDefault*/;
import self as self;
import "package:protobuf/protobuf.dart" as pro;
import "dart:core" as core;
@@ -21,48 +21,36 @@
import "package:protobuf/protobuf.dart" as $pb;
class AKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t1 = new pro::BuilderInfo::•("AKeep") in block {
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "AKeep", #C2) in block {
[@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
} =>#t1;
- constructor _() → self::AKeep*
+ constructor _() → self::AKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::AKeep*
- return [@vm.inferred-type.metadata=name_mangling.pb.dart::AKeep] self::AKeep::create();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method clone() → self::AKeep*
- return let final self::AKeep* #t2 = [@vm.inferred-type.metadata=name_mangling.pb.dart::AKeep] self::AKeep::•() in block {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromMessage] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::GeneratedMessage::mergeFromMessage}(this);
- } =>#t2;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] get info_() → pro::BuilderInfo*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::AKeep::_i;
- @#C3
- static method create() → self::AKeep*
+ @#C5
+ static method create() → self::AKeep
return new self::AKeep::_();
}
class NameManglingKeep extends pro::GeneratedMessage {
-[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo* _i = let final pro::BuilderInfo* #t3 = new pro::BuilderInfo::•("NameManglingKeep") in block {
- [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::aOM}<self::AKeep*>(10, "clone", #C4);
- [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
- } =>#t3;
- constructor _() → self::NameManglingKeep*
+[@vm.inferred-type.metadata=protobuf::BuilderInfo?] static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "NameManglingKeep", #C6) in block {
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::aOM}<self::AKeep>(10, (#C1) ?{core::String} "" : "clone", #C2);
+ [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
+ } =>#t2;
+ constructor _() → self::NameManglingKeep
: super pro::GeneratedMessage::•()
;
- static factory •() → self::NameManglingKeep*
- return [@vm.inferred-type.metadata=name_mangling.pb.dart::NameManglingKeep] self::NameManglingKeep::create();
- static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::List<core::int*>* i) → self::NameManglingKeep*
- return let final self::NameManglingKeep* #t4 = [@vm.inferred-type.metadata=name_mangling.pb.dart::NameManglingKeep] self::NameManglingKeep::create() in block {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::GeneratedMessage::mergeFromBuffer}(i, #C5);
- } =>#t4;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method clone() → self::NameManglingKeep*
- return let final self::NameManglingKeep* #t5 = [@vm.inferred-type.metadata=name_mangling.pb.dart::NameManglingKeep] self::NameManglingKeep::•() in block {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromMessage] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::GeneratedMessage::mergeFromMessage}(this);
- } =>#t5;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] get info_() → pro::BuilderInfo*
+ static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::List<core::int> i) → self::NameManglingKeep
+ return let final self::NameManglingKeep #t3 = [@vm.inferred-type.metadata=name_mangling.pb.dart::NameManglingKeep] self::NameManglingKeep::create() in block {
+ [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::GeneratedMessage::mergeFromBuffer}(i, #C7);
+ } =>#t3;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get info_() → pro::BuilderInfo
return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::NameManglingKeep::_i;
- @#C3
- static method create() → self::NameManglingKeep*
+ @#C5
+ static method create() → self::NameManglingKeep
return new self::NameManglingKeep::_();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] @#C7
- method hasClone_10() → core::bool*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C9
+ method hasClone_10() → core::bool
return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}(0);
}
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 546e56c..57ba87a 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -2786,21 +2786,6 @@
if (dst_type.IsNull()) {
__ Comment("AssertAssignable for runtime type");
// kDstTypeReg should already contain the destination type.
- const bool null_safety = isolate()->use_strict_null_safety_checks();
- GenerateStubCall(token_pos,
- StubCode::GetTypeIsTopTypeForSubtyping(null_safety),
- PcDescriptorsLayout::kOther, locs, deopt_id);
- // TypeTestABI::kSubtypeTestCacheReg is 0 if the type is a top type.
- __ BranchIfZero(TypeTestABI::kSubtypeTestCacheReg, &done,
- compiler::Assembler::kNearJump);
-
- GenerateStubCall(token_pos,
- StubCode::GetNullIsAssignableToType(null_safety),
- PcDescriptorsLayout::kOther, locs, deopt_id);
- // TypeTestABI::kSubtypeTestCacheReg is 0 if the object is null and is
- // assignable.
- __ BranchIfZero(TypeTestABI::kSubtypeTestCacheReg, &done,
- compiler::Assembler::kNearJump);
} else {
__ Comment("AssertAssignable for compile-time type");
GenerateCallerChecksForAssertAssignable(receiver_type, dst_type, &done);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index 2c29653..e0cb95a 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -361,14 +361,16 @@
const bool null_safety =
Isolate::Current()->use_strict_null_safety_checks();
GenerateStubCall(token_pos,
- StubCode::GetTypeIsTopTypeForSubtyping(null_safety),
+ null_safety ? StubCode::TypeIsTopTypeForSubtypingNullSafe()
+ : StubCode::TypeIsTopTypeForSubtyping(),
PcDescriptorsLayout::kOther, locs, deopt_id);
// TypeTestABI::kSubtypeTestCacheReg is 0 if the type is a top type.
__ BranchIfZero(TypeTestABI::kSubtypeTestCacheReg, &is_assignable,
compiler::Assembler::kNearJump);
GenerateStubCall(token_pos,
- StubCode::GetNullIsAssignableToType(null_safety),
+ null_safety ? StubCode::NullIsAssignableToTypeNullSafe()
+ : StubCode::NullIsAssignableToType(),
PcDescriptorsLayout::kOther, locs, deopt_id);
// TypeTestABI::kSubtypeTestCacheReg is 0 if the object is null and is
// assignable.
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 3dea626..7f8f3a3 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -277,16 +277,6 @@
return Code::null();
}
-const Code& StubCode::GetTypeIsTopTypeForSubtyping(bool null_safety) {
- return null_safety ? StubCode::TypeIsTopTypeForSubtypingNullSafe()
- : StubCode::TypeIsTopTypeForSubtyping();
-}
-
-const Code& StubCode::GetNullIsAssignableToType(bool null_safety) {
- return null_safety ? StubCode::NullIsAssignableToTypeNullSafe()
- : StubCode::NullIsAssignableToType();
-}
-
#if !defined(TARGET_ARCH_IA32)
CodePtr StubCode::GetBuildMethodExtractorStub(
compiler::ObjectPoolBuilder* pool) {
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index d54ee02..a946cd5 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -68,10 +68,6 @@
static CodePtr GetBuildMethodExtractorStub(compiler::ObjectPoolBuilder* pool);
#endif
- static const Code& GetTypeIsTopTypeForSubtyping(bool null_safety);
-
- static const Code& GetNullIsAssignableToType(bool null_safety);
-
#if !defined(DART_PRECOMPILED_RUNTIME)
// Generate the stub and finalize the generated code into the stub
// code executable area.
diff --git a/tools/VERSION b/tools/VERSION
index 171a1a9..82152ac 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 12
PATCH 0
-PRERELEASE 60
+PRERELEASE 61
PRERELEASE_PATCH 0
\ No newline at end of file