private static PsiClass copy(PsiClass aClass, String name) { final PsiClass classNavigationElement = (PsiClass) aClass.getNavigationElement(); final PsiClass classCopy = (PsiClass) classNavigationElement.copy(); if (name != null) { classCopy.setName(name); } return classCopy; }
@Nullable @Override public EditorNotificationPanel createNotificationPanel( @NotNull VirtualFile file, @NotNull FileEditor fileEditor) { XDebugSession session = XDebuggerManager.getInstance(myProject).getCurrentSession(); if (session == null) { FILE_PROCESSED_KEY.set(file, null); return null; } XSourcePosition position = session.getCurrentPosition(); if (position == null || !file.equals(position.getFile())) { FILE_PROCESSED_KEY.set(file, null); return null; } if (file.getFileType() == JavaClassFileType.INSTANCE) return null; final PsiFile psiFile = PsiManager.getInstance(myProject).findFile(file); if (psiFile == null) return null; if (!(psiFile instanceof PsiJavaFile)) return null; PsiClass[] classes = ((PsiJavaFile) psiFile).getClasses(); if (classes.length == 0) return null; PsiClass baseClass = classes[0]; String name = baseClass.getQualifiedName(); if (name == null) return null; if (DumbService.getInstance(myProject).isDumb()) return null; ArrayList<PsiClass> alts = ContainerUtil.newArrayList( JavaPsiFacade.getInstance(myProject) .findClasses(name, GlobalSearchScope.allScope(myProject))); ContainerUtil.removeDuplicates(alts); FILE_PROCESSED_KEY.set(file, true); if (alts.size() > 1) { for (PsiClass cls : alts) { if (cls.equals(baseClass) || cls.getNavigationElement().equals(baseClass)) { alts.remove(cls); break; } } alts.add(0, baseClass); ComboBoxClassElement[] elems = ContainerUtil.map2Array( alts, ComboBoxClassElement.class, new Function<PsiClass, ComboBoxClassElement>() { @Override public ComboBoxClassElement fun(PsiClass psiClass) { return new ComboBoxClassElement(psiClass); } }); return new AlternativeSourceNotificationPanel(elems, baseClass, myProject, file); } return null; }