Отслеживание всех трех типов (локальный, явный импорт, *
импорт) в отдельных структурах данных (добавление записей при появлении объявлений и импортов в программе), а также при необходимости поиска идентификатора типа проверьте каждая из этих структур данных.
Если у вас есть порядок приоритетов (например, локальные объявления shadow (hide) импортированных классов), тогда просто отметьте три в этом порядке и остановитесь, как только вы найдете что-то (скорее как цепочка лексических областей видимости). Если иметь неоднозначные имена - ошибка, проверьте все три и сохраните список всего, что вы нашли; если после этого в списке содержится не один, а другой элемент, сообщите об ошибке (и перечислите найденные элементы в сообщении об ошибке).
В случае импорта *
неясно, предоставляет ли какой-либо данный import ....*
заданное имя класса. Для этого просто попробуйте каждый из них по очереди как подслучае (учитывая import P.*
поиск MyClass
, форма P.MyClass
и проверка, существует ли он). В этом случае особенно важно проверить все операции импорта *
, чтобы не выбирать один вариант с неоднозначным именем.