public String getVersion() {
    if (myElementType != null) {
      int elementTypeStubVersion = myElementType.getStubVersion();

      if (myElementType.getLanguage() instanceof TemplateLanguage) {
        int templateStubBaseVersion = IStubFileElementType.getTemplateStubBaseVersion();
        if (elementTypeStubVersion < templateStubBaseVersion) {
          PluginException.logPluginError(LOG, myElementType.getClass() + " " +
                                              myElementType.getLanguage() +
                                              " version=" + elementTypeStubVersion + " " +
                                              " stub version should call super.getStubVersion() " +
                                              " template stub version=" + templateStubBaseVersion,
                                         null, myElementType.getClass());
        }
      }

      String baseVersion = myElementType.getExternalId() + ":" + elementTypeStubVersion + ":" + myElementType.getDebugName();
      return myProperties.isEmpty() ? baseVersion : (baseVersion + ":" + StringUtil.join(myProperties, ","));
    } else {
      assert myBinaryFileStubBuilder != null;
      String baseVersion = myBinaryFileStubBuilder.getClass().getName() + ":" + myBinaryFileStubBuilder.getStubVersion();
      if (myBinaryFileStubBuilder instanceof BinaryFileStubBuilder.CompositeBinaryFileStubBuilder) {
        return baseVersion + ":" + ((BinaryFileStubBuilder.CompositeBinaryFileStubBuilder)myBinaryFileStubBuilder).getSubBuilderVersion(myBinarySubBuilder);
      } else {
        return baseVersion;
      }
    }
  }
public String getVersion()