PsiElement (PsiFile targetFile, XmlEntityRef ref) { XmlEntityDecl.EntityContextType type = getContextType(ref); { final XmlEntityDecl entityDecl = ref.resolve(targetFile); if (entityDecl != null) return parseEntityDecl(entityDecl, targetFile, type, ref); } PsiElement e = ref; while (e != null) { if (e.getUserData(XmlElement.INCLUDING_ELEMENT) != null) { e = e.getUserData(XmlElement.INCLUDING_ELEMENT); final PsiFile f = e.getContainingFile(); if (f != null) { final XmlEntityDecl entityDecl = ref.resolve(targetFile); if (entityDecl != null) return parseEntityDecl(entityDecl, targetFile, type, ref); } continue; } if (e instanceof PsiFile refFile) { final XmlEntityDecl entityDecl = ref.resolve(refFile); if (entityDecl != null) return parseEntityDecl(entityDecl, targetFile, type, ref); break; } e = e.getParent(); } final PsiElement element = ref.getUserData(XmlElement.DEPENDING_ELEMENT); if (element instanceof XmlFile) { final XmlEntityDecl entityDecl = ref.resolve((PsiFile)element); if (entityDecl != null) return parseEntityDecl(entityDecl, targetFile, type, ref); } return null; }