code: public static ImmutableList<JClassType> filterSubtypesForDeserialization( TreeLogger logger, RebindConfiguration configuration,
                                                                                JClassType type ) {
          boolean filterOnlySupportedType = isObjectOrSerializable( type );
  
          ImmutableList.Builder<JClassType> builder = ImmutableList.builder();
          if ( type.getSubtypes().length > 0 ) {
              for ( JClassType subtype : type.getSubtypes() ) {
                  if ( (null == subtype.isInterface() && !subtype.isAbstract() && (!subtype.isMemberType() || subtype.isStatic()))
                          && null == subtype.isAnnotation()
                          && subtype.isPublic()
                          && (!filterOnlySupportedType ||
                          (configuration.isTypeSupportedForDeserialization( logger, subtype )
                                  // EnumSet and EnumMap are not supported in subtype deserialization because we can't know the enum to use.
                                  && !EnumSet.class.getCanonicalName().equals( subtype.getQualifiedSourceName() )
                                  && !EnumMap.class.getCanonicalName().equals( subtype.getQualifiedSourceName() )))
                          && !findFirstEncounteredAnnotationsOnAllHierarchy( configuration, subtype.isClassOrInterface(), JsonIgnoreType.class, Optional.of( type ) ).isPresent() ) {
                      builder.add( subtype );
                  }
              }
          }
          return builder.build();
      }
docs: <p>filterSubtypesForDeserialization</p>
  
  @param logger a {@link com.google.gwt.core.ext.TreeLogger} object.
  @param configuration a {@link com.github.nmorel.gwtjackson.rebind.RebindConfiguration} object.
  @param type a {@link com.google.gwt.core.ext.typeinfo.JClassType} object.
  @return a {@link com.google.gwt.thirdparty.guava.common.collect.ImmutableList} object.