This commit is contained in:
Alexey Kudravtsev
2011-03-31 14:57:31 +04:00
parent 3e597d7239
commit 1b8e752e20
3 changed files with 36 additions and 41 deletions
@@ -39,18 +39,18 @@ import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import gnu.trove.THashSet;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.Set;
public class InconsistentLanguageLevelInspection extends DescriptorProviderInspection{
private static final Logger LOGGER = Logger.getInstance("#" + InconsistentLanguageLevelInspection.class.getName());
public void runInspection(@NotNull AnalysisScope scope, @NotNull InspectionManager manager) {
final Set<Module> modules = new HashSet<Module>();
final Set<Module> modules = new THashSet<Module>();
scope.accept(new PsiElementVisitor(){
public void visitElement(PsiElement element) {
final Module module = ModuleUtil.findModuleForPsiElement(element);
@@ -60,35 +60,30 @@ public class InconsistentLanguageLevelInspection extends DescriptorProviderInspe
}
});
if (!modules.isEmpty()) {
final LanguageLevel projectLanguageLevel =
LanguageLevelProjectExtension.getInstance(modules.iterator().next().getProject()).getLanguageLevel();
for (Module module : modules) {
LanguageLevel languageLevel = LanguageLevelModuleExtension.getInstance(module).getLanguageLevel();
if (languageLevel == null) {
languageLevel = projectLanguageLevel;
LanguageLevel projectLanguageLevel = LanguageLevelProjectExtension.getInstance(manager.getProject()).getLanguageLevel();
for (Module module : modules) {
LanguageLevel languageLevel = LanguageLevelModuleExtension.getInstance(module).getLanguageLevel();
if (languageLevel == null) {
languageLevel = projectLanguageLevel;
}
LOGGER.assertTrue(languageLevel != null);
final RefModule refModule = getRefManager().getRefModule(module);
for (OrderEntry entry : ModuleRootManager.getInstance(module).getOrderEntries()) {
if (!(entry instanceof ModuleOrderEntry)) continue;
final Module dependantModule = ((ModuleOrderEntry)entry).getModule();
if (dependantModule == null) continue;
LanguageLevel dependantLanguageLevel = LanguageLevelModuleExtension.getInstance(dependantModule).getLanguageLevel();
if (dependantLanguageLevel == null) {
dependantLanguageLevel = projectLanguageLevel;
}
LOGGER.assertTrue(languageLevel != null);
final RefModule refModule = getRefManager().getRefModule(module);
for (OrderEntry entry : ModuleRootManager.getInstance(module).getOrderEntries()) {
if (entry instanceof ModuleOrderEntry) {
final Module dependantModule = ((ModuleOrderEntry)entry).getModule();
if (dependantModule != null) {
LanguageLevel dependantLanguageLevel = LanguageLevelModuleExtension.getInstance(dependantModule).getLanguageLevel();
if (dependantLanguageLevel == null) {
dependantLanguageLevel = projectLanguageLevel;
}
LOGGER.assertTrue(dependantLanguageLevel != null);
if (languageLevel.compareTo(dependantLanguageLevel) < 0) {
final CommonProblemDescriptor problemDescriptor = manager.createProblemDescriptor(
"Inconsistent language level settings: module " + module.getName() + " with language level " + languageLevel +
" depends on module " + dependantModule.getName() +" with language level " + dependantLanguageLevel,
new UnnecessaryModuleDependencyInspection.RemoveModuleDependencyFix(module, dependantModule),
new OpenModuleSettingsFix(module));
addProblemElement(refModule, problemDescriptor);
}
}
}
LOGGER.assertTrue(dependantLanguageLevel != null);
if (languageLevel.compareTo(dependantLanguageLevel) < 0) {
final CommonProblemDescriptor problemDescriptor = manager.createProblemDescriptor(
"Inconsistent language level settings: module " + module.getName() + " with language level " + languageLevel +
" depends on module " + dependantModule.getName() +" with language level " + dependantLanguageLevel,
new UnnecessaryModuleDependencyInspection.RemoveModuleDependencyFix(module, dependantModule),
new OpenModuleSettingsFix(module));
addProblemElement(refModule, problemDescriptor);
}
}
}