| /******************************************************************************* |
| * Copyright (c) 2010 xored software, Inc. |
| * |
| * 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 |
| * |
| * Contributors: |
| * xored software, Inc. - initial API and Implementation (Alex Panchenko) |
| *******************************************************************************/ |
| package org.eclipse.dltk.javascript.typeinfo; |
| |
| import org.eclipse.dltk.core.IModelElement; |
| import org.eclipse.dltk.core.builder.IBuildContext; |
| import org.eclipse.dltk.javascript.typeinference.IValueCollection; |
| import org.eclipse.dltk.javascript.typeinfo.model.JSType; |
| import org.eclipse.dltk.javascript.typeinfo.model.RecordType; |
| import org.eclipse.dltk.javascript.typeinfo.model.SimpleType; |
| import org.eclipse.dltk.javascript.typeinfo.model.Type; |
| import org.eclipse.dltk.javascript.typeinfo.model.TypeKind; |
| |
| public interface ITypeInfoContext extends ITypeSystem { |
| |
| /** |
| * Returns the {@link Type} with the specified name. If there is already an |
| * active call to the {@link ITypeProvider} then a proxy is returned. If |
| * type couldn't be found then {@link TypeKind#UNKNOWN} type is returned. |
| * |
| * @param typeName |
| * @return |
| */ |
| Type getType(String typeName); |
| |
| /** |
| * Calls {@link #getType(String)} and wraps the result as {@link SimpleType} |
| * |
| * @param typeName |
| * @return |
| */ |
| SimpleType getTypeRef(String typeName); |
| |
| /** |
| * Returns the {@link Type} with the specified name. The only difference if |
| * compared to {@link #getType(String)} is that this function returns |
| * <code>null</code> instead of {@link TypeKind#UNKNOWN} type. |
| * |
| * @param typeName |
| * the name of the type |
| * @param mode |
| * the mode or <code>null</code> if unknown |
| * @since 3.0 |
| */ |
| Type getKnownType(String typeName, TypeMode mode); |
| |
| /** |
| * Returns the model element being processed or <code>null</code> |
| * |
| * @return |
| */ |
| IModelElement getModelElement(); |
| |
| /** |
| * Returns the source being processed or <code>null</code> |
| * |
| * @return |
| */ |
| ReferenceSource getSource(); |
| |
| /** |
| * Returns current value for the specified attribute. |
| * |
| * @param key |
| * @return |
| */ |
| <T> T getAttribute(AttributeKey<T> key); |
| |
| /** |
| * Adds value for the specified attribute. |
| * |
| * Current value of the attribute can be retrieved with |
| * {@link ITypeSystem#getAttribute(AttributeKey)}. |
| * |
| * @param key |
| * @param value |
| */ |
| <T> void pushAttribute(AttributeKey<T> key, T value); |
| |
| /** |
| * Removes last added value for the specified attribute. |
| * |
| * @param key |
| * @return |
| */ |
| <T> T popAttribute(AttributeKey<T> key); |
| |
| /** |
| * Returns the collection representing the current local scope of the |
| * evaluated code. |
| */ |
| IValueCollection currentCollection(); |
| |
| /** |
| * Returns the references to the registered local type with the specified |
| * name, if no such types registered then empty array is returned. |
| */ |
| ILocalTypeReference[] getLocalTypes(String name); |
| |
| /** |
| * Registers the specified local type as "local" (if multiple types with the |
| * same name are registered then the first one which is enabled will be |
| * used). Returns the type reference, which can be used to disable it |
| * temporary. |
| */ |
| ILocalTypeReference registerLocalType(Type type); |
| |
| /** |
| * Registers a record type, this is then seen as a local type under that |
| * name. |
| * |
| * @param type |
| */ |
| void registerRecordType(RecordType type); |
| |
| IRRecordType resolveRecordType(String name); |
| |
| /** |
| * Attribute used by {@link #contextualize(IRType)}. |
| */ |
| static final AttributeKey<IRTypeDeclaration> CONTEXTUALIZE_WITH = new AttributeKey<IRTypeDeclaration>(); |
| |
| /** |
| * Converts the specified type expression to the resolved type expression |
| * and contextualizes it by replacing contextualizable type expressions with |
| * the value of {@link #CONTEXTUALIZE_WITH} attribute. |
| */ |
| IRType contextualize(JSType type); |
| |
| /** |
| * looks if it can generate an IValue type from the given JSType |
| * |
| * @param type |
| * @return |
| */ |
| IRLocalType resolveLocalType(String name); |
| |
| AttributeKey<IBuildContext> BUILD_CONTEXT = new AttributeKey<IBuildContext>(); |
| } |