TypedScope

io.joern.x2cpg.datastructures.TypedScope
trait TypedScope[M <: MethodLike, F <: FieldLike, T <: TypeLike[M, F]](summary: ProgramSummary[T])

Extends the capability of the scope object to track types in scope as provide type resolution.

Type parameters

F

the field/object property meta data class.

M

the method/function meta data class.

T

the type/class meta data class.

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class DefaultTypedScope[M, F, T]
Self type

Members list

Value members

Concrete methods

def addImportedMember(typeOrModule: String, memberNames: String*): Unit

Appends known members to the scope.

Appends known members to the scope.

Value parameters

memberNames

the names of the members, or, if empty, imports all members from the type.

typeOrModule

the type name or full name.

Attributes

def addImportedNamespace(namespace: String): Unit

Appends known types imported into the scope.

Appends known types imported into the scope.

Value parameters

namespace

the fully qualified imported namespace.

Attributes

def addImportedTypeOrModule(typeOrModule: String): Unit

Appends known types imported into the scope.

Appends known types imported into the scope.

Value parameters

typeOrModule

the type name or full name.

Attributes

protected def isOverloadedBy(method: M, argTypes: List[String]): Boolean

Determines if, by observing the given argument types, that the method's signature is a plausible match to the observed arguments.

Determines if, by observing the given argument types, that the method's signature is a plausible match to the observed arguments.

The default implementation only considers that the same number of arguments are added and does not account for variadic arguments nor polymorphism.

Value parameters

argTypes

the observed arguments from the call-site.

method

the method meta data.

Attributes

Returns

true if the method could be overloaded by a call with these argument types.

def tryResolveFieldAccess(fieldName: String, typeFullName: Option[String]): Option[F]

Given the type full name and field name, will attempt to find the matching entry.

Given the type full name and field name, will attempt to find the matching entry.

Value parameters

fieldName

the field/object property/module variable name.

typeFullName

the base type full name. If none, will refer to loosely imported member or functions.

Attributes

Returns

the field/object property/module variable's meta data.

def tryResolveMethodInvocation(callName: String, argTypes: List[String], typeFullName: Option[String])(implicit tag: ClassTag[M]): Option[M]

Given the type full name and call name, will attempt to find the matching entry.

Given the type full name and call name, will attempt to find the matching entry.

Value parameters

argTypes

the observed argument types. Only relevant for languages that implement overloading.

callName

the call name.

typeFullName

the base type full name. If none, will refer to loosely imported member or functions.

Attributes

Returns

the method meta data if found.

def tryResolveTypeReference(typeName: String): Option[T]

Given a type name or alias, attempts to resolve its full name using the types currently in scope.

Given a type name or alias, attempts to resolve its full name using the types currently in scope.

Value parameters

typeName

the shorthand name.

Attributes

Returns

the type meta-data if found.

def typeForMethod(m: M): Option[T]

Given a method, will attempt to find the associated type with preference to the types in scope.

Given a method, will attempt to find the associated type with preference to the types in scope.

Value parameters

m

the method meta data.

Attributes

Returns

the type meta data, if found.

Concrete fields

protected val aliasedTypes: HashMap[String, String]

Tracks any types or modules imported under alternative names to their type full names.

Tracks any types or modules imported under alternative names to their type full names.

Attributes

protected val membersInScope: Set[MemberLike]

Tracks the members visible to this scope. In languages like JavaScript or Python, where members can be directly imported and accessed without an explicit base, they are kept here.

Tracks the members visible to this scope. In languages like JavaScript or Python, where members can be directly imported and accessed without an explicit base, they are kept here.

Attributes

protected val typesInScope: Set[T]

Tracks the types that are visible to this scope.

Tracks the types that are visible to this scope.

Attributes