@@ -389,7 +389,7 @@ public int totalMapsSize() {
389389 this .packages .size ();
390390 }
391391
392- public Collection <? extends Element > getAllVisibleThrough (ASTService ast , Elements elements , String what , ClassTree tree , ModuleElement modle ) {
392+ public Collection <? extends Element > getAllVisibleThrough (ASTService ast , Elements elements , String what , ClassTree tree , Element currentPackage , ModuleElement modle ) {
393393 Collection <Element > result = new ArrayList <Element >();
394394 Element current = what != null ? resolve (ast , elements , what , modle ) : null ;
395395
@@ -408,30 +408,50 @@ public Collection<? extends Element> getAllVisibleThrough(ASTService ast, Elemen
408408 }
409409 }
410410 } else {
411- result .addAll (getAllMembers (ast , elements , current ));
411+ result .addAll (getAllMembers (ast , elements , current , currentPackage , false ));
412412 }
413413
414414 return result ;
415415 }
416416
417- private Collection <? extends Element > getAllMembers (ASTService ast , Elements elements , Element el ) {
417+ private Collection <? extends Element > getAllMembers (ASTService ast , Elements elements , Element el , Element currentPackage , boolean inherited ) {
418418 List <Element > result = new ArrayList <Element >();
419419
420- result .addAll (el .getEnclosedElements ());
420+ el .getEnclosedElements ()
421+ .stream ()
422+ .filter (encl -> !inherited || //include all members from the current class
423+ encl .getModifiers ().contains (Modifier .PUBLIC ) || //public members are inherited
424+ encl .getModifiers ().contains (Modifier .PROTECTED ) || //protected memebers are inherited
425+ (!encl .getModifiers ().contains (Modifier .PRIVATE ) && //private member are never inherited
426+ resolvedPackageOf (ast , elements , encl ) == currentPackage )) //package-private members are inherited only inside the same package
427+ .forEach (result ::add );
421428
422429 for (Element parent : getAllSuperElements (ast , elements , el )) {
423430 if (!el .equals (parent )) {
424- result .addAll (getAllMembers (ast , elements , parent ));
431+ result .addAll (getAllMembers (ast , elements , parent , currentPackage , true ));
425432 }
426433 }
427434
428435 return result ;
429436 }
430437
438+ private Element resolvedPackageOf (ASTService ast , Elements elements , Element el ) {
439+ ModuleElement modle = moduleOf (elements , el );
440+ PackageElement pack = packageOf (el );
441+
442+ return resolve (ast , elements , pack .getQualifiedName ().toString (), modle );
443+ }
444+
431445 public PackageElement unnamedPackage (ASTService ast , Elements elements , ModuleElement modle ) {
432446 return (PackageElement ) resolve (ast , elements , "" , modle );
433447 }
434448
449+ public PackageElement packageOf (Element el ) {
450+ while ((el != null ) && (el .getKind () != ElementKind .PACKAGE )) el = el .getEnclosingElement ();
451+
452+ return (PackageElement ) el ;
453+ }
454+
435455 public ModuleElement moduleOf (Elements elements , Element el ) {
436456 if (el instanceof TypeElementWrapper )
437457 return moduleOf (elements , ((TypeElementWrapper ) el ).delegateTo );
0 commit comments