From 7583c717cb6cc6e7f349b0468e2b8a70a4021a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Sat, 21 Jun 2025 08:01:43 +0200 Subject: [PATCH] Do not consider package private references in calculate uses Currently only private references are ignored, but in OSGi you can not use a package you export (as in this case either the import or the export is discarded via substitution) making package private types also not accessible except for fragments that share the same classloader anyways. Because of this also package private members has to be ignored when calculating uses. --- .../dependencies/CalculateUsesOperation.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dependencies/CalculateUsesOperation.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dependencies/CalculateUsesOperation.java index 7abf908484a..8e0a3458cf8 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dependencies/CalculateUsesOperation.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dependencies/CalculateUsesOperation.java @@ -31,6 +31,7 @@ import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IMember; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; @@ -131,8 +132,8 @@ protected void findReferences(IType type, Set pkgs, boolean binary, IPro if (type == null) { return; } - // ignore private classes - if (Flags.isPrivate(type.getFlags())) { + // ignore (package) private classes + if (isBundlePrivateMember(type)) { return; } @@ -142,7 +143,7 @@ protected void findReferences(IType type, Set pkgs, boolean binary, IPro SubMonitor subMonitor = SubMonitor.convert(monitor, methods.length * 3 + fields.length + 2 + subTypes.length); for (int i = 0; i < methods.length; i++) { - if (!Flags.isPrivate(methods[i].getFlags())) { + if (!isBundlePrivateMember(methods[i])) { String methodSignature = methods[i].getSignature(); addPackages(Signature.getThrownExceptionTypes(methodSignature), pkgs, type, binary, subMonitor.split(1)); @@ -151,7 +152,7 @@ protected void findReferences(IType type, Set pkgs, boolean binary, IPro } } for (int i = 0; i < fields.length; i++) { - if (!Flags.isPrivate(fields[i].getFlags())) { + if (!isBundlePrivateMember(fields[i])) { addPackage(fields[i].getTypeSignature(), pkgs, type, binary, subMonitor.split(1)); } } @@ -164,6 +165,11 @@ protected void findReferences(IType type, Set pkgs, boolean binary, IPro } } + private static boolean isBundlePrivateMember(IMember type) throws JavaModelException { + int flags = type.getFlags(); + return Flags.isPrivate(flags) || Flags.isPackageDefault(type.getFlags()); + } + protected final void addPackage(String typeSignature, Set pkgs, IType type, boolean binary, IProgressMonitor monitor) throws JavaModelException { if (typeSignature == null) {