AnnotationPlace (@NotNull PsiElement element, @NotNull Supplier<AnnotationPlace> confirmNewExternalAnnotationRoot) { if (!element.isPhysical() && !(element.getOriginalElement() instanceof PsiCompiledElement)) { return AnnotationPlace.IN_CODE; //element just created } if (element instanceof PsiLocalVariable) { return AnnotationPlace.IN_CODE; } if (!element.getManager().isInProject(element)) return AnnotationPlace.EXTERNAL; final Project project = myPsiManager.getProject(); //choose external place iff USE_EXTERNAL_ANNOTATIONS option is on, //otherwise external annotations should be read-only final PsiFile containingFile = element.getContainingFile(); if (containingFile != null && JavaCodeStyleSettings.getInstance(containingFile).USE_EXTERNAL_ANNOTATIONS) { final VirtualFile virtualFile = containingFile.getVirtualFile(); LOG.assertTrue(virtualFile != null); final List<OrderEntry> entries = ProjectRootManager.getInstance(project).getFileIndex().getOrderEntriesForFile(virtualFile); if (!entries.isEmpty()) { for (OrderEntry entry : entries) { if (!(entry instanceof ModuleOrderEntry)) { if (!AnnotationOrderRootType.getUrls(entry).isEmpty()) { return AnnotationPlace.EXTERNAL; } break; } } } return confirmNewExternalAnnotationRoot.get(); } return AnnotationPlace.IN_CODE; }