/**
* Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
/*
* Created on 23/07/2005
*/
package com.python.pydev.analysis.visitors;
import java.util.ArrayList;
import java.util.List;
import org.python.pydev.core.IToken;
import org.python.pydev.shared_core.callbacks.CallbackWithListeners;
import org.python.pydev.shared_core.callbacks.ICallbackListener;
import org.python.pydev.shared_core.string.FastStringBuffer;
import com.python.pydev.analysis.visitors.ImportChecker.ImportInfo;
public final class Found {
private final List<GenAndTok> found = new ArrayList<GenAndTok>();
/**
* Identifies if the current token has been used or not
*/
private boolean used = false;
/**
* If this is an import, it may be resolved to some module and some token within that module...
*/
public ImportInfo importInfo;
private GenAndTok lastGenAndTok;
private CallbackWithListeners<Found> onDefined;
public Found(IToken tok, IToken generator, int scopeId, ScopeItems scopeFound) {
GenAndTok o = new GenAndTok(generator, tok, scopeId, scopeFound);
lastGenAndTok = o;
this.found.add(o);
}
/**
* Registers a callback to be called if it's later defined.
*/
public void registerCallOnDefined(final ICallbackListener<Found> listener) {
if (onDefined == null) {
onDefined = new CallbackWithListeners<Found>();
}
onDefined.registerListener(listener);
}
/**
* Called to report how it was found later on (only called if it was initially undefined and was found as
* being a definition from the actual module later on).
*/
public void reportDefined(Found laterFound) {
if (onDefined != null) {
onDefined.call(laterFound);
}
}
/**
* @param used The used to set.
*/
public void setUsed(boolean used) {
this.used = used;
}
/**
* @return Returns the used.
*/
public boolean isUsed() {
return used;
}
public void addGeneratorToFound(IToken generator2, IToken tok2, int scopeId, ScopeItems scopeFound) {
GenAndTok o = new GenAndTok(generator2, tok2, scopeId, scopeFound);
lastGenAndTok = o;
this.found.add(o);
}
public void addGeneratorsFromFound(Found found2) {
if (found2.found.size() > 0) {
this.found.addAll(found2.found);
lastGenAndTok = this.found.get(this.found.size() - 1);
}
}
public GenAndTok getSingle() {
return lastGenAndTok; //always returns the last (this is the one that is binded at the current place in the scope)
}
public List<GenAndTok> getAll() {
return found;
}
public boolean isImport() {
return lastGenAndTok.generator.isImport();
}
@Override
public String toString() {
FastStringBuffer buffer = new FastStringBuffer();
buffer.append("Found { (used:");
buffer.append(used);
buffer.append(") [");
for (GenAndTok g : found) {
buffer.appendObject(g);
buffer.append(" ");
}
buffer.append(" ]}");
return buffer.toString();
}
public boolean isWildImport() {
return lastGenAndTok.generator.isWildImport();
}
}