44 */
55package net .minecraftforge .eventbus .validator ;
66
7- import com .sun .source .tree .VariableTree ;
8- import com .sun .source .util .TreePathScanner ;
9- import com .sun .source .util .Trees ;
10-
117import javax .annotation .processing .ProcessingEnvironment ;
128import javax .annotation .processing .RoundEnvironment ;
139import javax .lang .model .element .Element ;
1713import javax .lang .model .type .DeclaredType ;
1814import javax .lang .model .type .TypeMirror ;
1915import javax .lang .model .util .Types ;
16+
2017import java .util .Set ;
2118
2219public final class EventBusValidator extends AbstractValidator {
23- private Trees trees ;
2420 private Types types ;
2521
2622 @ Override
2723 public void init (ProcessingEnvironment processingEnv ) {
2824 super .init (processingEnv );
29- trees = Trees .instance (processingEnv );
3025 types = processingEnv .getTypeUtils ();
3126 }
3227
3328 @ Override
3429 public boolean process (Set <? extends TypeElement > annotations , RoundEnvironment roundEnv ) {
3530 for (var root : roundEnv .getRootElements ()) {
36- var path = trees .getPath (root );
37- if (path != null ) new BusFieldScanner ().scan (path , null );
31+ process (root );
3832 }
3933
4034 return false ; // allow other processors to run
4135 }
4236
43- private final class BusFieldScanner extends TreePathScanner <Void , Void > {
44- @ Override
45- public Void visitVariable (VariableTree varTree , Void ignored ) {
46- Element element = trees .getElement (getCurrentPath ());
47- if (element .getKind () != ElementKind .FIELD )
48- return super .visitVariable (varTree , ignored ); // only interested in fields
49-
37+ private void process (Element element ) {
38+ if (element .getKind () == ElementKind .FIELD ) {
5039 TypeMirror erasedFieldType = types .erasure (element .asType ());
5140 var isStandardEventBus = types .isSameType (erasedFieldType , BusTypes .eventBus );
5241 if (!(isStandardEventBus || types .isSameType (erasedFieldType , BusTypes .cancellableEventBus )))
53- return super . visitVariable ( varTree , ignored ) ; // only interested in (Cancellable)EventBus fields
42+ return ; // only interested in (Cancellable)EventBus fields
5443
5544 // Show a warning if the bus field is not final
5645 if (!element .getModifiers ().contains (Modifier .FINAL )) {
@@ -73,8 +62,11 @@ public Void visitVariable(VariableTree varTree, Void ignored) {
7362 );
7463 }
7564 }
65+ }
66+
7667
77- return super .visitVariable (varTree , ignored );
68+ for (var child : element .getEnclosedElements ()) {
69+ process (child );
7870 }
7971 }
8072}
0 commit comments