package org.apache.commons.ognl;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

/**
 * Exception thrown if an OGNL expression is evaluated in the wrong context; the usual case is when an expression that
 * does not end in a property reference is passed to <code>setValue</code>.
 */
public class InappropriateExpressionException
    extends OgnlException
{

    private static final long serialVersionUID = -101395753764475977L;

    public InappropriateExpressionException( Node tree )
    {
        super( "Inappropriate OGNL expression: " + tree );
    }
}
