Skip to content

Commit 822450b

Browse files
FMorschelCommit Queue
authored andcommitted
[DAS] Fixes DartEditBuilder.writeType to handle private typedefs correctly
Fixes: #61838 Change-Id: Ic5e73241bfdb3210d5d2d43ea6136a8d948f2e13 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/457883 Auto-Submit: Felipe Morschel <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]>
1 parent 294b058 commit 822450b

File tree

2 files changed

+104
-2
lines changed

2 files changed

+104
-2
lines changed

pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,102 @@ class A {
710710
''', target: part1Path);
711711
}
712712

713+
Future<void> test_privateAlias() async {
714+
newFile(join(testPackageLibPath, 'a.dart'), '''
715+
class A {
716+
}
717+
''');
718+
await resolveTestCode('''
719+
import 'a.dart';
720+
typedef _F = int Function(int v);
721+
void f(A a) {
722+
_F v = a.test;
723+
print(v);
724+
}
725+
''');
726+
await assertHasFix('''
727+
class A {
728+
int Function(int v) get test => null;
729+
}
730+
''', target: join(testPackageLibPath, 'a.dart'));
731+
}
732+
733+
Future<void> test_privateAlias_2() async {
734+
newFile(join(testPackageLibPath, 'a.dart'), '''
735+
typedef _F = int Function(int v);
736+
class A {
737+
set test(_F f) {}
738+
}
739+
''');
740+
await resolveTestCode('''
741+
import 'a.dart';
742+
class C {
743+
void m(A a) {
744+
a.test = test;
745+
}
746+
}
747+
''');
748+
await assertHasFix('''
749+
import 'a.dart';
750+
class C {
751+
int Function(int v) get test => null;
752+
753+
void m(A a) {
754+
a.test = test;
755+
}
756+
}
757+
''');
758+
}
759+
760+
Future<void> test_privateType_privateAlias() async {
761+
newFile(join(testPackageLibPath, 'a.dart'), '''
762+
class A {
763+
}
764+
''');
765+
await resolveTestCode('''
766+
import 'a.dart';
767+
class _C {}
768+
typedef _T = _C;
769+
void f(A a) {
770+
_T v = a.test;
771+
print(v);
772+
}
773+
''');
774+
await assertHasFix('''
775+
class A {
776+
Object get test => null;
777+
}
778+
''', target: join(testPackageLibPath, 'a.dart'));
779+
}
780+
781+
Future<void> test_privateType_privateAlias_2() async {
782+
newFile(join(testPackageLibPath, 'a.dart'), '''
783+
class _C {}
784+
typedef _T = _C;
785+
class A {
786+
set test(_T t) {}
787+
}
788+
''');
789+
await resolveTestCode('''
790+
import 'a.dart';
791+
class C {
792+
void m(A a) {
793+
a.test = test;
794+
}
795+
}
796+
''');
797+
await assertHasFix('''
798+
import 'a.dart';
799+
class C {
800+
Object get test => null;
801+
802+
void m(A a) {
803+
a.test = test;
804+
}
805+
}
806+
''');
807+
}
808+
713809
Future<void> test_qualified_instance() async {
714810
await resolveTestCode('''
715811
class A {

pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,10 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
11231123
}
11241124

11251125
var alias = type.alias;
1126-
if (alias != null) {
1126+
if (alias != null &&
1127+
alias.element.isAccessibleIn(
1128+
_dartFileEditBuilder.resolvedLibrary.element,
1129+
)) {
11271130
return true;
11281131
}
11291132

@@ -1543,7 +1546,10 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
15431546
}
15441547

15451548
var alias = type.alias;
1546-
if (alias != null) {
1549+
if (alias != null &&
1550+
alias.element.isAccessibleIn(
1551+
_dartFileEditBuilder.resolvedLibrary.element,
1552+
)) {
15471553
_writeTypeElementArguments(
15481554
element: alias.element,
15491555
typeArguments: alias.typeArguments,

0 commit comments

Comments
 (0)