blob: f31950cc734ab75bd93c4e9aaab299e6d03184dc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.validation.internal.el.operators;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.jst.jsf.common.internal.types.LiteralType;
import org.eclipse.jst.jsf.common.internal.types.SignatureBasedType;
import org.eclipse.jst.jsf.common.internal.types.ValueType;
import org.eclipse.jst.jsf.context.symbol.internal.util.IObjectSymbolBasedValueType;
import org.eclipse.jst.jsf.designtime.resolver.ISymbolContextResolver;
import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;
/**
* Handles the operator 'dot' where dot(expr-a, id-b) == 'expr-a.id-b' in EL syntax
*
* @author cbateman
*
*/
public class DotOperator extends MemberAccessorOperator
{
/**
* @param diagnosticFactory
* @param file
* @param resolver
*/
public DotOperator(final DiagnosticFactory diagnosticFactory, final IFile file, final ISymbolContextResolver resolver)
{
super(file, diagnosticFactory, resolver);
}
protected SignatureBasedType handlePerformObjectSymbolValue(
IObjectSymbolBasedValueType firstArg, ValueType secondArg)
{
// the dot operator (unlike the bracket) can only treat firstArg as
// a named property accessor object
// if we don't have a literal value with which to derive value-b, then
// we can't get a property
if (secondArg instanceof LiteralType)
{
return handlePerformNamedPropertyAccessorBase(firstArg, (LiteralType)secondArg);
}
return null;
}
public Diagnostic validateObjectSymbolValue(IObjectSymbolBasedValueType firstArg,
ValueType secondArg)
{
Diagnostic diag = Diagnostic.OK_INSTANCE;
if (secondArg instanceof LiteralType)
{
diag = validateNamedPropertyAccessorBase(firstArg, (LiteralType) secondArg);
}
return diag;
}
@Override
protected String getOperatorName()
{
return Messages.getString("DotOperator.Name"); //$NON-NLS-1$
}
}