Get setterType by setter.parameters[0] instead of setter.variable.type

Seems like in the precense of a getter, setter.variable.type is the
getter type, not the setter's type. So use the first function argument
instead.
diff --git a/analyzer_plugin/lib/src/directive_extraction.dart b/analyzer_plugin/lib/src/directive_extraction.dart
index 32e0193..02de367 100644
--- a/analyzer_plugin/lib/src/directive_extraction.dart
+++ b/analyzer_plugin/lib/src/directive_extraction.dart
@@ -498,9 +498,8 @@
           thisType: true);
     }
 
-    if (setter != null && setter.variable != null) {
-      var type = setter.variable.type;
-      return type;
+    if (setter != null && setter.type.parameters.length == 1) {
+      return setter.type.parameters[0].type;
     }
 
     return null;
diff --git a/analyzer_plugin/test/resolver_test.dart b/analyzer_plugin/test/resolver_test.dart
index 3993d19..66d4c0e 100644
--- a/analyzer_plugin/test/resolver_test.dart
+++ b/analyzer_plugin/test/resolver_test.dart
@@ -215,6 +215,31 @@
     _assertElement('id=').input.inCoreHtml;
   }
 
+  Future test_expression_inputBinding_asString_fromDynamic() async {
+    _addDartSource(r'''
+@Component(selector: 'test-panel',
+    directives: const [TitleComponent], templateUrl: 'test_panel.html')
+class TestPanel {
+}
+@Component(selector: 'title-comp', template: '')
+class TitleComponent {
+  bool _title;
+  @Input()
+  set title(value) {
+    _title = value == "" ? true : false;
+  }
+  bool get title => _title;
+}
+''');
+    var code = r"""
+<title-comp title='anything can go here'></title-comp>
+""";
+    _addHtmlSource(code);
+    await _resolveSingleTemplate(dartSource);
+    errorListener.assertNoErrors();
+    _assertElement('title=').input.inFileName('/test_panel.dart').at('title(');
+  }
+
   Future test_expression_inputBinding_typeError() async {
     _addDartSource(r'''
 @Component(selector: 'test-panel',