private static PsiImportStatementBase extractImport( final PsiJavaFile aFile, final boolean isStatic) { final PsiImportList importList = aFile.getImportList(); assert importList != null : aFile; final PsiImportStatementBase[] statements = isStatic ? importList.getImportStaticStatements() : importList.getImportStatements(); assert statements.length == 1 : aFile.getText(); return statements[0]; }
/** * @param strict if strict is true this method checks if the conflicting class which is imported * is actually used in the file. If it isn't the on demand import can be overridden with an * exact import for the fqName without breaking stuff. */ private static boolean hasOnDemandImportConflict( @NotNull String fqName, @NotNull PsiJavaFile file, boolean strict) { final PsiImportList imports = file.getImportList(); if (imports == null) { return false; } final PsiImportStatement[] importStatements = imports.getImportStatements(); final String shortName = ClassUtil.extractClassName(fqName); final String packageName = ClassUtil.extractPackageName(fqName); for (final PsiImportStatement importStatement : importStatements) { if (!importStatement.isOnDemand()) { continue; } final PsiJavaCodeReferenceElement importReference = importStatement.getImportReference(); if (importReference == null) { continue; } final String packageText = importReference.getText(); if (packageText.equals(packageName)) { continue; } final PsiElement element = importReference.resolve(); if (element == null || !(element instanceof PsiPackage)) { continue; } final PsiPackage aPackage = (PsiPackage) element; final PsiClass[] classes = aPackage.getClasses(); for (final PsiClass aClass : classes) { final String className = aClass.getName(); if (!shortName.equals(className)) { continue; } if (!strict) { return true; } final String qualifiedClassName = aClass.getQualifiedName(); if (qualifiedClassName == null || fqName.equals(qualifiedClassName)) { continue; } return containsReferenceToConflictingClass(file, qualifiedClassName); } } return hasJavaLangImportConflict(fqName, file); }
private void doTestStaticImports(final PsiJavaFile javaFile, boolean okToLoadTree) { final PsiImportList importList = javaFile.getImportList(); final PsiImportStatementBase[] allImportStatements = importList.getAllImportStatements(); assertEquals(6, allImportStatements.length); final PsiImportStatement[] importStatements = importList.getImportStatements(); assertEquals(2, importStatements.length); final PsiImportStaticStatement[] importStaticStatements = importList.getImportStaticStatements(); assertEquals(4, importStaticStatements.length); assertFalse(importStatements[0].isOnDemand()); assertTrue(importStaticStatements[0].isOnDemand()); assertFalse(importStatements[0].isOnDemand()); assertTrue(importStaticStatements[1].isOnDemand()); assertFalse(importStaticStatements[2].isOnDemand()); assertFalse(importStaticStatements[3].isOnDemand()); assertEquals("sort", importStaticStatements[2].getReferenceName()); assertEquals("sort", importStaticStatements[3].getReferenceName()); final PsiImportStaticStatement classReference1 = importStaticStatements[1]; final PsiElement element1 = classReference1.resolveTargetClass(); assertNotNull(element1); assertTrue(element1 instanceof PsiClass); assertEquals("java.util.Arrays", ((PsiClass) element1).getQualifiedName()); final PsiImportStaticStatement classReference3 = importStaticStatements[3]; final PsiElement element3 = classReference3.resolveTargetClass(); assertNotNull(element3); assertTrue(element3 instanceof PsiClass); assertEquals("java.util.Arrays", ((PsiClass) element3).getQualifiedName()); if (okToLoadTree) { assertEquals( "java.util.Collections", importStaticStatements[0].getImportReference().getText()); assertEquals("java.util.Arrays", importStaticStatements[1].getImportReference().getText()); assertEquals( "java.util.Collections.sort", importStaticStatements[2].getImportReference().getText()); assertEquals( "java.util.Arrays.sort", importStaticStatements[3].getImportReference().getText()); } }
private static boolean hasExactImportConflict(String fqName, PsiJavaFile file) { final PsiImportList imports = file.getImportList(); if (imports == null) { return false; } final PsiImportStatement[] importStatements = imports.getImportStatements(); final int lastDotIndex = fqName.lastIndexOf((int) '.'); final String shortName = fqName.substring(lastDotIndex + 1); final String dottedShortName = '.' + shortName; for (final PsiImportStatement importStatement : importStatements) { if (importStatement.isOnDemand()) { continue; } final String importName = importStatement.getQualifiedName(); if (importName == null) { return false; } if (!importName.equals(fqName) && importName.endsWith(dottedShortName)) { return true; } } return false; }