/* * Copyright 2013 Guidewire Software, Inc. */ package gw.lang.parser.expressions; import gw.lang.parser.IExpression; import gw.lang.parser.IParsedElement; import gw.lang.parser.ISymbol; import gw.lang.parser.ISymbolTable; import gw.lang.reflect.IFeatureInfo; public interface IIdentifierExpression extends IExpression { ISymbol getSymbol(); void setSymbol( ISymbol symbol, ISymbolTable symTable ); boolean isLocalVariable(); static final class FeatureInfoWrapper { public IFeatureInfo owningFeatureInfo; public FeatureInfoWrapper(IFeatureInfo owningFeatureInfo) { this.owningFeatureInfo = owningFeatureInfo; } public static <T extends IParsedElement> T findEldestAncestor( Class<T> type, IParsedElement parsedElement ) { T ancestor = null; IParsedElement parent = parsedElement.getParent(); while( parent != null && parent.getParent() != null ) { parent = parent.getParent(); if( type.isAssignableFrom( parent.getClass() ) ) { //noinspection unchecked ancestor = (T)parent; } } return ancestor; } } }