code: @SuppressWarnings("unchecked")
      static Widget createWidget(final GVRSceneObject sceneObject)
              throws InstantiationException {
          Class<? extends Widget> widgetClass = GroupWidget.class;
          NodeEntry attributes = new NodeEntry(sceneObject);
  
          String className = attributes.getClassName();
          if (className != null) {
              try {
                  widgetClass = (Class<? extends Widget>) Class
                          .forName(className);
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
                  Log.e(TAG, e, "createWidget()");
                  throw new InstantiationException(e.getLocalizedMessage());
              }
          }
          Log.d(TAG, "createWidget(): widgetClass: %s",
                widgetClass.getSimpleName());
  
          return createWidget(sceneObject, attributes, widgetClass);
      }
docs: Create a {@link Widget} to wrap the specified {@link GVRSceneObject}. By
  default, {@code sceneObject} is wrapped in an {@link GroupWidget}. If
  another {@code Widget} class is specified in {@code sceneObject}'s
  metadata (as "{@code class_WidgetClassName}"), it will be wrapped in an
  instance of the specified class instead.
  
  @see NameDemangler#demangleString(String)
  
  @param sceneObject
  The {@code GVRSceneObject} to wrap.
  @return A new {@code Widget} instance.
  @throws InstantiationException
  If the {@code Widget} can't be instantiated for any reason.