blob: 605104311aa2f3149389ae1c4a5b435c1b8b5c6a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation.
* 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:
* Cameron Bateman/Oracle - initial API and implementation
*
********************************************************************************/
package org.eclipse.jst.jsf.designtime.resolver;
import org.eclipse.jst.jsf.context.IModelContext;
import org.eclipse.jst.jsf.context.resolver.IDocumentContextResolver;
import org.eclipse.jst.jsf.context.symbol.IMethodSymbol;
import org.eclipse.jst.jsf.context.symbol.IObjectSymbol;
import org.eclipse.jst.jsf.context.symbol.ISymbol;
/**
* Resolves symbols and possible symbols in a given context
*
* May NOT be sub-classed or implemented by clients.
* Sub-class AbstractSymbolContextResolver to implement.
*
* @author cbateman
*
*/
public interface ISymbolContextResolver extends IDocumentContextResolver
{
/**
* Gets the most appropriate symbol in the current context
* based on name. Most "appropriate" may take into account
* scoping and other rules.
*
* @param name
* @return a symbol
*/
ISymbol getVariable(String name);
/**
* @return all valid symbols in the current context
*/
ISymbol[] getAllVariables();
/**
* @param symbol
* @param propertyName
* @return the property symbol called propertyName or null if not found
*/
ISymbol getProperty(ISymbol symbol, Object propertyName);
/**
* @param symbol
* @return all properties of symbol
*/
ISymbol[] getProperties(ISymbol symbol);
/**
* @param base
* @param methodName
* @return the method of base matching methodName or null if not found
*/
IMethodSymbol getMethod(IObjectSymbol base, Object methodName);
/**
* @param base
* @return all methods belonging to base
*/
ISymbol[] getMethods(IObjectSymbol base);
/**
* This is meant to be used things like caching to determine if caches
* need to be flushed for different contexts. If you are in doubt, always
* return false.
*
* NOTE: this method should not be used to determine if symbols previously
* returned by this resolver have changed to do changes in the underlying
* application such as change to a managed bean. This method only needs
* to check if what variable, properties and methods may have resolved
* different, because of the context itself.
*
* @param modelContext
* @since 3.0
* @return true if the instance of this resolver would resolve everything
* exactly the same with this modelContext. False otherwise.
*/
boolean hasSameResolution(final IModelContext modelContext);
}