/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.lang.psi.impl; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; import com.intellij.psi.PsiNamedElement; import com.intellij.psi.PsiSubstitutor; import gw.lang.reflect.IFeatureInfo; import gw.plugin.ij.lang.psi.IGosuPsiElement; import gw.plugin.ij.lang.psi.api.IGosuResolveResult; import org.jetbrains.annotations.Nullable; public class GosuResolveResultImpl implements IGosuResolveResult { private final PsiElement myElement; private final boolean myIsAccessible; private final boolean myIsStaticsOK; private final PsiSubstitutor mySubstitutor; private final IGosuPsiElement myCurrentFileResolveContext; private final IFeatureInfo myFeatureInfo; public GosuResolveResultImpl(PsiElement element, boolean isAccessible, IFeatureInfo myFeatureInfo) { this(element, null, PsiSubstitutor.EMPTY, isAccessible, true, myFeatureInfo); } public GosuResolveResultImpl(PsiElement element, IGosuPsiElement context, PsiSubstitutor substitutor, boolean isAccessible, boolean staticsOK, IFeatureInfo featureInfo) { myCurrentFileResolveContext = context; myElement = element; //element instanceof PsiClass ? GosuClassSubstitutor.getSubstitutedClass( (PsiClass)element ) : element; myIsAccessible = isAccessible; mySubstitutor = substitutor; myIsStaticsOK = staticsOK; myFeatureInfo = featureInfo; } public GosuResolveResultImpl(PsiElement element, IGosuPsiElement context, PsiSubstitutor substitutor, boolean isAccessible, boolean staticsOK) { this(element, context, substitutor, isAccessible, staticsOK, null); } public PsiSubstitutor getSubstitutor() { return mySubstitutor; } public boolean isPackagePrefixPackageReference() { return false; } public boolean isAccessible() { return myIsAccessible; } @Override public boolean isStaticsOK() { return myIsStaticsOK; } public boolean isStaticsScopeCorrect() { return myIsStaticsOK; } @Nullable public PsiElement getCurrentFileResolveScope() { return null; } @Nullable public PsiElement getElement() { return myElement; } public boolean isValidResult() { return isAccessible(); } public boolean equals(@Nullable Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } GosuResolveResultImpl that = (GosuResolveResultImpl) o; PsiManager manager = myElement == null ? null : myElement.getManager(); return myIsAccessible == that.myIsAccessible && manager != null && manager.areElementsEquivalent(myElement, that.myElement); } public int hashCode() { int result = 0; if (myElement instanceof PsiNamedElement) { String name = ((PsiNamedElement) myElement).getName(); if (name != null) { result = name.hashCode(); } } result = 31 * result + (myIsAccessible ? 1 : 0); return result; } public IGosuPsiElement getCurrentFileResolveContext() { return myCurrentFileResolveContext; } @Override public IFeatureInfo getFeatureInfo() { return myFeatureInfo; } }