@Override
    public void processKnowIt(KnowIt knowIt) {
      defaultProcess(knowIt);

      this.addTypeData(knowIt.getTypes());

      knowIt
          .getBinding()
          .process(
              new BindingAdapter() {

                @Override
                public void processResource(KnowItBindingResource constant) {
                  searchData.add(constant.getName());
                  searchData.add(constant.getTag());
                  searchData.add(constant.getScriptValue());
                  searchData.add(constant.getTemplateID());

                  addTypeData(constant.getTypes());
                }

                @Override
                public void processFunction(KnowItBindingFunction function) {
                  function.getValue().process(SearchDataCompiler.this);
                }

                @Override
                public void processReference(KnowItBindingReference reference) {
                  reference.getValue().process(SearchDataCompiler.this);
                }

                @Override
                public void processStoryPoint(KnowItBindingStoryPoint storyPoint) {
                  storyPoint.getValue().process(SearchDataCompiler.this);
                }
              });

      final DescribeIt describeIt;

      describeIt = knowIt.getLibrary().getDescribeIt(knowIt);

      if (describeIt != null) {
        for (ScriptIt scriptIt : describeIt.getScriptIts()) {
          scriptIt.process(this);
        }
      }
    }
    @Override
    public void processScriptIt(ScriptIt scriptIt) {
      defaultProcess(scriptIt);
      for (KnowIt parameter : scriptIt.getParameters()) {
        KnowItBinding binding = parameter.getBinding();
        if (binding.isBound())
          // allow searching of bound values
          this.searchData.add(binding.getScriptValue());
        parameter.process(this);
      }

      for (KnowIt implicit : scriptIt.getImplicits()) {
        implicit.process(this);
      }

      // searchable by slot
      for (CodeBlock codeBlock : scriptIt.getCodeBlocks()) {
        codeBlock.process(this);
      }

      this.addTypeData(scriptIt.getTypes());
    }