@Override public void visitClassInitializer(PsiClassInitializer initializer) { JavaElementArrangementEntry entry = createNewEntry(initializer, initializer.getTextRange(), FIELD, null, true); if (entry == null) { return; } PsiElement classLBrace = null; PsiClass clazz = initializer.getContainingClass(); if (clazz != null) { classLBrace = clazz.getLBrace(); } for (PsiElement e = initializer.getPrevSibling(); e != null; e = e.getPrevSibling()) { JavaElementArrangementEntry prevEntry; if (e == classLBrace) { prevEntry = myEntries.get(clazz); } else { prevEntry = myEntries.get(e); } if (prevEntry != null) { entry.addDependency(prevEntry); } if (!(e instanceof PsiWhiteSpace)) { break; } } }
public static void addImportIfNeeded(@NotNull PsiClass aClass, @NotNull PsiElement context) { final PsiFile file = context.getContainingFile(); if (!(file instanceof PsiJavaFile)) { return; } final PsiJavaFile javaFile = (PsiJavaFile) file; final PsiClass outerClass = aClass.getContainingClass(); if (outerClass == null) { if (PsiTreeUtil.isAncestor(javaFile, aClass, true)) { return; } } else if (PsiTreeUtil.isAncestor(outerClass, context, true)) { final PsiElement brace = outerClass.getLBrace(); if (brace != null && brace.getTextOffset() < context.getTextOffset()) { return; } } final String qualifiedName = aClass.getQualifiedName(); if (qualifiedName == null) { return; } final PsiImportList importList = javaFile.getImportList(); if (importList == null) { return; } final String containingPackageName = javaFile.getPackageName(); @NonNls final String packageName = ClassUtil.extractPackageName(qualifiedName); if (containingPackageName.equals(packageName) || importList.findSingleClassImportStatement(qualifiedName) != null) { return; } if (importList.findOnDemandImportStatement(packageName) != null && !hasDefaultImportConflict(qualifiedName, javaFile) && !hasOnDemandImportConflict(qualifiedName, javaFile)) { return; } final Project project = importList.getProject(); final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); final PsiElementFactory elementFactory = psiFacade.getElementFactory(); final PsiImportStatement importStatement = elementFactory.createImportStatement(aClass); importList.add(importStatement); }
@Override protected PsiElement getNavigationElement(@NotNull PsiClass createdElement) { return createdElement.getLBrace(); }