AbstractType.java

package com.mackenziehigh.autumn.lang.compiler.typesystem;

import com.google.common.base.Preconditions;
import com.mackenziehigh.autumn.lang.compiler.typesystem.design.IType;
import com.mackenziehigh.autumn.lang.compiler.typesystem.design.ITypeFactory;
import com.mackenziehigh.autumn.resources.Finished;

/**
 * This class provides a partial implementation of the IType interface.
 *
 * @author Mackenzie High
 */
@Finished("2014/07/12")
public abstract class AbstractType
        implements IType
{
    private final ITypeFactory factory;

    private final String descriptor;

    /**
     * Sole Constructor.
     *
     * @param factory type-factory that is used to access types.
     * @param descriptor is the type-descriptor of the new type.
     */
    public AbstractType(final ITypeFactory factory,
                        final String descriptor)
    {
        Preconditions.checkNotNull(factory);
        Preconditions.checkNotNull(descriptor);

        this.factory = factory;
        this.descriptor = descriptor;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public final ITypeFactory getTypeFactory()
    {
        return factory;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public final String getDescriptor()
    {
        return descriptor;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String toString()
    {
        return this.getDescriptor();
    }
}