Εκτέλεση αυτόματης συμπλήρωσης κώδικα σε κώδικα Java

Το API του JDT επιτρέπει σε άλλες πρόσθετες λειτουργίες να εκτελούν αυτόματη συμπλήρωση κώδικα ή επιλογή κώδικα σε ορισμένα στοιχεία Java. Τα στοιχεία τα οποία επιτρέπουν το χειρισμό αυτό θα πρέπει να υλοποιούν τη διεπαφή ICodeAssist.

Υπάρχουν δύο είδη χειρισμού:

Στο μοντέλο Java υπάρχουν δύο στοιχεία τα οποία υλοποιούν τη διεπαφή: IClassFile και ICompilationUnit.  Η συμπλήρωση κώδικα και η επιλογή κώδικα δίνουν αποτελέσματα μόνο για ένα αρχείο κλάσης, αν διαθέτει προσαρτημένο πρωτογενή κώδικα.

Συμπλήρωση κώδικα

Εκτέλεση συμπλήρωσης κώδικα

Ένας τρόπος για την εκτέλεση μέσω προγραμματισμού της συμπλήρωσης κώδικα είναι η κλήση της μεθόδου ICodeAssist.codeComplete. Πρέπει να ορίσετε την απόσταση της μονάδας μεταγλώττισης μετά από την οποία θέλετε να γίνει η συμπλήρωση κώδικα.  Πρέπει επίσης να ορίσετε μια χρήση της κλάσης CompletionRequestor για την αποδοχή των πιθανών συμπληρώσεων.

Η μέθοδος στη CompletionRequestor.accept αποδέχεται όλα τα είδη των προτάσεων για τη συμπλήρωση κώδικα.   Η μέθοδος της κλάσης CompletionProposal παρέχει πληροφορίες σχετικά με το προτεινόμενο στοιχείο (όνομα, δηλωμένο είδος κ.λπ.), την προτεινόμενη θέση για την εισαγωγή του στη μονάδα μεταγλώττισης και τη συνάφειά του.   

Μια διεπαφή αιτήσεων συμπλήρωσης μπορεί να δεχτεί διάφορα είδη συμπλήρωσης. Το είδος συμπλήρωσης παρέχεται από τη μέθοδο CompletionProposal.getKind.

Μερικά από τα πιθανά είδη συμπλήρωσης παρουσιάζονται στην ακόλουθη λίστα. Για την πλήρη λίστα των πιθανών ειδών συμπλήρωσης, ανατρέξτε στην περιγραφή της κλάσης CompletionProposal.

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

Συνάφεια συμπλήρωσης

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

Επιλογές συμπλήρωσης κώδικα

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

Πρόσθετες επιλογές σας επιτρέπουν να προσδιορίζετε προθήματα και επιθήματα για τα προτεινόμενα ονόματα συμπληρώσεων για πεδία, στατικά πεδία, τοπικές μεταβλητές και ορίσματα μεθόδων.  

Δείτε την ενότητα  Επιλογές αυτόματης συμπλήρωσης κώδικα πυρήνα JDT για περισσότερες πληροφορίες σχετικά με τις επιλογές αυτόματης συμπλήρωσης κώδικα και τις προεπιλογές.

Επιλογή κώδικα

Εκτέλεση επιλογής κώδικα

Η επιλογή κώδικα χρησιμοποιείται για την εύρεση του στοιχείου Java που αναπαρίσταται από μια περιοχή κειμένου (συνήθως το επιλεγμένο κείμενο) σε μια μονάδα μεταγλώττισης.  Για την εκτέλεση μέσω προγραμματισμού της επιλογής κώδικα, πρέπει να καλέσετε τη διεπαφή ICodeAssist.codeSelect. Πρέπει να παρέχετε τη θέση δείκτη έναρξης της επιλογής και το μήκος της. Το αποτέλεσμα είναι ένας πίνακας στοιχείων Java. Τις περισσότερες φορές υπάρχει μόνο ένα στοιχείο στον πίνακα, αλλά αν η επιλογή είναι ασαφής, τότε θα επιστρέφονται όλα τα πιθανά στοιχεία.

Στο παρακάτω παράδειγμα, έχει κληθεί η επιλογή κώδικα για μια μονάδα μεταγλώττισης.

   // Get the compilation unit
   ICompilationUnit unit = ...;
   
   // Get the offset and length
   int offset = ...;
   int length = ...;
   
   // perform selection
   IJavaElement[] elements = unit.codeSelect(offset, length);
   System.out.println("the selected element is " + element[0].getElementName());

Επιλογή στη θέση του δρομέα

Όταν το μήκος της επιλογής καθορίζεται ως 0, θα υπολογίζεται μια επιλογή με εύρεση του πλήρους διακριτικού στοιχείου που περικλείει την καθορισμένη απόσταση.  Δείτε το παρακάτω παράδειγμα μεθόδου:

   public void fooMethod(Object) {
   }

Αν καθορίσετε μια απόσταση μετά τον πρώτο χαρακτήρα του fooMethod, και προσδιορίσετε ένα μήκος 0,  τότε θα υπολογιστεί η επιλογή έτσι ώστε να συμπεριλαμβάνει ολόκληρο το διακριτικό στοιχείο fooMethod. Διαφορετικά, αν καθορίσετε ένα μήκος 5, η επιλογή θα θεωρηθεί ως ooMet.