Προδιαγραφές στόχευσης διερευνητών

Η προδιαγραφή στόχευσης δηλώνει τις κλάσεις και τις μεθόδους στις οποίες θα πρέπει να εφαρμόζεται ο διερευνητής.

Η προδιαγραφή στόχευσης είναι προαιρετική. Όταν δεν προσδιορίζεται ο στόχος, ο διερευνητής θα εφαρμόζεται σε όλες τις κλάσεις τις οποίες επεξεργάζεται ο μηχανισμός ενοργάνωσης.

Η προδιαγραφή στόχευσης σας επιτρέπει να δημιουργείτε κανόνες φίλτρων για τη συμπερίληψη ή την εξαίρεση μεθόδων από την ενοργάνωση, με βάση τα μοτίβα που συμφωνούν με τα κριτήρια του ονόματος πακέτου, κλάσης και μεθόδου, καθώς και με βάση την υπογραφή της μεθόδου. Τα μοτίβα μπορούν να περιέχουν χαρακτήρες υποκατάστασης, όπου το "*" δηλώνει απουσία κάποιου χαρακτήρα ή ύπαρξη συνόλου χαρακτήρων.

Εάν τα μοτίβα χαρακτήρων υποκατάστασης του στόχου συμφωνούν με τα κριτήρια πακέτου, κλάσης, ονόματος και υπογραφής μιας μεθόδου, η ιδιότητα type προσδιορίζει εάν η μέθοδος ενοργανώνεται (include) ή όχι (exclude). Εάν τα μοτίβα δεν συμφωνούν με τα κριτήρια πακέτου, κλάσης, ονόματος και υπογραφής μιας μεθόδου, τότε ως προεπιλογή, η μέθοδος ενοργανώνεται.

Για το στόχο ισχύουν οι ακόλουθες ιδιότητες:
Ιδιότητα Περιγραφή
type Υποχρεωτική. Η ιδιότητα type προσδιορίζει το εάν ένας διερευνητής εφαρμόζεται σε μια μέθοδο στόχο ή όχι. Προσδιορίστε την επιλογή include για την εφαρμογή του διερευνητή σε κλάσεις και μεθόδους που συμφωνούν με τα κριτήρια των μοτίβων χαρακτήρων υποκατάστασης και την επιλογή exclude για την εξαίρεσή τους.
package Προαιρετική. Προσδιορίζει ένα μοτίβο χαρακτήρων υποκατάστασης που συμφωνεί με τα κριτήρια του τμήματος πακέτου των ονομάτων κλάσεων. Για παράδειγμα: Το java.util* συμφωνεί με τα κριτήρια όλων των κλάσεων που περιέχονται στο πακέτο java.util και στα υπο-πακέτα του. Εάν δεν προσδιορίζεται, η προεπιλεγμένη τιμή είναι *.
className Προαιρετική. Προσδιορίζει ένα μοτίβο χαρακτήρων υποκατάστασης που συμφωνεί με τα κριτήρια των ονομάτων κλάσεων. Εάν δεν προσδιορίζεται, η προεπιλεγμένη τιμή είναι *.
method Προαιρετική. Προσδιορίζει ένα μοτίβο χαρακτήρων υποκατάστασης που συμφωνεί με τα κριτήρια των ονομάτων μεθόδων. Εάν δεν προσδιορίζεται, η προεπιλεγμένη τιμή είναι *.
signature Προαιρετική. Προσδιορίζει ένα μοτίβο χαρακτήρων υποκατάστασης που συμφωνεί με τα κριτήρια μιας υπογραφής μεθόδου. (Η υπογραφή είναι η σειρά χαρακτήρων που αναπαριστά τα ορίσματα μεθόδου και το είδος επιστροφής.) Χρησιμοποιήστε την εσωτερική μορφή Java για υπογραφές μεθόδων. Για παράδειγμα: (Ljava/lang/Object;)D είναι η υπογραφή μιας μεθόδου που λαμβάνει ένα αντικείμενο ως παράμετρο και επιστρέφει έναν αριθμό διπλής ακρίβειας. Αυτό το μοτίβο χαρακτήρων υποκατάστασης μπορεί να χρησιμοποιηθεί για τη διάκριση μεταξύ των υπερφορτωμένων μεθόδων. Εάν δεν προσδιορίζεται, η προεπιλεγμένη τιμή είναι *.

Σημειώσεις:

  • Σε έναν διερευνητή μπορούν να υπάρχουν περισσότερες από μία προδιαγραφές στόχευσης, στις οποίες περιέχονται διαδοχικοί κανόνες στόχευσης. Για την εφαρμογή ενός διερευνητή μόνο σε ορισμένες μεθόδους, πρέπει πρώτα να προσδιορίσετε τις μεθόδους που θέλετε να συμπεριλάβετε και έπειτα να προσθέσετε μια προδιαγραφή για τον τελικό στόχο package=* className=* method=* signature=* type=exclude.
  • Τα ονόματα πακέτων και κλάσεων που προσδιορίζετε ελέγχονται επίσης σε σύγκριση με τα ονόματα πακέτων και κλάσεων όλων των διεπαφών τις οποίες υλοποιεί μια κλάση. Για παράδειγμα, η κλάση java.util.HashMap υλοποιεί τη διεπαφή java.util.Map. Εάν ο στόχος του διερευνητή είναι το πακέτο java.util, το όνομα κλάσης Map και το όνομα μεθόδου size, ο διερευνητής θα εφαρμόζεται στη μέθοδο java.util.HashMap.size() και στη μέθοδο size οποιασδήποτε άλλης κλάσης η οποία υλοποιεί τη διεπαφή Map.
  • Η συμφωνία των μοτίβων δεν λαμβάνει υπόψη σχέσεις μεταβίβασης. Εάν η κλάση Derived επεκτείνει την κλάση Base και ο στόχος του διερευνητή είναι η μέθοδος Base.run(), ο διερευνητής δεν θα εφαρμόζεται αυτόματα στη μέθοδο Derived.run().
  • Εάν το μοτίβο πακέτου σε μια προδιαγραφή στόχευσης είναι μία τελεία (.), τότε αναπαριστά το καθολικό, μη ονομασμένο πακέτο Java. Έτσι έχετε τη δυνατότητα να θέσετε ως στόχο κλάσεις από το καθολικό πακέτο.
  • Οι διερευνητές σημείων κλήσης συμφωνούν με τα κριτήρια των μοτίβων και των κανόνων στόχευσης για το πακέτο, την κλάση, το όνομα και την υπογραφή μιας καλούμενης μεθόδου. Η συμφωνία πραγματοποιείται με την καλούμενη μέθοδο, όπως αυτή ήταν γνωστή κατά τη μεταγλώττιση, δηλαδή με τα στατικά γνωστά ονόματα κλάσεων και μεθόδων και όχι με τις πραγματικές μεθόδους οι οποίες θα κληθούν λόγω συναρτήσεων μεταβίβασης και εικονικών συναρτήσεων. Εάν η κλήση πραγματοποιηθεί μέσω παραπομπής σε διεπαφή, το όνομα της διεπαφής είναι αυτό που πρέπει να συμφωνεί.
Παράδειγμα:

Για να προσδιορίσετε ένα στόχο, επιλέξτε Στόχος στο τμήμα παραθύρου διακλάδωσης της σελίδας "Διερευνητές" και πατήστε Προσθήκη και στη συνέχεια Τροποποίηση στο τμήμα παραθύρου τροποποίησης.

Το παράδειγμα αυτό εφαρμόζει τον διερευνητή μόνο σε μεθόδους των οποίων τα ονόματα ξεκινούν με Get και περιέχονται σε κλάσεις των οποίων τα ονόματα τελειώνουν σε Proxy εντός του πακέτου com.example. αταχωρήσεις στόχου είδους include και exclude. Η καταχώρηση στόχου exclude χρησιμοποιεί αστερίσκους ως χαρακτήρες υποκατάστασης για την εξαίρεση όλων των μεθόδων. Η καταχώρηση include προσδιορίζει επακριβώς τις μεθόδους στις οποίες στοχεύει ο διερευνητής. Όλες οι άλλες κλάσεις και οι μέθοδοι εξαιρούνται από την ενοργάνωση.