protected static void createDescriptor()
  { 
    try
    { 
      InputStream descriptorStream = MarkdownParseControllerGenerated.class.getResourceAsStream(DESCRIPTOR);
      InputStream table = MarkdownParseControllerGenerated.class.getResourceAsStream(TABLE);
      boolean filesystem = false;
      if(descriptorStream == null && new File("./" + DESCRIPTOR).exists())
      { 
        descriptorStream = new FileInputStream("./" + DESCRIPTOR);
        filesystem = true;
      }
      if(table == null && new File("./" + TABLE).exists())
      { 
        table = new FileInputStream("./" + TABLE);
        filesystem = true;
      }
      if(descriptorStream == null)
        throw new BadDescriptorException("Could not load descriptor file from " + DESCRIPTOR + " (not found in plugin: " + getPluginLocation() + ")");
      if(table == null)
        throw new BadDescriptorException("Could not load parse table from " + TABLE + " (not found in plugin: " + getPluginLocation() + ")");
      descriptor = DescriptorFactory.load(descriptorStream, table, filesystem ? Path.fromPortableString("./") : null);
      descriptor.setAttachmentProvider(MarkdownParseControllerGenerated.class);
    }
    catch(BadDescriptorException exc)
    { 
      notLoadingCause = exc;
      Environment.logException("Bad descriptor for " + LANGUAGE + " plugin", exc);
      throw new RuntimeException("Bad descriptor for " + LANGUAGE + " plugin", exc);
    }
    catch(IOException exc)
    { 
      notLoadingCause = exc;
      Environment.logException("I/O problem loading descriptor for " + LANGUAGE + " plugin", exc);
      throw new RuntimeException("I/O problem loading descriptor for " + LANGUAGE + " plugin", exc);
    }
  }