Names are used to refer to entities declared in a Java program. A declared entity is a package, class type, interface type, member (field or method) of a reference type, parameter (to a method, constructor, or exception handler), or local variable.
Every name introduced by a declaration has a scope, which is the part of the Java program text within which the declared entity can be referred to by a simple name.
This specification implements the scope rules of Java. It uses a number of Eli modules specifying computational roles that are useful in name analysis.
A precondition for using any of Eli's name analysis modules is that every identifier occurrence have a Sym attribute:
The same identifier can be used in a specific context to denote a package, a type, a method, or a field. Although a local variable name can hide a field name, local variables and fields obey different scope rules. Thus each of the five kinds of entities has its own name space, implemented by an instantiation of an Eli name analysis module. All of the computational roles of a specific module instance are qualified by the instance name.