package org.jetbrains.plugins.ruby.motion.symbols;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.structure.Symbol;
import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.v2.SymbolPsiProcessor;
import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.v2.TopLevelSymbol;
import org.jetbrains.plugins.ruby.ruby.lang.psi.RFile;
/**
* @author Dennis.Ushakov
*/
public class RubyMotionSymbol extends TopLevelSymbol {
private final Module myModule;
public RubyMotionSymbol(@NotNull RFile file) {
super(file);
myModule = ModuleUtilCore.findModuleForPsiElement(file);
}
@Override
protected boolean processChildrenInner(final SymbolPsiProcessor processor, final PsiElement invocationPoint) {
final Module module = myModule;
if (module != null) {
for (Symbol symbol : MotionSymbolUtil.MotionSymbolsCache.getInstance(module).getSymbols()) {
if (!processor.process(symbol)) {
return false;
}
}
}
return true;
}
@Nullable
@Override
public Module getModule() {
return myModule;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RubyMotionSymbol that = (RubyMotionSymbol)o;
if (myModule != null ? !myModule.equals(that.myModule) : that.myModule != null) return false;
return true;
}
@Override
public int hashCode() {
return 31 + (myModule != null ? myModule.hashCode() : 0);
}
}