Repository: jenkinsci/jenkins
File: core/src/main/java/hudson/DescriptorExtensionList.java (Java)

Code before:
    /**
     * @deprecated as of 1.416
     *      Use {@link #create(Jenkins, Class)}
     */
    @Deprecated
    public static <T extends Describable<T>, D extends Descriptor<T>>
    DescriptorExtensionList<T, D> createDescriptorList(Hudson hudson, Class<T> describableType) {
        return (DescriptorExtensionList) createDescriptorList((Jenkins) hudson, describableType);
    }

    /**
     * Type of the {@link Describable} that this extension list retains.
     */
    private final Class<T> describableType;

    /**
     * @deprecated as of 1.416
     *      Use {@link #DescriptorExtensionList(Jenkins, Class)}
     */
    @Deprecated
    protected DescriptorExtensionList(Hudson hudson, Class<T> describableType) {
        this((Jenkins) hudson, describableType);
    }

    protected DescriptorExtensionList(Jenkins jenkins, Class<T> describableType) {
        super(jenkins, (Class) Descriptor.class, new CopyOnWriteArrayList<>());
        this.describableType = describableType;
    }

    /**
     * Finds the descriptor that has the matching fully-qualified class name.
     *
     * @param fqcn
     *      Fully qualified name of the descriptor, not the describable.
     * @deprecated {@link Descriptor#getId} is supposed to be used for new code, not the descriptor class name.
     */
    @Deprecated
    public D find(String fqcn) {
        return Descriptor.find(this, fqcn);
    }

    /**
     * Finds the descriptor that describes the given type.
     * That is, if this method returns d, {@code d.clazz==type}
     */
    public D find(Class<? extends T> type) {
        for (D d : this)
            if (d.clazz == type)
                return d;
        return null;
    }

Review comment (suggestion):
Perhaps 
```suggestion
        super(jenkins, (Class) Descriptor.class);
```
would make it clearer this is unused? (At a glance, there seem to be no callers left for the 3 arg constructors.)

Code after:
     * @deprecated as of 1.416
     *      Use {@link #create(Jenkins, Class)}
     */
    @Deprecated
    public static <T extends Describable<T>, D extends Descriptor<T>>
    DescriptorExtensionList<T, D> createDescriptorList(Hudson hudson, Class<T> describableType) {
        return (DescriptorExtensionList) createDescriptorList((Jenkins) hudson, describableType);
    }

    /**
     * Type of the {@link Describable} that this extension list retains.
     */
    private final Class<T> describableType;

    /**
     * @deprecated as of 1.416
     *      Use {@link #DescriptorExtensionList(Jenkins, Class)}
     */
    @Deprecated
    protected DescriptorExtensionList(Hudson hudson, Class<T> describableType) {
        this((Jenkins) hudson, describableType);
    }

    protected DescriptorExtensionList(Jenkins jenkins, Class<T> describableType) {
        super(jenkins, (Class) Descriptor.class);
        this.describableType = describableType;
    }

    /**
     * Finds the descriptor that has the matching fully-qualified class name.
     *
     * @param fqcn
     *      Fully qualified name of the descriptor, not the describable.
     * @deprecated {@link Descriptor#getId} is supposed to be used for new code, not the descriptor class name.
     */
    @Deprecated
    public D find(String fqcn) {
        return Descriptor.find(this, fqcn);
    }

    /**
     * Finds the descriptor that describes the given type.
     * That is, if this method returns d, {@code d.clazz==type}
     */
    public D find(Class<? extends T> type) {
        for (D d : this)
            if (d.clazz == type)
                return d;
        return null;
    }