@Override
    public Optional<VariableHolder> getHighestParent()
    {
        if (this.parent == null)
        {
            Optional.absent();
        }
        VariableHolder next = this.parent;
        if (next instanceof VariableScope)
        {
            VariableScope nextScope = (VariableScope) next;
            while (nextScope.getParent().isPresent())
            {
                next = nextScope.getParent().get();
                if (next instanceof VariableScope)
                {
                    nextScope = (VariableScope) next;
                } else
                {
                    break;
                }
            }
        }
        return Optional.fromNullable(next);
    }