/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl.resolvers;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiNamedElement;
import com.intellij.psi.impl.PsiManagerImpl;
import gw.internal.gosu.properties.IPropertiesPropertyInfo;
import gw.lang.reflect.IPropertyInfo;
import gw.lang.reflect.gs.IPropertiesType;
import gw.plugin.ij.lang.psi.api.AbstractFeatureResolver;
import gw.plugin.ij.util.FileUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class PropertiesFeatureResolver extends AbstractFeatureResolver {
@Nullable
@Override
public PsiElement resolve(@NotNull IPropertyInfo propertyInfo, @NotNull PsiElement context) {
if (propertyInfo instanceof IPropertiesPropertyInfo) {
final Project project = context.getProject();
final IPropertiesType type = (IPropertiesType) propertyInfo.getOwnersType();
final VirtualFile file = FileUtil.getTypeResourceFiles(type).get(0);
final PsiFile psiFile = PsiManagerImpl.getInstance(project).findFile(file);
final String propertiesFileKey = type.getPropertiesFileKey(propertyInfo);
for (PsiElement property : psiFile.getChildren()[0].getChildren()) {
if (((PsiNamedElement) property).getName().equals(propertiesFileKey)) {
return property;
}
}
}
return null;
}
}