class ImmutableAuthorizationContext implements AuthorizationContext {

    @Override
    public AuthorizationContext addHead(final List<AuthorizationSubject> authorizationSubjects) {
        checkNotNull(authorizationSubjects, "authorizationSubjects");

        final List<AuthorizationSubject> newAuthorizationSubjects =
                new ArrayList<>(this.authorizationSubjects.size() + authorizationSubjects.size());
        newAuthorizationSubjects.addAll(authorizationSubjects);
        newAuthorizationSubjects.addAll(this.authorizationSubjects);

        return new ImmutableAuthorizationContext(type, newAuthorizationSubjects);
    }

    private  ImmutableAuthorizationContext(final AuthorizationContextType type,
            final List<AuthorizationSubject> authorizationSubjects);

}