blob: 0bfebcc4b65b0b309c4b453c6741500bb4e999ca [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 NumberFour AG
*
* 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:
* NumberFour AG - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.javascript.typeinfo;
import java.util.List;
import org.eclipse.dltk.annotations.Nullable;
import org.eclipse.dltk.javascript.typeinfo.model.Type;
import org.eclipse.dltk.javascript.typeinfo.model.TypeKind;
/**
* Resolved type used during type inference. It is created based on the
* {@link Type} model declaration by the {@link ITypeSystem}, for generic types
* it can be also parameterized.
*
* @see Type
* @see ITypeSystem
*/
public interface IRTypeDeclaration extends IRElement {
/**
* Returns the type system this instance was created by.
*/
ITypeSystem getTypeSystem();
/**
* Returns the super type of this type or <code>null</code>
*/
@Nullable
IRTypeDeclaration getSuperType();
/**
* Returns list of traits/interfaces implemented by this type
*/
List<IRTypeDeclaration> getTraits();
/**
* Returns list of members
*
* @see IRMethod
* @see IRProperty
*/
List<IRMember> getMembers();
/**
* Returns list of constructors callable via <code>new</code> operator
*/
List<IRConstructor> getConstructors();
/**
* Returns the constructor which is called when this type is used as
* function, e.g. <code>String(1)</code>
*/
@Nullable
IRConstructor getStaticConstructor();
/**
* Returns the kind of this type, just delegates to {@link Type#getKind()}
*/
TypeKind getKind();
/**
* Answers if static members of this type are accessible in the sub-types or
* not. Typically in JavaScript they are not, i.e. static members of
* <code>Object</code> are not accessible via <code>String</code> type
* reference, but in some libraries it could be different. At the moment
* this method delegates to {@link Type#isInheritStaticMembers()}.
*/
boolean isInheritStaticMembers();
/**
* Returns the original model declaration of this type. This method just
* overrides the return type of the method, declared in the super type.
*/
Type getSource();
Object getReadOnlyStatus(IRProperty property);
/**
* Answers if this type is generic (possibly not parameterized yet).
*/
boolean isGeneric();
/**
* Answers if this type is parameterized.
*/
boolean isParameterized();
/**
* Answers type arguments of this parameterized type or empty array if not
* this type is not parameterized.
*/
List<IRType> getActualTypeArguments();
/**
* Checks if type is compatible with the speciifed one.
*/
TypeCompatibility isAssignableFrom(IRTypeDeclaration declaration);
/**
* Finds the method with the specified name and {@link IRMember#isStatic()}
* attribute.
*/
@Nullable
IRMethod findMethod(String name, boolean isStatic);
}