Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ public void classEntered(ClassTree clazz, boolean isAnonymous) {

public void enterVisibleThroughClasses(ClassTree clazz) {
Set<Element> visible = visibleThroughClasses.getFirst();
visible.addAll(overlay.getAllVisibleThrough(model, elements, currentFQN.getFQN(), clazz, modle));
visible.addAll(overlay.getAllVisibleThrough(model, elements, currentFQN.getFQN(), clazz, pack, modle));
}

public void classLeft() {
Expand Down Expand Up @@ -367,7 +367,7 @@ public ExpressionTree resolveImport(MemberSelectTree orig, final Element element
return make.Identifier(element.getSimpleName());
}

if (getPackageOf(element) != null && getPackageOf(element).isUnnamed()) {
if (overlay.getPackageOf(element) != null && overlay.getPackageOf(element).isUnnamed()) {
if (orig.getExpression().getKind() == Kind.MEMBER_SELECT) {
return make.MemberSelect(resolveImport((MemberSelectTree) orig.getExpression(), element.getEnclosingElement()),
element.getSimpleName());
Expand Down Expand Up @@ -452,12 +452,6 @@ private boolean checkPackagesForStarImport(String pkgName, CodeStyle cs) {
return false;
}

private PackageElement getPackageOf(Element el) {
while ((el != null) && (el.getKind() != ElementKind.PACKAGE)) el = el.getEnclosingElement();

return (PackageElement) el;
}

private Map<String, Element> getUsedImplicitlyImportedClasses() {
if (usedImplicitlyImportedClassesCache != null) {
return usedImplicitlyImportedClassesCache;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ public int totalMapsSize() {
this.packages.size();
}

public Collection<? extends Element> getAllVisibleThrough(ASTService ast, Elements elements, String what, ClassTree tree, ModuleElement modle) {
public Collection<? extends Element> getAllVisibleThrough(ASTService ast, Elements elements, String what, ClassTree tree, Element currentPackage, ModuleElement modle) {
Collection<Element> result = new ArrayList<Element>();
Element current = what != null ? resolve(ast, elements, what, modle) : null;

Expand All @@ -408,30 +408,50 @@ public Collection<? extends Element> getAllVisibleThrough(ASTService ast, Elemen
}
}
} else {
result.addAll(getAllMembers(ast, elements, current));
result.addAll(getAllMembers(ast, elements, current, currentPackage, false));
}

return result;
}

private Collection<? extends Element> getAllMembers(ASTService ast, Elements elements, Element el) {
private Collection<? extends Element> getAllMembers(ASTService ast, Elements elements, Element el, Element currentPackage, boolean inherited) {
List<Element> result = new ArrayList<Element>();

result.addAll(el.getEnclosedElements());
el.getEnclosedElements()
.stream()
.filter(encl -> !inherited || //include all members from the current class
encl.getModifiers().contains(Modifier.PUBLIC) || //public members are inherited
encl.getModifiers().contains(Modifier.PROTECTED) || //protected memebers are inherited
(!encl.getModifiers().contains(Modifier.PRIVATE) && //private member are never inherited
resolvedPackageOf(ast, elements, encl) == currentPackage)) //package-private members are inherited only inside the same package
.forEach(result::add);

for (Element parent : getAllSuperElements(ast, elements, el)) {
if (!el.equals(parent)) {
result.addAll(getAllMembers(ast, elements, parent));
result.addAll(getAllMembers(ast, elements, parent, currentPackage, true));
}
}

return result;
}

private Element resolvedPackageOf(ASTService ast, Elements elements, Element el) {
ModuleElement modle = moduleOf(elements, el);
PackageElement pack = getPackageOf(el);

return resolve(ast, elements, pack.getQualifiedName().toString(), modle);
}

public PackageElement unnamedPackage(ASTService ast, Elements elements, ModuleElement modle) {
return (PackageElement) resolve(ast, elements, "", modle);
}

public PackageElement getPackageOf(Element el) {
while ((el != null) && (el.getKind() != ElementKind.PACKAGE)) el = el.getEnclosingElement();

return (PackageElement) el;
}

private ModuleElement moduleOf(Elements elements, Element el) {
if (el instanceof TypeElementWrapper)
return moduleOf(elements, ((TypeElementWrapper) el).delegateTo);
Expand Down
Loading
Loading