code: private void checkEmbedAgainst(PageCompilingContext pc, EvaluatorCompiler compiler, Map<String, String> properties, Class<?> embedClass, Node node) {
  
      // TODO also type check them against expressions
      for (String property : properties.keySet()) {
          try {
              if (!compiler.isWritable(property)) {
                  pc.errors.add(
                      CompileError.in(node.outerHtml())
                        //TODO we need better line number detection if there is whitespace between the annotation and tag.
                        .near(node.siblingIndex()-1) // TODO -  line number of the annotation
                        .causedBy(CompileErrors.PROPERTY_NOT_WRITEABLE,
                            String.format("Property %s#%s was not writable. Did you forget to create "
                                + "a setter or @Visible annotation?", embedClass.getSimpleName(), property))
                  );
              }
          } catch (ExpressionCompileException ece) {
              pc.errors.add(
                  CompileError.in(node.outerHtml())
                      .near(node.siblingIndex()) // TODO - line number
                      .causedBy(CompileErrors.ERROR_COMPILING_PROPERTY)
              );
          }
       }
    }
docs: Ensures that embed bound properties are writable