String (boolean annotated, PsiAnnotation @Nullable [] annotations, @NotNull PsiFile containingFile) { Kind kind = getKindEnum(containingFile); switch (kind) { case CLASS_NAME_KIND: case CLASS_OR_PACKAGE_NAME_KIND: case CLASS_IN_QUALIFIED_NEW_KIND: JavaResolveResult[] results = PsiImplUtil.multiResolveImpl(containingFile.getProject(), containingFile, this, false, OurGenericsResolver.INSTANCE); PsiElement target = results.length == 1 ? results[0].getElement() : null; if (target instanceof PsiClass) { StringBuilder buffer = new StringBuilder(); PsiClass aClass = (PsiClass)target; PsiElement qualifier = getQualifier(); String prefix = null; if (qualifier instanceof PsiJavaCodeReferenceElementImpl) { prefix = ((PsiJavaCodeReferenceElementImpl)qualifier).getCanonicalText(annotated, annotations, containingFile); annotations = null; } else { String fqn = aClass.getQualifiedName(); if (fqn != null) { prefix = StringUtil.getPackageName(fqn); } } if (!StringUtil.isEmpty(prefix)) { buffer.append(prefix); buffer.append('.'); } if (annotated) { List<PsiAnnotation> list = annotations != null ? Arrays.asList(annotations) : getAnnotations(); PsiNameHelper.appendAnnotations(buffer, list, true); } buffer.append(aClass.getName()); PsiNameHelper.appendTypeArgs(buffer, getTypeParameters(), true, annotated); return buffer.toString(); } else if (target instanceof PsiPackage) { return ((PsiPackage)target).getQualifiedName(); } else { LOG.assertTrue(target == null, target); return getNormalizedText(); } case PACKAGE_NAME_KIND: case CLASS_FQ_NAME_KIND: case CLASS_FQ_OR_PACKAGE_NAME_KIND: return getNormalizedText(); default: throw new IllegalArgumentException("Unexpected kind: " + kind); } }