@Nullable public ProblemDescriptor[] checkFile( @NotNull PsiFile file, @NotNull InspectionManager manager, boolean isOnTheFly) { // does not work in tests since CodeInsightTestCase copies file into temporary location if (ApplicationManager.getApplication().isUnitTestMode()) return null; if (file instanceof PsiJavaFile) { if (JspPsiUtil.isInJspFile(file)) return null; PsiJavaFile javaFile = (PsiJavaFile) file; PsiDirectory directory = javaFile.getContainingDirectory(); if (directory == null) return null; PsiPackage dirPackage = JavaDirectoryService.getInstance().getPackage(directory); if (dirPackage == null) return null; PsiPackageStatement packageStatement = javaFile.getPackageStatement(); // highlight the first class in the file only PsiClass[] classes = javaFile.getClasses(); if (classes.length == 0 && packageStatement == null) return null; String packageName = dirPackage.getQualifiedName(); if (!Comparing.strEqual(packageName, "", true) && packageStatement == null) { String description = JavaErrorMessages.message("missing.package.statement", packageName); return new ProblemDescriptor[] { manager.createProblemDescriptor( classes[0].getNameIdentifier(), description, new AdjustPackageNameFix(javaFile, null, dirPackage), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, isOnTheFly) }; } if (packageStatement != null) { final PsiJavaCodeReferenceElement packageReference = packageStatement.getPackageReference(); PsiPackage classPackage = (PsiPackage) packageReference.resolve(); List<LocalQuickFix> availableFixes = new ArrayList<LocalQuickFix>(); if (classPackage == null) { availableFixes.add(new AdjustPackageNameFix(javaFile, packageStatement, dirPackage)); } else if (!Comparing.equal( dirPackage.getQualifiedName(), packageReference.getText(), true)) { availableFixes.add(new AdjustPackageNameFix(javaFile, packageStatement, dirPackage)); MoveToPackageFix moveToPackageFix = new MoveToPackageFix(file, classPackage); if (moveToPackageFix.isAvailable()) { availableFixes.add(moveToPackageFix); } } if (!availableFixes.isEmpty()) { String description = JavaErrorMessages.message( "package.name.file.path.mismatch", packageReference.getText(), dirPackage.getQualifiedName()); return new ProblemDescriptor[] { manager.createProblemDescriptor( packageStatement.getPackageReference(), description, isOnTheFly, availableFixes.toArray(new LocalQuickFix[availableFixes.size()]), ProblemHighlightType.GENERIC_ERROR_OR_WARNING) }; } } } return null; }