mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
Java: don't expose implementation detail in API
(cherry picked from commit 952d1b3c68f9a011ad7826cc8a1075f2ef990e6d) GitOrigin-RevId: 87445fc4969225a3a03befab8a5ce5640283cc53
This commit is contained in:
committed by
intellij-monorepo-bot
parent
340fe61f67
commit
b21fd06310
@@ -66,7 +66,7 @@ public final class ImportUtils {
|
||||
if (containingPackageName.equals(packageName) || importList.findSingleClassImportStatement(qualifiedName) != null) {
|
||||
return;
|
||||
}
|
||||
if ((createImplicitImportChecker(javaFile).isImplicitlyImported(new Import(qualifiedName, false)) ||
|
||||
if ((createImplicitImportChecker(javaFile).isImplicitlyImported(qualifiedName, false) ||
|
||||
importList.findOnDemandImportStatement(packageName) != null ||
|
||||
ContainerUtil.exists(importList.getImportModuleStatements(),
|
||||
moduleStatement -> moduleStatement.findImportedPackage(packageName) != null))
|
||||
@@ -549,7 +549,7 @@ public final class ImportUtils {
|
||||
}
|
||||
|
||||
private static boolean hasImplicitStaticImport(@NotNull PsiJavaFile file, @NotNull String name) {
|
||||
return createImplicitImportChecker(file).isImplicitlyImported(new Import(name, true));
|
||||
return createImplicitImportChecker(file).isImplicitlyImported(name, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -591,10 +591,10 @@ public final class ImportUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isImplicitlyImported(@NotNull Import name) {
|
||||
String packageOrClassName = getPackageOrClassName(name.name);
|
||||
String className = ClassUtil.extractClassName(name.name);
|
||||
if (!name.isStatic) {
|
||||
public boolean isImplicitlyImported(String qName, boolean isStatic) {
|
||||
String packageOrClassName = getPackageOrClassName(qName);
|
||||
String className = ClassUtil.extractClassName(qName);
|
||||
if (!isStatic) {
|
||||
for (PsiImportModuleStatement psiImportModuleStatement : myModulesStatements) {
|
||||
PsiPackageAccessibilityStatement importedPackage = psiImportModuleStatement.findImportedPackage(packageOrClassName);
|
||||
if (importedPackage == null) continue;
|
||||
@@ -614,7 +614,7 @@ public final class ImportUtils {
|
||||
PsiJavaCodeReferenceElement reference = psiImportStaticStatement.getImportReference();
|
||||
if (reference == null) return false;
|
||||
String qualifiedName = reference.getQualifiedName();
|
||||
return name.name.equals(qualifiedName);
|
||||
return qName.equals(qualifiedName);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -237,7 +237,7 @@ public abstract class ImportClassFixBase<T extends PsiElement, R extends PsiRefe
|
||||
String packageName = StringUtil.getPackageName(qualifiedName);
|
||||
if (!packageName.isEmpty() &&
|
||||
file instanceof PsiJavaFile javaFile &&
|
||||
!ImportUtils.createImplicitImportChecker(javaFile).isImplicitlyImported(new ImportUtils.Import(qualifiedName, false))) {
|
||||
!ImportUtils.createImplicitImportChecker(javaFile).isImplicitlyImported(qualifiedName, false)) {
|
||||
classList.removeIf(aClass -> {
|
||||
String classQualifiedName = aClass.getQualifiedName();
|
||||
return classQualifiedName != null && !packageName.equals(StringUtil.getPackageName(classQualifiedName));
|
||||
|
||||
@@ -150,8 +150,7 @@ public final class AddOnDemandStaticImportAction extends PsiUpdateModCommandActi
|
||||
}
|
||||
boolean alreadyImported = false;
|
||||
String qualifiedName = aClass.getQualifiedName();
|
||||
if (qualifiedName != null &&
|
||||
ImportUtils.createImplicitImportChecker(psiJavaFile).isImplicitlyImported(new ImportUtils.Import(qualifiedName + ".*", true))) {
|
||||
if (qualifiedName != null && ImportUtils.createImplicitImportChecker(psiJavaFile).isImplicitlyImported(qualifiedName + ".*", true)) {
|
||||
alreadyImported = true;
|
||||
}
|
||||
if (!alreadyImported) {
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.siyeh.ig.psiutils.ImportUtils;
|
||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -212,7 +213,7 @@ public final class ImportHelper{
|
||||
String name = anImport.name();
|
||||
String prefix = getPackageOrClassName(name);
|
||||
if (prefix.isEmpty()) continue;
|
||||
boolean isImplicitlyImported = checker.isImplicitlyImported(anImport);
|
||||
boolean isImplicitlyImported = checker.isImplicitlyImported(name, anImport.isStatic());
|
||||
if (!onDemandImports.contains(prefix) && !isImplicitlyImported) continue;
|
||||
String shortName = PsiNameHelper.getShortClassName(name);
|
||||
|
||||
@@ -387,7 +388,7 @@ public final class ImportHelper{
|
||||
String name = importedName.name();
|
||||
boolean isStatic = importedName.isStatic();
|
||||
String packageOrClassName = getPackageOrClassName(name);
|
||||
boolean implicitlyImported = implicitImportContext.isImplicitlyImported(importedName);
|
||||
boolean implicitlyImported = implicitImportContext.isImplicitlyImported(name, isStatic);
|
||||
boolean useOnDemand = implicitlyImported || packagesOrClassesToImportOnDemand.contains(packageOrClassName);
|
||||
Import current = new Import(packageOrClassName, isStatic);
|
||||
if (namesToUseSingle.remove(name)) {
|
||||
@@ -1069,21 +1070,30 @@ public final class ImportHelper{
|
||||
if (psiClass == null) return false;
|
||||
String qualifiedName = psiClass.getQualifiedName();
|
||||
if (qualifiedName == null) return false;
|
||||
ImplicitImportChecker checker = createImplicitImportChecker(file);
|
||||
return checker.isImplicitlyImported(new Import(qualifiedName, psiClass.hasModifierProperty(PsiModifier.STATIC)));
|
||||
return createImplicitImportChecker(file).isImplicitlyImported(qualifiedName, psiClass.hasModifierProperty(PsiModifier.STATIC));
|
||||
}
|
||||
|
||||
private static boolean isImplicitlyImported(@Nullable PsiClass psiClass, @NotNull ImplicitImportChecker checker) {
|
||||
if (psiClass == null) return false;
|
||||
String qualifiedName = psiClass.getQualifiedName();
|
||||
if (qualifiedName == null) return false;
|
||||
return checker.isImplicitlyImported(new Import(qualifiedName, psiClass.hasModifierProperty(PsiModifier.STATIC)));
|
||||
return checker.isImplicitlyImported(qualifiedName, psiClass.hasModifierProperty(PsiModifier.STATIC));
|
||||
}
|
||||
|
||||
static boolean hasPackage(@NotNull String className, @NotNull String packageName){
|
||||
static boolean hasPackage(@NotNull String className, @NotNull String packageName) {
|
||||
if (!className.startsWith(packageName)) return false;
|
||||
if (className.length() == packageName.length()) return false;
|
||||
if (!packageName.isEmpty() && className.charAt(packageName.length()) != '.') return false;
|
||||
return className.indexOf('.', packageName.length() + 1) < 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* An imported element, e.g. a fully qualified class name.
|
||||
* This is an implementation detail, unfortunately public because of JavaFX, don't expose it in public API.
|
||||
*
|
||||
* @param name the fully qualified name of the element that should be imported.
|
||||
* @param isStatic whether it should be imported statically.
|
||||
*/
|
||||
@ApiStatus.Internal
|
||||
public record Import(@NotNull String name, boolean isStatic) {}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.plugins.javaFX.fxml.codeInsight;
|
||||
|
||||
import com.intellij.ide.highlighter.XmlFileType;
|
||||
@@ -17,7 +17,6 @@ import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.xml.*;
|
||||
import com.intellij.xml.XmlAttributeDescriptor;
|
||||
import com.intellij.xml.XmlElementDescriptor;
|
||||
import com.siyeh.ig.psiutils.ImportUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.javaFX.fxml.JavaFxFileTypeFactory;
|
||||
@@ -43,12 +42,12 @@ public final class JavaFxImportsOptimizer implements ImportOptimizer {
|
||||
if (vFile == null || !ProjectRootManager.getInstance(project).getFileIndex().isInSourceContent(vFile)) {
|
||||
return EmptyRunnable.INSTANCE;
|
||||
}
|
||||
final @NotNull List<ImportUtils.Import> names = new ArrayList<>();
|
||||
final @NotNull List<ImportHelper.Import> names = new ArrayList<>();
|
||||
final Set<String> demandedForNested = new HashSet<>();
|
||||
collectNamesToImport(names, demandedForNested, (XmlFile)file);
|
||||
names.sort((o1, o2) -> StringUtil.compare(o1.name(), o2.name(), true));
|
||||
final JavaCodeStyleSettings settings = JavaCodeStyleSettings.getInstance(file);
|
||||
final @NotNull List<ImportUtils.Import> sortedNames = ImportHelper.sortItemsAccordingToSettings(names, settings);
|
||||
final @NotNull List<ImportHelper.Import> sortedNames = ImportHelper.sortItemsAccordingToSettings(names, settings);
|
||||
final Map<String, Boolean> onDemand = new HashMap<>();
|
||||
ImportHelper.collectOnDemandImports(sortedNames, settings, onDemand);
|
||||
for (String s : demandedForNested) {
|
||||
@@ -56,7 +55,7 @@ public final class JavaFxImportsOptimizer implements ImportOptimizer {
|
||||
}
|
||||
final Set<String> imported = new HashSet<>();
|
||||
final List<String> imports = new ArrayList<>();
|
||||
for (ImportUtils.Import anImport : sortedNames) {
|
||||
for (ImportHelper.Import anImport : sortedNames) {
|
||||
final String qName = anImport.name();
|
||||
final String packageName = StringUtil.getPackageName(qName);
|
||||
if (imported.contains(packageName) || imported.contains(qName)) {
|
||||
@@ -95,13 +94,13 @@ public final class JavaFxImportsOptimizer implements ImportOptimizer {
|
||||
};
|
||||
}
|
||||
|
||||
private static void collectNamesToImport(final @NotNull List<ImportUtils.Import> names,
|
||||
private static void collectNamesToImport(final @NotNull List<ImportHelper.Import> names,
|
||||
final @NotNull Collection<String> demandedForNested,
|
||||
@NotNull XmlFile file) {
|
||||
file.accept(new JavaFxUsedClassesVisitor() {
|
||||
@Override
|
||||
protected void appendClassName(String fqn) {
|
||||
names.add(new ImportUtils.Import(fqn, false));
|
||||
names.add(new ImportHelper.Import(fqn, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user