Skip to content
Merged
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
13 changes: 11 additions & 2 deletions api/src/main/java/net/neoforged/jst/api/PsiHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,18 @@ private static int getNonQualifiedClassIdx(@NotNull final PsiClass psiClass, @No
CachedValuesManager.getCachedValue(containingClass, () -> {
var map = new ObjectIntHashMap<PsiClass>();
int index = 0;
for (var aClass : SyntaxTraverser.psiTraverser().withRoot(containingClass).postOrderDfsTraversal().filter(PsiClass.class)) {
var traverser = SyntaxTraverser.psiTraverser()
.withRoot(containingClass)
// We only care about looking at the direct class children of the containing class
// Only traverse children of either the containing class as root node (which itself is a PsiClass), or anything that isn't
// a PsiClass; this skips traversal of the children of any nested PsiClass
.expand(c -> c == containingClass || !(c instanceof PsiClass))
.postOrderDfsTraversal()
.filter(PsiClass.class);
for (var aClass : traverser) {
// We're only interested in actual classes without qualified names (type parameters are an instance of PsiClass)
if (!(aClass instanceof PsiTypeParameter) && aClass.getQualifiedName() == null) {
// Avoid traversing the root node itself
if (aClass != containingClass && !(aClass instanceof PsiTypeParameter) && aClass.getQualifiedName() == null) {
map.put(aClass, ++index);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
public example.C$1 method()V
public example.C$1$1 method()V
public example.C$2 *()
public example.C$2$1 *()
public example.C$2$1$1 *()
public example.C$2$1$2 *()
Original file line number Diff line number Diff line change
@@ -1,15 +1,39 @@
package example;

public class C {
static C REGULAR = new C() {
static C REGULAR = new C() { // $1
@Override
public void method() {
new C() { // $1$1
@Override
public void method() { // $1$1 method()V
}
};
}
};

static C WILDCARD = new C() {
static C WILDCARD = new C() { // $2
@Override
public void method() {
new C() { // $2$1
@Override
public void method() {
new C() { // $2$1$1
@Override
public void method() {
}
};
}

@Override
public void method2() {
new C() { // $2$1$2
@Override
public void method2() {
}
};
}
};
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,39 @@
package example;

public class C {
static C REGULAR = new C() {
static C REGULAR = new C() { // $1
@Override
protected void method() {
new C() { // $1$1
@Override
protected void method() { // $1$1 method()V
}
};
}
};

static C WILDCARD = new C() {
static C WILDCARD = new C() { // $2
@Override
protected void method() {
new C() { // $2$1
@Override
protected void method() {
new C() { // $2$1$1
@Override
protected void method() {
}
};
}

@Override
protected void method2() {
new C() { // $2$1$2
@Override
protected void method2() {
}
};
}
};
}

@Override
Expand Down
Loading