From 8dd16279c13d3ca80eaaf816496190d64903fd36 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 9 Oct 2012 21:37:51 +0200 Subject: [PATCH] IDEA-71186 (Inspections / Imports / Redundant import: false positive with static imports of deeply nested elements) --- .../ig/imports/RedundantImportInspection.java | 55 +++++++------------ 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/imports/RedundantImportInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/imports/RedundantImportInspection.java index a755713227d0..d7efafe91620 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/imports/RedundantImportInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/imports/RedundantImportInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2009 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2012 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,15 +32,13 @@ public class RedundantImportInspection extends BaseInspection { @Override @NotNull public String getDisplayName() { - return InspectionGadgetsBundle.message( - "redundant.import.display.name"); + return InspectionGadgetsBundle.message("redundant.import.display.name"); } @Override @NotNull public String buildErrorString(Object... infos) { - return InspectionGadgetsBundle.message( - "redundant.import.problem.descriptor"); + return InspectionGadgetsBundle.message("redundant.import.problem.descriptor"); } @Override @@ -73,51 +71,42 @@ public class RedundantImportInspection extends BaseInspection { checkStaticImports(importList, javaFile); } - private void checkStaticImports(PsiImportList importList, - PsiJavaFile javaFile) { - final PsiImportStaticStatement[] importStaticStatements = - importList.getImportStaticStatements(); - final Set staticImports = - new HashSet(importStaticStatements.length); - for (PsiImportStaticStatement importStaticStatement : - importStaticStatements) { - final String referenceName = - importStaticStatement.getReferenceName(); - final PsiClass targetClass = - importStaticStatement.resolveTargetClass(); + private void checkStaticImports(PsiImportList importList, PsiJavaFile javaFile) { + final PsiImportStaticStatement[] importStaticStatements = importList.getImportStaticStatements(); + final Set onDemandStaticImports = new HashSet(); + final Set singleMemberStaticImports = new HashSet(); + for (PsiImportStaticStatement importStaticStatement : importStaticStatements) { + final PsiClass targetClass = importStaticStatement.resolveTargetClass(); if (targetClass == null) { continue; } final String qualifiedName = targetClass.getQualifiedName(); + final String referenceName = importStaticStatement.getReferenceName(); if (referenceName == null) { - if (staticImports.contains(qualifiedName)) { + if (onDemandStaticImports.contains(qualifiedName)) { registerError(importStaticStatement); continue; } - staticImports.add(qualifiedName); + onDemandStaticImports.add(qualifiedName); } else { - final String qualifiedReferenceName = - qualifiedName + '.' + referenceName; - if (staticImports.contains(qualifiedReferenceName)) { + final String qualifiedReferenceName = qualifiedName + '.' + referenceName; + if (singleMemberStaticImports.contains(qualifiedReferenceName)) { registerError(importStaticStatement); continue; } - if (staticImports.contains(qualifiedName)) { - if (!ImportUtils.hasOnDemandImportConflict( - qualifiedReferenceName, javaFile)) { + if (onDemandStaticImports.contains(qualifiedName)) { + if (!ImportUtils.hasOnDemandImportConflict(qualifiedReferenceName, javaFile)) { registerError(importStaticStatement); } } - staticImports.add(qualifiedReferenceName); + singleMemberStaticImports.add(qualifiedReferenceName); } } } - private void checkNonStaticImports(PsiImportList importList, - PsiJavaFile javaFile) { - final PsiImportStatement[] importStatements = - importList.getImportStatements(); + private void checkNonStaticImports(PsiImportList importList, PsiJavaFile javaFile) { + final PsiImportStatement[] importStatements = importList.getImportStatements(); final Set onDemandImports = new HashSet(); final Set singleClassImports = new HashSet(); for (final PsiImportStatement importStatement : importStatements) { @@ -157,10 +146,8 @@ public class RedundantImportInspection extends BaseInspection { continue; } if (onDemandImports.contains(contextName) && - !ImportUtils.hasOnDemandImportConflict(qualifiedName, - javaFile) && - !ImportUtils.hasDefaultImportConflict(qualifiedName, - javaFile)) { + !ImportUtils.hasOnDemandImportConflict(qualifiedName, javaFile) && + !ImportUtils.hasDefaultImportConflict(qualifiedName, javaFile)) { registerError(importStatement); } singleClassImports.add(qualifiedName);