/******************************************************************************* * Copyright (c) 2000, 2016 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package org.eclipse.dltk.internal.core; import java.util.ArrayList; import org.eclipse.dltk.core.IField; import org.eclipse.dltk.core.IMethod; import org.eclipse.dltk.core.IScriptFolder; import org.eclipse.dltk.core.IType; /** * @see IModelElementRequestor */ public class ModelElementRequestor implements IModelElementRequestor { /** * True if this requestor no longer wants to receive results from its * <code>IRequestorNameLookup</code>. */ protected boolean fCanceled = false; /** * A collection of the resulting fields, or <code>null</code> if no field * results have been received. */ protected ArrayList fFields = null; /** * A collection of the resulting initializers, or <code>null</code> if no * initializer results have been received. */ protected ArrayList fInitializers = null; /** * A collection of the resulting member types, or <code>null</code> if no * member type results have been received. */ protected ArrayList fMemberTypes = null; /** * A collection of the resulting methods, or <code>null</code> if no * method results have been received. */ protected ArrayList fMethods = null; /** * A collection of the resulting package fragments, or <code>null</code> * if no package fragment results have been received. */ protected ArrayList fScriptFolders = null; /** * A collection of the resulting types, or <code>null</code> if no type * results have been received. */ protected ArrayList fTypes = null; /** * Empty arrays used for efficiency */ protected static IField[] fgEmptyFieldArray = new IField[0]; protected static IType[] fgEmptyTypeArray = new IType[0]; protected static IScriptFolder[] fgEmptyScriptFolderArray = new IScriptFolder[0]; protected static IMethod[] fgEmptyMethodArray = new IMethod[0]; /** * @see IModelElementRequestor */ @Override public void acceptField(IField field) { if (fFields == null) { fFields = new ArrayList(); } fFields.add(field); } /** * @see IModelElementRequestor */ @Override public void acceptMemberType(IType type) { if (fMemberTypes == null) { fMemberTypes = new ArrayList(); } fMemberTypes.add(type); } /** * @see IModelElementRequestor */ @Override public void acceptMethod(IMethod method) { if (fMethods == null) { fMethods = new ArrayList(); } fMethods.add(method); } /** * @see IModelElementRequestor */ @Override public void acceptScriptFolder(IScriptFolder ScriptFolder) { if (fScriptFolders == null) { fScriptFolders = new ArrayList(); } fScriptFolders.add(ScriptFolder); } /** * @see IModelElementRequestor */ @Override public void acceptType(IType type) { if (fTypes == null) { fTypes = new ArrayList(); } fTypes.add(type); } /** * @see IModelElementRequestor */ public IField[] getFields() { if (fFields == null) { return fgEmptyFieldArray; } int size = fFields.size(); IField[] results = new IField[size]; fFields.toArray(results); return results; } /** * @see IModelElementRequestor */ public IType[] getMemberTypes() { if (fMemberTypes == null) { return fgEmptyTypeArray; } int size = fMemberTypes.size(); IType[] results = new IType[size]; fMemberTypes.toArray(results); return results; } /** * @see IModelElementRequestor */ public IMethod[] getMethods() { if (fMethods == null) { return fgEmptyMethodArray; } int size = fMethods.size(); IMethod[] results = new IMethod[size]; fMethods.toArray(results); return results; } /** * @see IModelElementRequestor */ public IScriptFolder[] getScriptFolders() { if (fScriptFolders == null) { return fgEmptyScriptFolderArray; } int size = fScriptFolders.size(); IScriptFolder[] results = new IScriptFolder[size]; fScriptFolders.toArray(results); return results; } /** * @see IModelElementRequestor */ public IType[] getTypes() { if (fTypes == null) { return fgEmptyTypeArray; } int size = fTypes.size(); IType[] results = new IType[size]; fTypes.toArray(results); return results; } /** * @see IModelElementRequestor */ @Override public boolean isCanceled() { return fCanceled; } /** * Reset the state of this requestor. */ public void reset() { fCanceled = false; fFields = null; fInitializers = null; fMemberTypes = null; fMethods = null; fScriptFolders = null; fTypes = null; } /** * Sets the #isCanceled state of this requestor to true or false. */ public void setCanceled(boolean b) { fCanceled = b; } }