@@ -85,7 +85,7 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
85
85
// No classes from the FFI may be explicitly implemented.
86
86
void checkSupertype (TypeName typename, FfiCode subtypeOfFfiCode,
87
87
FfiCode subtypeOfStructCode) {
88
- final superName = typename.name.staticElement? .name;
88
+ final superName = typename.name? .staticElement? .name;
89
89
if (superName == _allocatorClassName) {
90
90
return ;
91
91
}
@@ -139,9 +139,9 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
139
139
140
140
@override
141
141
void visitFunctionExpressionInvocation (FunctionExpressionInvocation node) {
142
- Element element = node.staticElement;
142
+ Element element = node? .staticElement;
143
143
if (element is MethodElement ) {
144
- Element enclosingElement = element.enclosingElement;
144
+ Element enclosingElement = element? .enclosingElement;
145
145
if (enclosingElement is ExtensionElement ) {
146
146
if (_isAllocatorExtension (enclosingElement) &&
147
147
element.name == _allocateExtensionMethodName) {
@@ -154,7 +154,7 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
154
154
155
155
@override
156
156
void visitIndexExpression (IndexExpression node) {
157
- Element element = node.staticElement;
157
+ Element element = node? .staticElement;
158
158
Element enclosingElement = element? .enclosingElement;
159
159
if (enclosingElement is ExtensionElement ) {
160
160
if (_isNativeStructPointerExtension (enclosingElement)) {
@@ -167,7 +167,7 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
167
167
168
168
@override
169
169
void visitMethodInvocation (MethodInvocation node) {
170
- Element element = node.methodName.staticElement;
170
+ Element element = node.methodName? .staticElement;
171
171
if (element is MethodElement ) {
172
172
Element enclosingElement = element.enclosingElement;
173
173
if (enclosingElement is ClassElement ) {
@@ -190,7 +190,7 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
190
190
}
191
191
}
192
192
} else if (element is FunctionElement ) {
193
- Element enclosingElement = element.enclosingElement;
193
+ Element enclosingElement = element? .enclosingElement;
194
194
if (enclosingElement is CompilationUnitElement ) {
195
195
if (element.library.name == 'dart.ffi' ) {
196
196
if (element.name == 'sizeOf' ) {
@@ -468,6 +468,9 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
468
468
}
469
469
470
470
void _validateAllocate (FunctionExpressionInvocation node) {
471
+ if (node.typeArgumentTypes.length != 1 ) {
472
+ return ;
473
+ }
471
474
final DartType dartType = node.typeArgumentTypes[0 ];
472
475
if (! _isValidFfiNativeType (dartType, true , true )) {
473
476
final AstNode errorNode = node;
@@ -631,7 +634,7 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
631
634
632
635
void _validateElementAt (MethodInvocation node) {
633
636
Expression target = node.realTarget;
634
- DartType targetType = target.staticType;
637
+ DartType targetType = target? .staticType;
635
638
if (targetType is InterfaceType &&
636
639
_isPointer (targetType.element) &&
637
640
targetType.typeArguments.length == 1 ) {
@@ -772,7 +775,7 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
772
775
}
773
776
774
777
void _validateRefIndexed (IndexExpression node) {
775
- DartType targetType = node.target.staticType;
778
+ DartType targetType = node.target? .staticType;
776
779
if (! _isValidFfiNativeType (targetType, false , true )) {
777
780
final AstNode errorNode = node;
778
781
_errorReporter.reportErrorForNode (
@@ -792,7 +795,7 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
792
795
}
793
796
794
797
void _validateRefPropertyAccess (PropertyAccess node) {
795
- DartType targetType = node.target.staticType;
798
+ DartType targetType = node.target? .staticType;
796
799
if (! _isValidFfiNativeType (targetType, false , true )) {
797
800
final AstNode errorNode = node;
798
801
_errorReporter.reportErrorForNode (
@@ -801,6 +804,9 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
801
804
}
802
805
803
806
void _validateSizeOf (MethodInvocation node) {
807
+ if (node.typeArgumentTypes.length != 1 ) {
808
+ return ;
809
+ }
804
810
final DartType T = node.typeArgumentTypes[0 ];
805
811
if (! _isValidFfiNativeType (T , true , true )) {
806
812
final AstNode errorNode = node;
0 commit comments