// Path: src/main/java/codemining/languagetools/IScopeExtractor.java
// public interface IScopeExtractor {
// 	Multimap<Scope, String> getFromFile(final File file) throws IOException;
// 
// 	Multimap<Scope, String> getFromNode(final ASTNode node);
// 
// 	Multimap<Scope, String> getFromString(final String code,
// 			final ParseType parseType);
// }
// 
// Path: src/main/java/codemining/languagetools/ParseType.java
// public enum ParseType {
// 	COMPILATION_UNIT, CLASS_BODY, METHOD, STATEMENTS, EXPRESSION
// }
// 
// Path: src/main/java/codemining/languagetools/Scope.java
// public class Scope implements Comparable<Scope> {
// 
// 	public enum ScopeType {
// 		SCOPE_CLASS, SCOPE_LOCAL, SCOPE_METHOD
// 	}
// 
// 	public final String code;
// 
// 	public final ScopeType scopeType;
// 
// 	public final String type;
// 
// 	public final int astNodeType;
// 	public final int astParentNodeType;
// 
// 	public Scope(final String code, final ScopeType scopeType,
// 			final String type, final int astNodeType,
// 			final int astParentNodeType) {
// 		this.code = code;
// 		this.scopeType = scopeType;
// 		this.type = type;
// 		this.astNodeType = astNodeType;
// 		this.astParentNodeType = astParentNodeType;
// 	}
// 
// 	@Override
// 	public int compareTo(final Scope other) {
// 		return ComparisonChain.start().compare(code, other.code)
// 				.compare(scopeType, other.scopeType).compare(type, other.type)
// 				.compare(astNodeType, other.astNodeType)
// 				.compare(astParentNodeType, other.astParentNodeType).result();
// 	}
// 
// 	@Override
// 	public boolean equals(final Object obj) {
// 		if (!(obj instanceof Scope)) {
// 			return false;
// 		}
// 		final Scope other = (Scope) obj;
// 		return other.code.equals(code) && other.scopeType == scopeType
// 				&& other.astNodeType == astNodeType
// 				&& other.astParentNodeType == astParentNodeType
// 				&& other.type.equals(type);
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return Objects.hashCode(code, scopeType, type, astNodeType,
// 				astParentNodeType);
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return scopeType + " " + code;
// 	}
// }


import static com.google.common.base.Preconditions.checkArgument;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.eclipse.jdt.core.dom.ASTNode;
import codemining.languagetools.IScopeExtractor;
import codemining.languagetools.ParseType;
import codemining.languagetools.Scope;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap;
/**
 * 
 */
package codemining.java.codeutils.scopes;






/**
 * Aggregate all extractors.
 * 
 * @author Miltos Allamanis <m.allamanis@ed.ac.uk>
 * 
 */
public class AllScopeExtractor {

	public static final class AllScopeSnippetExtractor implements
// Path: src/main/java/codemining/languagetools/IScopeExtractor.java
// public interface IScopeExtractor {
// 	Multimap<Scope, String> getFromFile(final File file) throws IOException;
// 
// 	Multimap<Scope, String> getFromNode(final ASTNode node);
// 
// 	Multimap<Scope, String> getFromString(final String code,
// 			final ParseType parseType);
// }
// 
// Path: src/main/java/codemining/languagetools/ParseType.java
// public enum ParseType {
// 	COMPILATION_UNIT, CLASS_BODY, METHOD, STATEMENTS, EXPRESSION
// }
// 
// Path: src/main/java/codemining/languagetools/Scope.java
// public class Scope implements Comparable<Scope> {
// 
// 	public enum ScopeType {
// 		SCOPE_CLASS, SCOPE_LOCAL, SCOPE_METHOD
// 	}
// 
// 	public final String code;
// 
// 	public final ScopeType scopeType;
// 
// 	public final String type;
// 
// 	public final int astNodeType;
// 	public final int astParentNodeType;
// 
// 	public Scope(final String code, final ScopeType scopeType,
// 			final String type, final int astNodeType,
// 			final int astParentNodeType) {
// 		this.code = code;
// 		this.scopeType = scopeType;
// 		this.type = type;
// 		this.astNodeType = astNodeType;
// 		this.astParentNodeType = astParentNodeType;
// 	}
// 
// 	@Override
// 	public int compareTo(final Scope other) {
// 		return ComparisonChain.start().compare(code, other.code)
// 				.compare(scopeType, other.scopeType).compare(type, other.type)
// 				.compare(astNodeType, other.astNodeType)
// 				.compare(astParentNodeType, other.astParentNodeType).result();
// 	}
// 
// 	@Override
// 	public boolean equals(final Object obj) {
// 		if (!(obj instanceof Scope)) {
// 			return false;
// 		}
// 		final Scope other = (Scope) obj;
// 		return other.code.equals(code) && other.scopeType == scopeType
// 				&& other.astNodeType == astNodeType
// 				&& other.astParentNodeType == astParentNodeType
// 				&& other.type.equals(type);
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return Objects.hashCode(code, scopeType, type, astNodeType,
// 				astParentNodeType);
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return scopeType + " " + code;
// 	}
// }


// Path: src/main/java/codemining/java/codeutils/scopes/AllScopeExtractor.java
import static com.google.common.base.Preconditions.checkArgument;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.eclipse.jdt.core.dom.ASTNode;
import codemining.languagetools.IScopeExtractor;
import codemining.languagetools.ParseType;
import codemining.languagetools.Scope;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap;

/**
 * 
 */
package codemining.java.codeutils.scopes;






/**
 * Aggregate all extractors.
 * 
 * @author Miltos Allamanis <m.allamanis@ed.ac.uk>
 * 
 */
public class AllScopeExtractor {

	public static final class AllScopeSnippetExtractor implements
			IScopeExtractor {