/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.lang.psi.impl.resolvers; import com.intellij.psi.PsiElement; import gw.lang.reflect.IHasParameterInfos; import gw.lang.reflect.ILocationAwareFeature; import gw.lang.reflect.IPropertyInfo; import gw.plugin.ij.lang.psi.api.AbstractFeatureResolver; import gw.plugin.ij.lang.psi.api.IGosuResolveResult; import gw.plugin.ij.lang.psi.impl.GosuResolveResultImpl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class LocationAwareFeatureResolver extends AbstractFeatureResolver { @Nullable @Override public PsiElement resolve(@NotNull IPropertyInfo propertyInfo, @NotNull PsiElement context) { if ( propertyInfo instanceof ILocationAwareFeature) { ILocationAwareFeature feature = (ILocationAwareFeature) propertyInfo; return PsiFeatureResolver.resolveFeatureAtLocation(context, feature.getLocationInfo()); } return null; } @Override public IGosuResolveResult resolveMethodOrConstructor(@NotNull IHasParameterInfos info, @NotNull PsiElement context) { if ( info instanceof ILocationAwareFeature) { ILocationAwareFeature feature = (ILocationAwareFeature) info; PsiElement element = PsiFeatureResolver.resolveFeatureAtLocation(context, feature.getLocationInfo()); return new GosuResolveResultImpl(element, true, info); } return null; } }