9 * (the "License"); you may not use this file except in compliance with
10 * the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20 package com.sun.org.apache.bcel.internal.classfile;
21
22 import java.util.Stack;
23
24 /**
25 * Traverses a JavaClass with another Visitor object 'piggy-backed' that is
26 * applied to all components of a JavaClass object. I.e. this class supplies the
27 * traversal strategy, other classes can make use of it.
28 *
29 * @version $Id$
30 */
31 public class DescendingVisitor implements Visitor
32 {
33 private final JavaClass clazz;
34
35 private final Visitor visitor;
36
37 private final Stack<Object> stack = new Stack<>();
38
39 /**
40 * @return container of current entitity, i.e., predecessor during traversal
41 */
42 public Object predecessor()
43 {
44 return predecessor(0);
45 }
46
47 /**
48 * @param level
49 * nesting level, i.e., 0 returns the direct predecessor
486
487 /**
488 * @since 6.0
489 */
490 @Override
491 public void visitParameterAnnotation(final ParameterAnnotations obj)
492 {
493 stack.push(obj);
494 obj.accept(visitor);
495 stack.pop();
496 }
497
498 /**
499 * @since 6.0
500 */
501 @Override
502 public void visitMethodParameters(final MethodParameters obj)
503 {
504 stack.push(obj);
505 obj.accept(visitor);
506 stack.pop();
507 }
508
509 /** @since 6.0 */
510 @Override
511 public void visitConstantMethodType(final ConstantMethodType obj) {
512 stack.push(obj);
513 obj.accept(visitor);
514 stack.pop();
515 }
516
517 /** @since 6.0 */
518 @Override
519 public void visitConstantMethodHandle(final ConstantMethodHandle obj) {
520 stack.push(obj);
521 obj.accept(visitor);
522 stack.pop();
523 }
524
525 /** @since 6.0 */
532
533 /** @since 6.1 */
534 @Override
535 public void visitConstantPackage(final ConstantPackage obj) {
536 stack.push(obj);
537 obj.accept(visitor);
538 stack.pop();
539 }
540
541 /** @since 6.1 */
542 @Override
543 public void visitConstantModule(final ConstantModule obj) {
544 stack.push(obj);
545 obj.accept(visitor);
546 stack.pop();
547 }
548
549 /** @since 6.3 */
550 @Override
551 public void visitConstantDynamic(final ConstantDynamic obj) {
552 stack.push(obj);
553 obj.accept(visitor);
554 stack.pop();
555 }
556 }
|
9 * (the "License"); you may not use this file except in compliance with
10 * the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20 package com.sun.org.apache.bcel.internal.classfile;
21
22 import java.util.Stack;
23
24 /**
25 * Traverses a JavaClass with another Visitor object 'piggy-backed' that is
26 * applied to all components of a JavaClass object. I.e. this class supplies the
27 * traversal strategy, other classes can make use of it.
28 *
29 */
30 public class DescendingVisitor implements Visitor
31 {
32 private final JavaClass clazz;
33
34 private final Visitor visitor;
35
36 private final Stack<Object> stack = new Stack<>();
37
38 /**
39 * @return container of current entitity, i.e., predecessor during traversal
40 */
41 public Object predecessor()
42 {
43 return predecessor(0);
44 }
45
46 /**
47 * @param level
48 * nesting level, i.e., 0 returns the direct predecessor
485
486 /**
487 * @since 6.0
488 */
489 @Override
490 public void visitParameterAnnotation(final ParameterAnnotations obj)
491 {
492 stack.push(obj);
493 obj.accept(visitor);
494 stack.pop();
495 }
496
497 /**
498 * @since 6.0
499 */
500 @Override
501 public void visitMethodParameters(final MethodParameters obj)
502 {
503 stack.push(obj);
504 obj.accept(visitor);
505 final MethodParameter[] table = obj.getParameters();
506 for (final MethodParameter element : table) {
507 element.accept(this);
508 }
509 stack.pop();
510 }
511
512 /**
513 * @since 6.4.0
514 */
515 @Override
516 public void visitMethodParameter(final MethodParameter obj)
517 {
518 stack.push(obj);
519 obj.accept(visitor);
520 stack.pop();
521 }
522
523 /** @since 6.0 */
524 @Override
525 public void visitConstantMethodType(final ConstantMethodType obj) {
526 stack.push(obj);
527 obj.accept(visitor);
528 stack.pop();
529 }
530
531 /** @since 6.0 */
532 @Override
533 public void visitConstantMethodHandle(final ConstantMethodHandle obj) {
534 stack.push(obj);
535 obj.accept(visitor);
536 stack.pop();
537 }
538
539 /** @since 6.0 */
546
547 /** @since 6.1 */
548 @Override
549 public void visitConstantPackage(final ConstantPackage obj) {
550 stack.push(obj);
551 obj.accept(visitor);
552 stack.pop();
553 }
554
555 /** @since 6.1 */
556 @Override
557 public void visitConstantModule(final ConstantModule obj) {
558 stack.push(obj);
559 obj.accept(visitor);
560 stack.pop();
561 }
562
563 /** @since 6.3 */
564 @Override
565 public void visitConstantDynamic(final ConstantDynamic obj) {
566 stack.push(obj);
567 obj.accept(visitor);
568 stack.pop();
569 }
570
571 /** @since 6.4.0 */
572 @Override
573 public void visitModule(final Module obj) {
574 stack.push(obj);
575 obj.accept(visitor);
576 final ModuleRequires[] rtable = obj.getRequiresTable();
577 for (final ModuleRequires element : rtable) {
578 element.accept(this);
579 }
580 final ModuleExports[] etable = obj.getExportsTable();
581 for (final ModuleExports element : etable) {
582 element.accept(this);
583 }
584 final ModuleOpens[] otable = obj.getOpensTable();
585 for (final ModuleOpens element : otable) {
586 element.accept(this);
587 }
588 final ModuleProvides[] ptable = obj.getProvidesTable();
589 for (final ModuleProvides element : ptable) {
590 element.accept(this);
591 }
592 stack.pop();
593 }
594
595 /** @since 6.4.0 */
596 @Override
597 public void visitModuleRequires(final ModuleRequires obj) {
598 stack.push(obj);
599 obj.accept(visitor);
600 stack.pop();
601 }
602
603 /** @since 6.4.0 */
604 @Override
605 public void visitModuleExports(final ModuleExports obj) {
606 stack.push(obj);
607 obj.accept(visitor);
608 stack.pop();
609 }
610
611 /** @since 6.4.0 */
612 @Override
613 public void visitModuleOpens(final ModuleOpens obj) {
614 stack.push(obj);
615 obj.accept(visitor);
616 stack.pop();
617 }
618
619 /** @since 6.4.0 */
620 @Override
621 public void visitModuleProvides(final ModuleProvides obj) {
622 stack.push(obj);
623 obj.accept(visitor);
624 stack.pop();
625 }
626
627 /** @since 6.4.0 */
628 @Override
629 public void visitModulePackages(final ModulePackages obj) {
630 stack.push(obj);
631 obj.accept(visitor);
632 stack.pop();
633 }
634
635 /** @since 6.4.0 */
636 @Override
637 public void visitModuleMainClass(final ModuleMainClass obj) {
638 stack.push(obj);
639 obj.accept(visitor);
640 stack.pop();
641 }
642
643 /** @since 6.4.0 */
644 @Override
645 public void visitNestHost(final NestHost obj) {
646 stack.push(obj);
647 obj.accept(visitor);
648 stack.pop();
649 }
650
651 /** @since 6.4.0 */
652 @Override
653 public void visitNestMembers(final NestMembers obj) {
654 stack.push(obj);
655 obj.accept(visitor);
656 stack.pop();
657 }
658 }
|