mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 00:09:20 +00:00
SPLIT_VARIABLE_DECLARATION
assist to handle unreferenceable type
Bug: 46910 Change-Id: I92c5e4afb25a75e1c1c28fb6b52c9bb02ca81eb6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/210127 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
5657acfc76
commit
c9d954efe7
|
@ -6,6 +6,7 @@ import 'package:_fe_analyzer_shared/src/scanner/token.dart';
|
|||
import 'package:analysis_server/src/services/correction/assist.dart';
|
||||
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_core.dart';
|
||||
import 'package:analyzer_plugin/utilities/assist/assist.dart';
|
||||
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
|
||||
import 'package:analyzer_plugin/utilities/range_factory.dart';
|
||||
|
@ -50,22 +51,34 @@ class SplitVariableDeclaration extends CorrectionProducer {
|
|||
return;
|
||||
}
|
||||
|
||||
await builder.addDartFileEdit(file, (builder) {
|
||||
if (variableList.type == null) {
|
||||
final type = variable.declaredElement!.type;
|
||||
if (!type.isDynamic && keyword != null) {
|
||||
builder.addReplacement(range.token(keyword), (builder) {
|
||||
builder.writeType(type);
|
||||
});
|
||||
Future<bool> tryToApplyChange(ChangeBuilder builder) async {
|
||||
var validChange = true;
|
||||
await builder.addDartFileEdit(file, (builder) {
|
||||
if (variableList.type == null) {
|
||||
final type = variable.declaredElement!.type;
|
||||
if (!type.isDynamic && keyword != null) {
|
||||
builder.addReplacement(range.token(keyword), (builder) {
|
||||
validChange = builder.writeType(type);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var indent = utils.getNodePrefix(statement);
|
||||
var name = variable.name.name;
|
||||
builder.addSimpleInsertion(variable.name.end, ';' + eol + indent + name);
|
||||
});
|
||||
var indent = utils.getNodePrefix(statement);
|
||||
var name = variable.name.name;
|
||||
builder.addSimpleInsertion(
|
||||
variable.name.end, ';' + eol + indent + name);
|
||||
});
|
||||
return validChange;
|
||||
}
|
||||
|
||||
if (await tryToApplyChange(_temporaryBuilder(builder))) {
|
||||
await tryToApplyChange(builder);
|
||||
}
|
||||
}
|
||||
|
||||
ChangeBuilder _temporaryBuilder(ChangeBuilder builder) =>
|
||||
ChangeBuilder(workspace: (builder as ChangeBuilderImpl).workspace);
|
||||
|
||||
/// Return an instance of this class. Used as a tear-off in `AssistProcessor`.
|
||||
static SplitVariableDeclaration newInstance() => SplitVariableDeclaration();
|
||||
}
|
||||
|
|
|
@ -118,4 +118,22 @@ main() {
|
|||
}
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_unknownType() async {
|
||||
addSource('/home/test/lib/a.dart', '''
|
||||
class A {
|
||||
_B b => _B();
|
||||
}
|
||||
class _B {}
|
||||
''');
|
||||
|
||||
await resolveTestCode('''
|
||||
import 'package:test/a.dart';
|
||||
|
||||
f(A a) {
|
||||
var x = a.b();
|
||||
}
|
||||
''');
|
||||
await assertNoAssistAt('var ');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue