Προβλήματα ασυμβατότητας μεταξύ του Eclipse 2.1 και 3.0

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

  1. Εκδοχή δήλωσης πρόσθετης λειτουργίας
  2. Αναδιάρθρωση πρόσθετων λειτουργιών περιβάλλοντος χρήστη της πλατφόρμας
  3. Αναδιάρθρωση πρόσθετων λειτουργιών περιβάλλοντος εκτέλεσης του πυρήνα πλατφόρμας
  4. Αφαίρεση της πρόσθετης λειτουργίας Xerces
  5. Το Eclipse 3.0 είναι περισσότερο σύγχρονο
  6. Άνοιγμα λειτουργιών επεξεργασίας σε IFiles
  7. Δείκτης μετάβασης της λειτουργίας επεξεργασίας
  8. Λειτουργία εκκίνησης της λειτουργίας επεξεργασίας
  9. Μητρώο λειτουργίας επεξεργασίας
  10. Μητρώο βοήθειας δεικτών του πάγκου εργασίας
  11. Παροχείς εγγράφων λειτουργιών επεξεργασίας κειμένου
  12. Λειτουργίες επεξεργασίας κειμένου
  13. Υποστήριξη σημειώσεων χωρίς γραφικό περιβάλλον
  14. Προβολή "Κονσόλα"
  15. Λειτουργίες ακρόασης σημείων διακοπής Java
  16. Πρόσβαση στο πρόχειρο στο νήμα περιβάλλοντος χρήστη
  17. Συμβάντα πατήματος πλήκτρων
  18. Διάσχιση καρτέλας των προσαρμοσμένων στοιχείων ελέγχου
  19. Σειρά συμβάντων επιλογής στον πίνακα SWT και στα όργανα διακλάδωσης
  20. Νέο επίπεδο σοβαρότητας στα αντικείμενα κατάστασης
  21. Ειδοποιήσεις αλλαγών πόρων αναφορικά με τη δόμηση
  22. Ενδιάμεσες ειδοποιήσεις κατά τη διάρκεια των λειτουργιών του χώρου εργασίας
  23. Επεκτάσεις ρουτίνας χειρισμού ροής URL
  24. Σειρά φόρτωσης κλάσεων
  25. Δεν έχει οριστεί προστατευμένος τομέας για το φορτωτή κλάσεων
  26. Μετατροπή αντικειμένου PluginModel
  27. Ημιτελής υλοποίηση ILibrary
  28. Μη έγκυρες υποθέσεις αναφορικά με τη φόρμα των URL
  29. Μετακίνηση/διαγραφή μεθόδων BootLoader
  30. Η εξαγωγή πρόσθετης λειτουργίας δεν περιλαμβάνει αυτόματα τα αρχεία JAR της πρόσθετης λειτουργίας
  31. Εξαγωγή εκ νέου του API περιβάλλοντος εκτέλεσης
  32. Μέθοδοι ανάλυσης πρόσθετων λειτουργιών στην πλατφόρμα
  33. Βιβλιοθήκες πρόσθετων λειτουργιών που παρέχονται από τμήματα
  34. Αλλαγές σε σενάρια δόμησης
  35. Αλλαγές στην εργασία Ant δόμησης PDE
  36. Αλλαγές στην εργασία Ant eclipse.build
  37. Αλλαγές στην εργασία Ant eclipse.fetch
  38. Αντικατάσταση του αρχείου install.ini

1.Εκδοχή δήλωσης πρόσθετης λειτουργίας

Η κεφαλίδα των αρχείων δήλωσης για πρόσθετες λειτουργίες (και τμήματα πρόσθετων λειτουργιών) έχει αλλάξει ώστε να περιλαμβάνει μια νέα γραμμή, η οποία προσδιορίζει την κατάλληλη εκδοχή δήλωσης πρόσθετης λειτουργίας. Πριν την εκδοχή 3.0, οι πρόσθετες λειτουργίες δεν περιείχαν κάποια από τις γραμμές <?eclipse ...?>. Μετά την εκδοχή 3.0 πρέπει πάντα να περιέχουν μία. Αυτή η αλλαγή επιτρέπει στο περιβάλλον εκτέλεσης του Eclipse να αναγνωρίζει με τρόπο αξιόπιστο τις πρόσθετες λειτουργίες που είναι παλαιότερες της εκδοχής 3.0, οι οποίες δεν έχουν μεταφερθεί στην εκδοχή 3.0, έτσι ώστε να μπορεί να παρέχει αυτόματα μεγαλύτερη συμβατότητα με αρχεία δυαδικής μορφής για αυτού του είδους τις πρόσθετες λειτουργίες. Το παρακάτω αποτελεί τη γενική μορφή του αρχείου plugin.xml (το fragment.xml είναι παρόμοιο):

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin ...>
    ...
</plugin>

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

Εάν προσθέσετε αυτή την οδηγία σε ένα αρχείο plugin.xml (με μη αυτόματο τρόπο ή με τη χρήση του PDE), το αρχείο πρέπει επίσης να ενημερωθεί ώστε να καταχωρήσει ρητά σε λίστα τις πρόσθετες λειτουργίες από τις οποίες εξαρτάται. Για παράδειγμα, πριν το Eclipse 3.0 οι εξαρτήσεις στα org.eclipse.core.runtime και org.eclipse.core.boot ήταν έμμεσες. Στην εκδοχή 3.0, το org.eclipse.core.boot δεν χρειάζεται πλέον και οι προγραμματιστές πρέπει ανάλογα να επιλέξουν το org.eclipse.core.runtime ή το org.eclipse.core.runtime.compatibility (ή κανένα από αυτά).

Σημείωση: Αυτό αποτελεί ένα πρόβλημα ασυμβατότητας το οποίο δεν επηρεάζει τον τρόπο με τον οποίο οι δυαδικές πρόσθετες λειτουργίες εκδοχής 2.1 εκτελούνται από το Eclipse 3.0.

2.Αναδιάρθρωση πρόσθετων λειτουργιών περιβάλλοντος χρήστη της πλατφόρμας

Η πρόσθετη λειτουργία org.eclipse.ui, η οποία αποτελούσε την κύρια πρόσθετη λειτουργία περιβάλλοντος χρήστη της πλατφόρμας, παρέχει πλέον απλά το API και τα σημεία επέκτασης για το γενικό (π.χ., μη ειδικό για IDE) πάγκο εργασίας. Τα προαιρετικά και τα ειδικά για IDE API και σημεία επέκτασης έχουν μετακινηθεί σε άλλες πρόσθετες λειτουργίες.

Αυτή η αλλαγή έχει δύο επιδράσεις: (1) τα σημεία επέκτασης του org.eclipse.ui που μετακινήθηκαν διαθέτουν νέες ταυτότητες σημείων επέκτασης και (2) έχει αλλάξει η λίστα των απαιτούμενων πρόσθετων λειτουργιών.

Τα σημεία επέκτασης του org.eclipse.ui στον ακόλουθο πίνακα έχουν μετακινηθεί σε διαφορετικές πρόσθετες λειτουργίες, προκαλώντας αλλαγή των ταυτοτήτων των σημείων επέκτασής τους. Εάν μια υπάρχουσα πρόσθετη λειτουργία συνεισφέρει μια επέκταση στα σημεία επέκτασης που μετακινήθηκαν, η παραπομπή στο γνώρισμα "point" του στοιχείου <επέκταση> στο αρχείο δήλωσης της πρόσθετης λειτουργίας πρέπει να αλλάξει ώστε να παραπέμπει στην αντίστοιχη νέα ταυτότητα σημείου επέκτασης. Το εργαλείο μετάβασης πρόσθετων λειτουργιών PDE εκτελεί αυτές τις επιδιορθώσεις.

Σημείωση: Αυτό αποτελεί ένα πρόβλημα ασυμβατότητας το οποίο δεν επηρεάζει τον τρόπο με τον οποίο οι δυαδικές πρόσθετες λειτουργίες εκδοχής 2.1 εκτελούνται από το Eclipse 3.0. Το περιβάλλον εκτέλεσης του Eclipse 3.0 εντοπίζει αυτόματα τις πρόσθετες λειτουργίες προηγούμενης από την 3.0 εκδοχής (λόγω της απουσίας της γραμμής <?eclipse version="3.0"?> που αναφέρθηκε παραπάνω στη δήλωση της πρόσθετης λειτουργίας) και αυτόματα αντισταθμίζει τις αλλαγές στις εξαρτήσεις στα σημεία επέκτασης και τις πρόσθετες λειτουργίες.

Παλαιά ταυτότητα σημείου επέκτασης

Νέα ταυτότητα σημείου επέκτασης

org.eclipse.ui.markerHelp org.eclipse.ui.ide.markerHelp
org.eclipse.ui.markerImageProviders org.eclipse.ui.ide.markerImageProviders
org.eclipse.ui.markerResolution org.eclipse.ui.ide.markerResolution
org.eclipse.ui.projectNatureImages org.eclipse.ui.ide.projectNatureImages
org.eclipse.ui.resourceFilters org.eclipse.ui.ide.resourceFilters
org.eclipse.ui.markerUpdaters org.eclipse.ui.editors.markerUpdaters
org.eclipse.ui.documentProviders org.eclipse.ui.editors.documentProviders
org.eclipse.ui.workbench.texteditor.
markerAnnotationSpecification
org.eclipse.ui.editors.markerAnnotationSpecification

Ο ακόλουθος πίνακας περιέχει τα πακέτα API, τα οποία παρέχονταν παλαιότερα από την πρόσθετη λειτουργία org.eclipse.ui και τα οποία έχουν μετακινηθεί σε διαφορετικές πρόσθετες λειτουργίες. (Τα ονόματα των πακέτων, των κλάσεων, των πεδίων και των μεθόδων API δεν άλλαξαν.) Σε μερικές περιπτώσεις, τα πακέτα API χωρίζονται σε περισσότερες από μία πρόσθετες λειτουργίες. Εφόσον οι κλάσεις API που είναι ορατές από οποιαδήποτε δεδομένη πρόσθετη λειτουργία καθορίζονται από τη λίστα των απαιτούμενων πρόσθετων λειτουργιών της συγκεκριμένης πρόσθετης λειτουργίας, αυτές οι αλλαγές μπορεί να απαιτούν κάποια προσαρμογή των στοιχείων "<requires>" σε μια υπάρχουσα δήλωση πρόσθετης λειτουργίας για την επανάκτηση πρόσβασης στην κλάση API.

Αυτή η αλλαγή επηρεάζει μόνο τις πρόσθετες λειτουργίες που εξαρτώνται από την πρόσθετη λειτουργία org.eclipse.ui (δηλαδή, που περιλαμβάνουν το <import plugin="org.eclipse.ui"/> στην ενότητα <requires> της δήλωσης πρόσθετης λειτουργίας). Όλες οι άλλες πρόσθετες λειτουργίες δεν επηρεάζονται. Εάν επηρεάζεται, μπορεί να χρειαστεί να αλλάξετε το στοιχείο <import> ή να προσθέσετε επιπρόσθετα στοιχεία <import>, έτσι ώστε όλες οι κλάσεις API που χρειάζεται η πρόσθετη λειτουργία σας να βρίσκονται εντός εμβέλειας. Συνιστούμε ιδιαίτερα ο πρόσθετες λειτουργίες να δηλώνουν μόνο εξαρτήσεις από πρόσθετες λειτουργίες που στην πραγματικότητα χρησιμοποιούν. Εάν συμπεριλαμβάνονται περιττές εξαρτήσεις, μειώνεται η απόδοση του περιβάλλοντος εκτέλεσης επειδή ο φορτωτής κλάσεων Java πρέπει να αναζητήσει κλάσεις σε όλα τα εξαρτώμενα στοιχεία. (Το εργαλείο μετάβασης πρόσθετων λειτουργιών PDE θα επιδιορθώσει τις εξαρτήσεις και θα βοηθήσει στον καθορισμό ενός ελάχιστου συνόλου.)

Πακέτο API

Πρόσθετη λειτουργία εκδοχής 2.1

Αντίστοιχη(ες) πρόσθετη(ες) λειτουργία(ες) εκδοχής 3.0

org.eclipse.jface.text.* org.eclipse.ui org.eclipse.jface.text
org.eclipse.text.* org.eclipse.ui org.eclipse.jface.text
org.eclipse.ui org.eclipse.ui org.eclipse.ui, org.eclipse.ui.ide
org.eclipse.ui.actions org.eclipse.ui org.eclipse.ui, org.eclipse.ui.ide
org.eclipse.ui.dialogs org.eclipse.ui org.eclipse.ui, org.eclipse.ui.ide
org.eclipse.ui.editors.* org.eclipse.ui org.eclipse.ui.editor
org.eclipse.ui.model org.eclipse.ui org.eclipse.ui, org.eclipse.ui.ide
org.eclipse.ui.part org.eclipse.ui org.eclipse.ui, org.eclipse.ui.ide
org.eclipse.ui.texteditor org.eclipse.ui org.eclipse.ui.workbench.texteditor, org.eclipse.ui.editors
org.eclipse.ui.texteditor.* org.eclipse.ui org.eclipse.ui.workbench.texteditor
org.eclipse.ui.views.bookmarkexplorer org.eclipse.ui org.eclipse.ui.ide
org.eclipse.ui.views.contentoutline org.eclipse.ui org.eclipse.ui.views
org.eclipse.ui.views.markers org.eclipse.ui org.eclipse.ui.ide
org.eclipse.ui.views.navigator org.eclipse.ui org.eclipse.ui.ide
org.eclipse.ui.views.properties org.eclipse.ui org.eclipse.ui.views
org.eclipse.ui.views.tasklist org.eclipse.ui org.eclipse.ui.ide
org.eclipse.ui.wizards.datatransfer org.eclipse.ui org.eclipse.ui.ide
org.eclipse.ui.wizards.newresource org.eclipse.ui org.eclipse.ui.ide

3. Αναδιάρθρωση πρόσθετων λειτουργιών περιβάλλοντος εκτέλεσης του πυρήνα πλατφόρμας

Το περιβάλλον εκτέλεσης πλατφόρμας του Eclipse 3.0 βασίζεται στο OSGi, γεγονός που επιβάλλει την ανάγκη για αλλαγές στη δομή των δύο πρόσθετων λειτουργιών περιβάλλοντος εκτέλεσης πλατφόρμας org.eclipse.core.runtime και org.eclipse.core.boot.

Μια νέα πρόσθετη λειτουργία org.eclipse.core.runtime.compatibility παρέχει μια γέφυρα υλοποίησης μεταξύ των παλαιών και των νέων API και αποτελεί το νέο κεντρικό κατάλογο για πολλά ξεπερασμένα API που παλαιότερα βρίσκονταν στο org.eclipse.core.runtime και το org.eclipse.core.boot. Τα σημεία επέκτασης του περιβάλλοντος εκτέλεσης πλατφόρμας δεν επηρεάζονται από την αναδιάρθρωση.

Κατά τη μεταβίβαση των υπαρχόντων πρόσθετων λειτουργιών στην εκδοχή 3.0, πρέπει να γίνει ενημέρωση της δήλωσης πρόσθετης λειτουργίας ούτως ώστε να αντικατοπτρίζεται η νέα δομή των πρόσθετων λειτουργιών περιβάλλοντος εκτέλεσης της πλατφόρμας Eclipse. `Το εργαλείο μετάβασης πρόσθετων λειτουργιών PDE θα προσθέσει μια εξάρτηση στο org.eclipse.core.runtime.compatibility εάν χρειαστεί.

Σημειώστε επίσης ότι εάν επισημάνετε την πρόσθετη λειτουργία σας ως εκδοχής 3.0 (χρησιμοποιώντας τη γραμμή <?eclipse version="3.0"?>) και η πρόσθετη λειτουργία σας ορίζει μια κλάση Plugin, πρέπει είτε να εισάγετε ρητά την <import plugin="org.eclipse.core.runtime.compatibility"/> στη δήλωση της πρόσθετης λειτουργίας είτε να διασφαλίσετε ότι η κλάση Plugin ορίζει την προεπιλεγμένη λειτουργία κατασκευής.

Σημείωση: Αυτό αποτελεί ένα πρόβλημα ασυμβατότητας το οποίο δεν επηρεάζει τον τρόπο με τον οποίο οι δυαδικές πρόσθετες λειτουργίες εκδοχής 2.1 εκτελούνται από το Eclipse 3.0. Το περιβάλλον εκτέλεσης του Eclipse 3.0 εντοπίζει αυτόματα τις πρόσθετες λειτουργίες προηγούμενης από την 3.0 εκδοχής (λόγω της απουσίας της γραμμής <?eclipse version="3.0"?> που αναφέρθηκε παραπάνω στη δήλωση της πρόσθετης λειτουργίας) και αυτόματα αντισταθμίζει τις αλλαγές αυτές στο περιβάλλον εκτέλεσης πλατφόρμας.

4. Αφαίρεση της πρόσθετης λειτουργίας Xerces

Η πρόσθετη λειτουργία org.eclipse.xerces δεν χρειάζεται πλέον και έχει διαγραφεί. Η υποστήριξη ανάλυσης XML είναι ενσωματωμένη στο J2SE 1.4 και η παρουσία της πρόσθετης λειτουργίας Xerces δημιουργούσε διενέξεις του φορτωτή κλάσεων. Τα πακέτα API javax.xml.parsers, org.w3c.dom.* και org.xml.sax.*, τα οποία παρέχονταν προηγουμένως από την πρόσθετη λειτουργία org.eclipse.xerces, διατίθενται πλέον από τις βιβλιοθήκες του J2SE.

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

Μια δυαδική πρόσθετη λειτουργία εκδοχής 2.1 με εξάρτηση που δηλώνεται στην πρόσθετη λειτουργία org.eclipse.xerces δεν θα διαθέτει μια προϋπόθεση κατά την εκτέλεσή της με τις τυπικές ρυθμίσεις του Eclipse 3.0. Κατά συνέπεια η πρόσθετη λειτουργία δεν θα ενεργοποιηθεί.

5. Το Eclipse 3.0 είναι περισσότερο σύγχρονο

Πριν το Eclipse 3.0, το Eclipse λειτουργούσε κατά κύριο λόγο σε ένα μοναδικό νήμα. Οι περισσότερες μέθοδοι και τα σημεία επέκτασης API λειτουργούσαν είτε στο νήμα περιβάλλοντος χρήστη είτε σε ένα νήμα το οποίο δημιουργόταν από ένα πλαίσιο διαλόγου προόδου, το οποίο μπλόκαρε το νήμα περιβάλλοντος χρήστη. Οι περισσότεροι μεταγραφείς πρόσθετων λειτουργιών δεν ανησυχούσαν ιδιαίτερα σχετικά με την ασφάλεια του νήματος, εκτός από το να διασφαλίσουν ότι η δραστηριότητα περιβάλλοντος χρήστη στο σύνολό της πραγματοποιούνταν στο νήμα περιβάλλοντος χρήστη. Στο Eclipse 3.0 υπάρχει σε γενικές γραμμές πολύ περισσότερος ταυτοχρονισμός. Πολλές λειτουργίες πλέον πραγματοποιούνται σε ένα νήμα παρασκηνίου, όπου μπορούν να εκτελούνται ταυτόχρονα με άλλα νήματα, συμπεριλαμβανομένου του νήματος περιβάλλοντος χρήστη. Όλες οι πρόσθετες λειτουργίες, των οποίων ο κώδικας εκτελείται σε ένα νήμα παρασκηνίου, πρέπει να λαμβάνουν υπόψη τους την ασφάλεια νήματος του κώδικά τους.

Εκτός των πρόσθετων λειτουργιών, οι οποίες αποτελούν λειτουργίες που εκτελούνται ρητά στο παρασκήνιο με τη χρήση του API org.eclipse.core.runtime.jobs, υπάρχουν αρκετές λειτουργίες και σημεία επέκτασης API πλατφόρμας που χρησιμοποιούν νήματα παρασκηνίου. Οι πρόσθετες λειτουργίες που συνδέονται σε αυτές τις λειτουργίες πρέπει να εξασφαλίσουν ότι ο κώδικάς τους είναι ασφαλούς νήματος. Ο πίνακας που ακολουθεί περιέχει περιληπτικά τα API και τα σημεία επέκτασης των οποίων κάποιο μέρος ή όλος ο κώδικάς τους εκτελείται σε ένα νήμα παρασκηνίου στο Eclipse 3.0:

Σημείο επέκτασης ή κλάση API

Σημειώσεις

org.eclipse.core.runtime.IRegistryChangeListener Νέο στο Eclipse 3.0, εκτελείται στο παρασκήνιο
org.eclipse.core.resources.IResourceChangeListener Συμβάντα AUTO_BUILD εκτελούνται στο παρασκήνιο
org.eclipse.core.resources.builders (σημείο επέκτασης) Η αυτόματη δόμηση εκτελείται στο παρασκήνιο
org.eclipse.core.resources.ISaveParticipant Το SNAPSHOT εκτελείται στο παρασκήνιο
org.eclipse.ui.workbench.texteditor.quickdiffReferenceProvider (σημείο επέκτασης) Νέο στο Eclipse 3.0, εκτελείται στο παρασκήνιο
org.eclipse.ui.decorators (σημείο επέκτασης) Ήδη εκτελείται στο παρασκήνιο στο Eclipse 2.1
org.eclipse.ui.startup (σημείο επέκτασης) Ήδη εκτελείται στο παρασκήνιο στο Eclipse 2.1
org.eclipse.team.core.org.eclipse.team.core.repository (σημείο επέκτασης) Πολλές λειτουργίες εκτελούνται στο παρασκήνιο
org.eclipse.team.ui.synchronizeParticipants (σημείο επέκτασης) Νέο στο Eclipse 3.0, εκτελείται στο παρασκήνιο
org.eclipse.debug.core.launchConfigurationTypes (σημείο επέκτασης) Εκτελείται στο παρασκήνιο
org.eclipse.jdt.core.IElementChangedListener Το ElementChangedEvent.PRE_AUTO_BUILD πλέον εκτελείται στο παρασκήνιο, ενώ το POST_RECONCILE ήδη εκτελείται στο παρασκήνιο

Υπάρχουν διάφορες στρατηγικές για να καταστήσετε των κώδικα ασφαλή νήματος. Μια αφελής λύση είναι να διασφαλίσετε ότι όλες οι εργασίες πραγματοποιούνται στο νήμα περιβάλλοντος χρήστη και με αυτόν τον τρόπο διασφαλίζεται η σειριακή εκτέλεση. Αυτό αποτελεί μια κοινή προσέγγιση για πρόσθετες λειτουργίες περιβάλλοντος χρήστη που δεν πραγματοποιούν επεξεργασία που απαιτεί έντονη χρήση της κεντρικής μονάδας επεξεργασίας (CPU). Όταν τη χρησιμοποιείτε, λάβετε υπόψη σας το ρίσκο αδιεξόδου που εμπεριέχεται στην Display.syncExec. Η Display.asyncExec είναι σε γενικές γραμμές ασφαλέστερη καθώς δεν παρουσιάζει ρίσκο αδιεξόδου, με αντίτιμο την απώλεια ακριβούς ελέγχου κατά την εκτέλεση του κώδικα.

Άλλες τεχνικές για να καταστήσετε τον κώδικα ασφαλούς νήματος περιλαμβάνουν τις εξής:

6. Άνοιγμα λειτουργιών επεξεργασίας σε IFiles

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

Οι πελάτες των μεθόδων IWorkbenchPage.openEditor πρέπει να καλούν στη θέση τους τις αντίστοιχες δημόσιες στατικές μεθόδους που δηλώνονται στην κλάση org.eclipse.ui.ide.IDE (στην πρόσθετη λειτουργία org.eclipse.ui.ide).

Οι πελάτες της μεθόδου IWorkbenchPage.openSystemEditor(IFile) πρέπει να μετατρέψουν το IFile σε IEditorInput χρησιμοποιώντας νέο FileEditorInput(IFile) και κατόπιν καλώντας τη μέθοδο openEditor(IEditorInput,String). Με άλλα λόγια, γράψτε εκ νέου το page.openSystemEditor(file) ως page.openEditor(new FileEditorInput(file), IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID). Σημείωση: οι πελάτες που χρησιμοποιούν την ταυτότητα λειτουργίας επεξεργασίας IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID πρέπει να μεταβιβάσουν δεδομένα εισόδου λειτουργίας επεξεργασίας, τα οποία να υλοποιούν την org.eclipse.ui.IPathEditorInput (το οποίο κάνει η FileEditorInput).

Σημείωση: Αυτό αποτελεί ένα πρόβλημα ασυμβατότητας το οποίο δεν επηρεάζει τον τρόπο με τον οποίο οι δυαδικές πρόσθετες λειτουργίες εκδοχής 2.1 εκτελούνται από το Eclipse 3.0. Το Eclipse 3.0 περιλαμβάνει ένα δυαδικό μηχανισμό συμβατότητας περιβάλλοντος εκτέλεσης, ο οποίος διασφαλίζει ότι τα υπάρχοντα δυαδικά αντικείμενα πρόσθετων λειτουργιών εκδοχής 2.1, που χρησιμοποιούν κάποια από τις διαγραμμένες μεθόδους openEditor και openSystemEditor, θα συνεχίσουν να λειτουργούν όπως και στην εκδοχή 2.1 παρά αυτή την αλλαγή στο API. (Οι διαγραμμένες μέθοδοι "προστίθενται πίσω" αποτελεσματικά από το τμήμα org.eclipse.ui.workbench.compatibility.)

7. Δείκτης μετάβασης της λειτουργίας επεξεργασίας

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

Οι αντίστοιχες μέθοδοι διαγράφηκαν επίσης από τις κλάσεις στο πακέτο org.eclipse.ui.part που υλοποιεί την IEditorPart, δηλαδή οι μέθοδοι EditorPart, MultiEditor, MultiPageEditorPart και MultiPageEditor. 

Οι πελάτες που καλούν αυτή τη μέθοδο πρέπει να ελέγχουν εάν το τμήμα της λειτουργίας επεξεργασίας υλοποιεί ή προσαρμόζεται στο org.eclipse.ui.ide.IGotoMarker (στην πρόσθετη λειτουργία org.eclipse.ui.ide) και εάν ναι, , να καλέσουν την gotoMarker(IMarker). Η κλάση IDE διαθέτει μια μέθοδο διευκόλυνσης για αυτό το σκοπό: την IDE.gotoMarker(editor, marker).

Οι πελάτες που υλοποιούν μια λειτουργία επεξεργασίας, η οποία μπορεί να τοποθετηθεί με βάση τις πληροφορίες της IMarker, πρέπει να υλοποιήσουν ή να προσαρμοστούν στο org.eclipse.ui.ide.IGotoMarker.

Εφόσον η μόνη μέθοδος της IGotoMarker είναι η gotoMarker(IMarker) και διαθέτει την ίδια υπογραφή και προδιαγραφή όπως η παλιά IEditorPart.gotoMarker(IMarker), οι υπάρχουσες υλοποιήσεις λειτουργίας επεξεργασίας μπορούν να προσαρμοστούν σε αυτή την αλλαγή περιλαμβάνοντας απλά την IGotoMarker στη συνθήκη implements του ορισμού κλάσης.

Μια δυαδική πρόσθετη λειτουργία εκδοχής 2.1 με κώδικα που καλεί αυτή τη μέθοδο θα λάβει μια εξαίρεση σφάλματος σύνδεσης κλάσεων κατά την εκτέλεσή της με τις τυπικές ρυθμίσεις του Eclipse 3.0.

8. Λειτουργία εκκίνησης της λειτουργίας επεξεργασίας

Η διεπαφή της λειτουργίας εκκίνησης της λειτουργίας επεξεργασίας org.eclipse.ui.IEditorLauncher υλοποιείται από πρόσθετες λειτουργίες που συνεισφέρουν εξωτερικές λειτουργίες επεξεργασίας. Η ακόλουθη μέθοδος αφαιρέθηκε από τη διεπαφή αυτή. Η IEditorLauncher δηλώνεται στο γενικό πάγκο εργασίας αλλά η μέθοδος είναι εκ φύσεως ειδική για πόρους.

αντικαταστάθηκε από

Οι πελάτες που καλούν την IEditorLauncher.open(file) πρέπει να καλούν στη θέση της την IEditorLauncher.open(file.getLocation()). Οι πελάτες που υλοποιούν αυτή τη διεπαφή πρέπει να αντικαταστήσουν (ή να αυξήσουν) τις υλοποιήσεις τους για open(IFile) με μια για open(IPath).

Μια δυαδική πρόσθετη λειτουργία εκδοχής 2.1 με κώδικα που καλεί αυτή τη μέθοδο θα λάβει μια εξαίρεση σφάλματος σύνδεσης κλάσεων κατά την εκτέλεσή της με τις τυπικές ρυθμίσεις του Eclipse 3.0.

9. Μητρώο λειτουργίας επεξεργασίας

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

Οι πελάτες που καλούν την μέθοδο getEditors(file) ή την getImageDescriptor(file) πρέπει να καλέσουν τις αντίστοιχες μεθόδους για "String": Οι πελάτες που καλούν την setDefaultEditor(IFile file, String editorId) και την getDefaultEditor(IFile file) πρέπει στη θέση τους να καλέσουν τις αντίστοιχες δημόσιες στατικές μεθόδους που δηλώνονται στην κλάση org.eclipse.ui.ide.IDE (στην πρόσθετη λειτουργία org.eclipse.ui.ide): Επίσης, η συμφωνία API για τη μέθοδο IEditorRegistrygetDefaultEditor() έχει αλλάξει. Αυτή η μέθοδος, η οποία επίσης έχει πλέον καταργηθεί, θα επιστρέφει πάντα το αρχείο περιγραφής της λειτουργίας επεξεργασίας "Εξωτερική λειτουργία επεξεργασίας συστήματος". Αυτή η αλλαγή έχει αντίκτυπο στους πελάτες που θεωρούσαν ότι η προεπιλεγμένη λειτουργία επεξεργασίας που επιστρέφεται θα ήταν μια λειτουργία επεξεργασίας κειμένου.

Υπάρχουν νέες σταθερές οι οποίες αντιπροσωπεύουν την εξωτερική λειτουργία επεξεργασίας συστήματος και τις ταυτότητες της επί τόπου λειτουργίας επεξεργασίας συστήματος (SYSTEM_EXTERNAL_EDITOR_ID και SYSTEM_INPLACE_EDITOR_ID). Οι δύο αυτές λειτουργίες επεξεργασίας απαιτούν δεδομένα εισόδου λειτουργίας επεξεργασίας, τα οποία να υλοποιούν ή να προσαρμόζονται στο org.eclipse.ui.IPathEditorInput. Σημειώστε ότι το αρχείο περιγραφής της επί τόπου λειτουργίας επεξεργασίας δεν θα υπάρχει στις ρυθμίσεις του Eclipse οι οποίες δεν υποστηρίζουν την επί τόπου τροποποίηση.

10. Μητρώο βοήθειας δεικτών του πάγκου εργασίας

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

Οι πελάτες της IWorkbench.getMarkerHelpRegistry() πρέπει στη θέση της να καλούν τη δημόσια στατική μέθοδο org.eclipse.ui.ide.IDE.getMarkerHelpRegistry() (στην πρόσθετη λειτουργία org.eclipse.ui.ide).

Μια δυαδική πρόσθετη λειτουργία εκδοχής 2.1 με κώδικα που καλεί αυτή τη μέθοδο θα λάβει μια εξαίρεση κατά την εκτέλεσή της με τις τυπικές ρυθμίσεις του Eclipse 3.0.

11. Παροχείς εγγράφων λειτουργιών επεξεργασίας κειμένου

Για να καταστήσουμε την org.eclipse.ui.texteditor.AbstractTextEditor ανεξάρτητη από την IFile, η org.eclipse.ui.texteditor.AbstractDocumentProvider εισάγει την έννοια μιας λειτουργίας παροχέα εγγράφων (DocumentProviderOperation) και μια κλάση εκτέλεσης λειτουργίας παροχέα εγγράφων (IRunnableContext). Όταν της ζητηθεί να πραγματοποιήσει επαναφορά, αποθήκευση ή συγχρονισμό, η AbstractDocumentProvider δημιουργεί λειτουργίες παροχέα εγγράφων και χρησιμοποιεί την κλάση εκτέλεσης λειτουργίας για να τις εκτελέσει. Το εκτελέσιμο περιβάλλον μπορεί να παρασχεθεί από υποκλάσεις μέσω της μεθόδου getOperationRunner. Ακολουθεί μια περίληψη των αλλαγών στις οποίες οι πελάτες πρέπει να προσαρμοστούν:

Η υποκλάση AbstractDocumentProvider της org.eclipse.ui.editors.text.StorageDocumentProvider υλοποιεί τη μέθοδο getOperationRunner για να επιστρέφει πάντα την τιμή null. Αυτό σημαίνει ότι οι υποκλάσεις της StorageDocumentProvider δεν πρέπει να επηρεάζονται από αυτή την αλλαγή.

Η υποκλάση StorageDocumentProvider της org.eclipse.ui.editors.text.FileDocumentProvider υλοποιεί τη μέθοδο getOperationRunner που επιστρέφει μια IRunnableContext για την εκτέλεση ης δεδομένης DocumentProviderOperations εντός της WorkspaceModifyOperation. Άλλες αλλαγές στην FileDocumentProvider είναι οι εξής:

12. Λειτουργίες επεξεργασίας κειμένου

Αλλαγές στην org.eclipse.ui.texteditor.AbstractTextEditor:

Η υποκλάση AbstractTextEditor της org.eclipse.ui.texteditor.StatusTextEditor παρέχει τη μέθοδο κατηγορήματος isErrorStatus(IStatus). Οι υποκλάσεις μπορεί να την αντικαταστήσουν για να αποφασιστεί εάν μια δεδομένη κατάσταση πρέπει να θεωρηθεί σφάλμα ή όχι.

Αλλαγές στην org.eclipse.ui.editors.text.AbstractDecoratedTextEditor:

13. Υποστήριξη σημειώσεων χωρίς γραφικό περιβάλλον

Ως μέρος της εισαγωγής για την υποστήριξη σημειώσεων χωρίς γραφικό περιβάλλον, έγιναν οι ακόλουθες αλλαγές στην κλάση Annotation:

        org.eclipse.jface.text.source.Annotation 
        org.eclipse.jface.text.source.AnnotationModel 
        org.eclipse.jface.text.source.AnnotationModelEvent 
        org.eclipse.jface.text.source.IAnnotationModel 
        org.eclipse.jface.text.source.IAnnotationModelListener 
        org.eclipse.jface.text.source.IAnnotationModelListenerExtension

14. Προβολή "Κονσόλα"

Το Eclipse 3.0 διαθέτει νέα υποστήριξη γενικής κονσόλας. Η γενική κονσόλα διατίθεται από το Παράθυρο > Εμφάνιση προβολής > Βασική > Κονσόλα και χρησιμοποιείται από την ενοποίηση του εντοπισμού και διόρθωσης σφαλμάτων και του Ant στο Eclipse.

Η ταυτότητα της προβολής για την κονσόλα άλλαξε από org.eclipse.debug.ui.ConsoleView σε org.eclipse.ui.console.ConsoleView. Οι πρόσθετες λειτουργίες εκδοχής 2.1, οι οποίες με προγραμματισμό άνοιγαν την κονσόλα, δεν θα επιτύχουν επειδή η παλαιά προβολή δεν υπάρχει.

15. Λειτουργίες ακρόασης σημείων διακοπής Java

Στην εκδοχή 3.0, τα επιστρεφόμενα είδη για τις μεθόδους org.eclipse.jdt.debug.core.IJavaBreakpointListener.breakpointHit(IJavaBreakpoint, IJavaThread) και installingBreakpoing(IJavaTarget, IJavaBreakpoint, IJavaType) άλλαξαν από λογικές τιμές σε ακέραιους για να επιτρέπουν στις λειτουργίες ακρόασης να επιλέγουν "don't care". Στις εκδόσεις πριν την 3.0 οι λειτουργίες ακρόασης μπορούσαν να επιλέξουν μόνο "suspend" ή "don't suspend" κατά τον εντοπισμό ενός σημείου διακοπής, και "install" ή "don't install" όταν πρόκειται να εγκατασταθεί ένα σημείο διακοπής. Στην εκδοχή 3.0 ο λειτουργίες ακρόασης μπορούν επίσης να επιλέξουν "don't care" για οποιαδήποτε από αυτές τις ειδοποιήσεις. Αυτό επιτρέπει στους πελάτες να πραγματοποιήσουν μια κρίσιμη επιλογή σε καταστάσεις που τους αφορούν. Για ειδοποιήσεις "breakpoint hit", το σημείο διακοπής θα ανασταλεί εάν οποιαδήποτε λειτουργία ακρόασης επιλέξει "suspend" ή εάν όλες οι λειτουργίες ακρόασης επιλέξουν "don't care". Επίσης δεν θα ανασταλεί εάν τουλάχιστον μια λειτουργία ακρόασης επιλέξει "don't suspend" και καμία λειτουργία ακρόασης δεν επιλέξει "suspend". Ομοίως για ειδοποιήσεις "breakpoint installing", το σημείο διακοπής θα εγκατασταθεί εάν οποιαδήποτε λειτουργία ακρόασης επιλέξει "install" ή εάν όλες οι λειτουργίες ακρόασης επιλέξουν "don't care". Επίσης δεν θα εγκατασταθεί εάν τουλάχιστον μια λειτουργία ακρόασης επιλέξει "don't install" και καμία λειτουργία ακρόασης δεν επιλέξει "install". Γενικά οι υλοποιητές πρέπει να επιστρέψουν την τιμή DONT_CARE εκτός εάν διαθέτουν ισχυρή γνώμη για κάποια άλλη επιλογή. Είναι σημαντικό να λάβετε υπόψη σας, για παράδειγμα, ότι η επιλογή "suspend" θα αντικαταστήσει την επιλογή "don't suspend" οποιασδήποτε άλλης λειτουργίας ακρόασης.

Η διεπαφή IJavaBreakpointListener υλοποιείται από πελάτες που δημιουργούν ή αντιδρούν σε σημεία επέκτασης στον κώδικα Java. Αυτή η αλλαγή επιδιορθώνει πιθανόν λίγους πελάτες πέρα από το JDT, εκτός αυτού που ανέφερε το πρόβλημα (σφάλμα 37760). Αυτό αποτελεί αλλαγή συμπεριφοράς για τον υπάρχον κώδικα που υλοποιεί τη διεπαφή IJavaBreakpointListener. Αυτός ο κώδικας χρειάζεται να τροποποιηθεί για να επιστρέφει μια κατάλληλη τιμή ακέραιου αριθμού πριν μεταγλωττιστεί ή εκτελεστεί στην εκδοχή 3.0.

16. Πρόσβαση στο πρόχειρο στο νήμα περιβάλλοντος χρήστη

Πριν την εκδοχή 3.0 επιτρεπόταν έμμεσα στις μεθόδους στην κλάση SWT org.eclipse.swt.dnd.Clipboard να εκτελούνται σε νήματα διαφορετικά από το νήμα περιβάλλοντος χρήστη. Αυτή η παράβλεψη είχε ως αποτέλεσμα αποτυχίες στο GTK όπου το λειτουργικό σύστημα απαιτεί την εκτέλεση όλων των αλληλεπιδράσεων προχείρου στο νήμα περιβάλλοντος χρήστη. Αυτή η παράβλεψη δεν είχε αποκαλυφθεί νωρίτερα επειδή πολλές εφαρμογές είναι μοναδικού νήματος και λαμβάνουν το μεγαλύτερο ποσοστό των δοκιμών τους σε Windows. Για να είναι το API προχείρου συνεχές και να χρησιμοποιείται ανεξαρτήτως πλατφόρμας, στην εκδοχή 3.0 η προδιαγραφή και η υλοποίηση όλων των μεθόδων API προχείρου έχουν αλλάξει για να εμφανίζουν μια εξαίρεση SWT (ERROR_THREAD_INVALID_ACCESS) εάν γίνει κλήση τους από ένα νήμα που δεν είναι περιβάλλοντος χρήστη. Οι υπηρεσίες προχείρου κοινώς παρέχονται αυτόματα από τα συστατικά στοιχεία Eclipse όπως η λειτουργία επεξεργασίας κειμένου, η οποία προστατεύει πολλούς πελάτες από αυτή την αλλαγή συμπεριφοράς. Ο υπάρχον κώδικας που κάνει απευθείας χρήση του προχείρου πρέπει να εξασφαλίζει ότι οι μέθοδοι API καλούνται στο σωστό νήμα, με τη χρήση των Display.asyncExec ή syncExec όπου είναι απαραίτητο για την εναλλαγή πρόσβασης στο νήμα περιβάλλοντος χρήστη.

17. Συμβάντα πατήματος πλήκτρων

Στην εκδοχή 3.0 το SWT αναφέρει συμβάντα πατήματος πλήκτρων πριν την εκτέλεση της εργασίας στο λειτουργικό σύστημα. Αυτό γίνεται πολύ νωρίτερα από ότι γινόταν πριν την εκδοχή 3.0. Αυτή η αλλαγή έγινε για την υποστήριξη δεσμών πλήκτρων στο Eclipse, το οποίο επιβάλλει τον εντοπισμό συμβάντων πλήκτρων πριν κάποιο όργανο να έχει την ευκαιρία να επεξεργαστεί το χαρακτήρα. Οι συνέπειες αυτής της αλλαγής είναι εμφανείς στον κώδικα που χειρίζεται απευθείας συμβάντα χαμηλού επιπέδου org.eclipse.swt.SWT.KeyDown. Για παράδειγμα, σημαίνει ότι όταν μια λειτουργία ακρόασης σε ένα όργανο κειμένου λάβει ένα συμβάν πατήματος πλήκτρου, το περιεχόμενο του οργάνου (getText()) δεν θα περιλαμβάνει ακόμα το πλήκτρο που πληκτρολογήθηκε (όπως θα γινόταν σε προηγούμενη της 3.0 εκδοχή). Ο προτεινόμενος τρόπος για τη λήψη του πλήρους κειμένου από το όργανο, συμπεριλαμβανομένου του τρέχοντος πλήκτρου, είναι με το χειρισμό των συμβάντων υψηλότερου επιπέδου SWT.Modify ή SWT.Verify, παρά του συμβάντος χαμηλότερου επιπέδου SWT.KeyDown. Ο κώδικας που ήδη λειτουργεί με αυτόν τον τρόπο δεν επηρεάζεται από αυτή την αλλαγή.

18. Διάσχιση καρτέλας των προσαρμοσμένων στοιχείων ελέγχου

Πριν την εκδοχή 3.0, όταν ή εστίαση βρισκόταν στην κλάση SWT org.eclipse.swt.widgets.Canvas ή σε μια από τις υποκλάσεις της (συμπεριλαμβανομένων των προσαρμοσμένων οργάνων), η πληκτρολόγηση των Ctrl+Tab, Shift+Tab, Ctrl+PgUp ή Ctrl+PgDn θα ενεργοποιούσε αυτόματα διάσχιση στο επόμενο/προηγούμενο όργανο χωρίς να αναφέρεται συμβάν πλήκτρων. Αυτή η συμπεριφορά δεν ήταν καθορισμένη και εκτελούνταν ενάντια στον κανόνα ότι οι κλάσεις Canvases αναγνωρίζουν κάθε πλήκτρο που πληκτρολογείται σε αυτούς. Ο κατάλληλος τρόπος για το χειρισμό της διάσχισης είναι με την καταχώρηση μιας λειτουργίας ακρόασης διάσχισης. Για να υποστηρίζονται σωστά οι δεσμοί πλήκτρων Eclipse στην εκδοχή 3.0, η προεπιλεγμένη συμπεριφορά άλλαξε ούτως ώστε η κλάση Canvas πλέον να αναγνωρίζει τα συμβάντα πλήκτρων Ctrl+Tab, Shift+Tab, Ctrl+PgUp και Ctrl+PgDn αντί την ενέργεια διάσχισης. Εάν χρησιμοποιείτε την αδιαμόρφωτη κλάση Canvas ή ορίζετε μια υποκλάση της Canvas, βεβαιωθείτε ότι καταχωρείτε μια λειτουργία ακρόασης διάσχισης.

19. Σειρά συμβάντων επιλογής στον πίνακα SWT και στα όργανα διακλάδωσης

Οι επιλογές με το ποντίκι αντικειμένων στις κλάσεις SWT org.eclipse.swt.widgets.Table και Tree δημιουργούν την ακολουθία συμβάντων "Κίνηση ποντικιού προς τα κάτω-Επιλογή-Κίνηση ποντικιού προς τα πάνω" ομοιόμορφα σε όλα τα λειτουργικά περιβάλλοντα. Ομοίως, οι επιλογές με το πληκτρολόγιο δημιουργούν την ακολουθία συμβάντων KeyDown-Selection-KeyUp ομοιόμορφα σε όλα τα λειτουργικά περιβάλλοντα. Πριν την εκδοχή 3.0 η σειρά συμβάντων δεν ήταν ομοιόμορφη, καθώς τα Motif και Photon διέφεραν από τα υπόλοιπα εφόσον ανέφεραν πάντα πρώτα το συμβάν Selection; π.χ. "Επιλογή-Κίνηση ποντικιού προς τα κάτω-Κίνηση ποντικιού προς τα πάνω" ή "Επιλογή-Πλήκτρο κάτω-Πλήκτρο επάνω". Στην εκδοχή 3.0 η σειρά συμβάντων στο Motif και το Photon έχει αλλάξει ώστε να ταιριάζει με τη σειρά στα άλλα λειτουργικά περιβάλλοντα. Ο υπάρχον κώδικας που λειτουργούσε σωστά στα {Windows, GTK} και στα {Motif, Photon} είναι απίθανο να επηρεαστεί. Ωστόσο θα ήταν χρήσιμο να ελέγχατε τον κώδικά σας για να εξασφαλίσετε ότι δεν βασίζεται σε μη έγκυρη σειρά συμβάντων.

20. Νέο επίπεδο σοβαρότητας στα αντικείμενα κατάστασης

Η org.eclipse.core.runtime.IStatus διαθέτει μια νέα σταθερά σοβαρότητας, την IStatus.CANCEL, η οποία μπορεί να χρησιμοποιηθεί για τη δήλωση ακύρωσης. Τα στοιχεία υποβολής κλήσης της IStatus.getSeverity() που βασίζονται στο σύνολο των πιθανών σοβαροτήτων που περιορίζονται στις IStatus.OK, INFO, WARNING και ERROR επηρεάζονται από αυτή την προσθήκη. Τα στοιχεία υποβολής κλήσης της getSeverity πρέπει να ενημερώσουν τον κώδικά τους για να περιλαμβάνει το νέο επίπεδο σοβαρότητας.

21. Ειδοποιήσεις αλλαγών πόρων αναφορικά με τη δόμηση

Στο Eclipse 3.0 οι αυτόματες δομήσεις του χώρου εργασίας πλέον πραγματοποιούνται σε ένα νήμα παρασκηνίου. Αυτό απαιτούσε μια αλλαγή της συμφωνίας API σε org.eclipse.core.resources.IResourceChangeEvent. Η συμφωνία του IResourceChangeEvent παλαιότερα αποτελούσε εγγύηση για την ακόλουθη σειρά συμβάντων για όλες τις αλλαγές του χώρου εργασίας:

  1. Ειδοποίηση συμβάντος PRE_DELETE ή PRE_CLOSE εάν μπορεί να εφαρμοστεί
  2. Εκτέλεση της λειτουργίας
  3. Ειδοποίηση συμβάντος PRE_AUTO_BUILD
  4. Εάν είναι ενεργοποιημένη η αυτόματη δόμηση, εκτελέστε αυξητική δόμηση του χώρου εργασίας
  5. Ειδοποίηση συμβάντος POST_AUTO_BUILD
  6. Ειδοποίηση συμβάντος POST_CHANGE

Εάν εκτελείται μια αυτόματη δόμηση στο παρασκήνιο, δεν παρέχεται καμία εγγύηση για τη χρονική σχέση μεταξύ των συμβάντων AUTO_BUILD και του συμβάντος POST_CHANGE. Στο Eclipse 3.0 τα βήματα 3-5 στην παραπάνω δομή αφαιρούνται από τη λειτουργία. Το αποτέλεσμα που προκύπτει έχει ως εξής:

  1. Ειδοποίηση συμβάντος PRE_DELETE ή PRE_CLOSE εάν μπορεί να εφαρμοστεί
  2. Εκτέλεση της λειτουργίας
  3. Ειδοποίηση συμβάντος POST_CHANGE

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

  1. Ειδοποίηση συμβάντος PRE_BUILD (το PRE_BUILD αποτελεί το νέο όνομα της PRE_AUTO_BUILD)
  2. Εάν είναι ενεργοποιημένη η αυτόματη δόμηση, εκτελέστε αυξητική δόμηση του χώρου εργασίας
  3. Ειδοποίηση συμβάντος POST_BUILD (το POST_BUILD αποτελεί το νέο όνομα της POST_AUTO_BUILD)
  4. Ειδοποίηση συμβάντος POST_CHANGE

Το σημείο παραπομπής για τα τροποποιημένα στοιχεία που λαμβάνονται από λειτουργίες ακρόασης αυτόματης δόμησης θα είναι διαφορετικό από αυτό των λειτουργιών ακρόασης που έπονται των αλλαγών. Οι λειτουργίες ακρόασης δόμησης θα λάβουν ειδοποίηση για όλες τις αλλαγές που έγιναν από το τέλος της τελευταίας λειτουργίας πρόσβασης. Οι λειτουργίες ακρόασης που έπονται των αλλαγών θα λάβουν τροποποιημένα στοιχεία τα οποία περιγράφουν όλες τις αλλαγές από την τελευταία ειδοποίηση που έγινε μετά τις αλλαγές. Αυτή η νέα δομή διατηρεί τρία χαρακτηριστικά των λειτουργιών ακρόασης αλλαγής πόρων που ισχύουν από το Eclipse 1.0:

Ωστόσο, υπάρχουν κάποιες σημαντικές διαφορές με αυτή την προσέγγιση. Πριν το Eclipse 3.0 οι λειτουργίες ακρόασης αυτόματης δόμησης καλούνταν πάντα πριν τις λειτουργίες ακρόασης POST_CHANGE. Για αυτό το λόγο τα τροποποιημένα στοιχεία που λαμβάνονταν από τις λειτουργίες ακρόασης αυτόματης δόμησης αποτελούσαν πάντα ένα υποσύνολο των τροποποιημένων στοιχείων που λάμβαναν οι λειτουργίες ακρόασης POST_CHANGE. Αυτή η σχέση έχει στην πραγματικότητα πλέον αντιστραφεί. Οι λειτουργίες ακρόασης αυτόματης δόμησης θα λάβουν τροποποιημένα στοιχεία τα οποία αποτελούν ένα υπερσύνολο όλων των τροποποιημένων στοιχείων που παρέχονται στις λειτουργίες επεξεργασίας POST_CHANGE από την ολοκλήρωση της τελευταίας δόμησης παρασκηνίου. Όπως και πριν, θα επιτρέπεται στις λειτουργίες ακρόασης αυτόματης δόμησης να τροποποιούν το χώρο εργασίας ενώ αυτό δεν θα επιτρέπεται στις λειτουργίες ακρόασης που έπονται των αλλαγών.

Δεν ισχύει πλέον ότι με την ολοκλήρωση μιας λειτουργίας αλλαγής του χώρου εργασίας οι λειτουργίες ακρόασης συμβάντων AUTO_BUILD θα ειδοποιούνταν. Ο κώδικας πελάτη που καταχωρεί λειτουργίες ακρόασης αλλαγής πόρων με την IWorkspace.addResourceChangeListener(IResourceChangeListener) είναι απίθανο να επηρεαστεί από αυτή την αλλαγή επειδή δεν γινόταν ποτέ αναφορά των συμβάντων AUTO_BUILD σε αυτές τις λειτουργίες ακρόασης. Ωστόσο, οι πελάτες που χρησιμοποιούν την IWorkspace.addResourceChangeListener(IResourceChangeListener,int) και καθορίζουν μια μάσκα συμβάντος που περιέχει συμβάντα AUTO_BUILD είναι πιθανόν να αλλάξουν συμπεριφορά λόγω της αλλαγής αυτής, εάν κάνουν υποθέσεις σχετικά με το πότε εκτελούνται οι λειτουργίες ακρόασης αυτόματης δόμησης ή το νήμα στο οποίο εκτελούνται. Για παράδειγμα, εάν μια λειτουργία ακρόασης αυτόματης δόμησης ενημερώνει ένα μοντέλο τομέα ώστε να εκφράζονται οι αλλαγές στο χώρο εργασίας, τότε αυτή η ενημέρωση μπορεί να μην γινόταν όταν επέστρεφε η λειτουργία αλλαγής του χώρου εργασίας. Αξίζει να σημειωθεί ότι μόνο ο κώδικας επιπέδου περιβάλλοντος χρήστη μπορεί να επηρεαστεί με αυτόν τον τρόπο. Ο κώδικας επιπέδου πυρήνα, ο οποίος καλείται μέσω του API, μπορεί να κληθεί εντός της εμβέλειας μιας IWorkspaceRunnable, έτσι ώστε δεν μπορεί ποτέ να είναι βέβαιος σχετικά με το πότε θα γίνει κλήση των λειτουργιών ακρόασης αλλαγής πόρων. Η προτεινόμενη διόρθωση για αυτό το πρόβλημα είναι να χρησιμοποιηθεί το POST_CHANGE αντί των λειτουργιών ακρόασης δόμησης, εάν είναι απαραίτητο να υπάρχει ειδοποίηση πριν την ολοκλήρωση της λειτουργίας.

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

Δεν είναι πλέον σίγουρο ότι όλες οι αλλαγές πόρων που συμβαίνουν κατά τη δυναμική εμβέλεια μιας IWorkspaceRunnable θα ομαδοποιηθούν σε μια μοναδική ειδοποίηση. Αυτός ο μηχανισμός μπορεί να χρησιμοποιηθεί για την ομαδοποίηση αλλαγών με σκοπό την αποφυγή περιττών δομήσεων ειδοποιήσεων αλλά η πλατφόρμα μπορεί να αποφασίσει την εκτέλεση ειδοποιήσεων κατά τη διάρκεια της λειτουργίας. Αυτή η αλλαγή της συμφωνίας API δεν είναι πιθανόν να αποτελεί αλλαγή συμπεριφοράς για τους υπάρχοντες πελάτες. Είναι ισοδύναμο με την απόφαση της πλατφόρμας να καλεί περιοδικά την IWorkspace.checkpoint κατά τη διάρκεια χρονοβόρων λειτουργιών. Ο λόγος αυτής της αλλαγής είναι ότι είναι δυνατόν πολλαπλά νήματα να τροποποιούν το χώρο εργασίας ταυτόχρονα. Όταν ένα νήμα ολοκληρώσει την τροποποίηση του χώρου εργασίας, απαιτείται μια ειδοποίηση για την αποφυγή προβλημάτων αποκριτικότητας, ακόμα και αν η άλλη λειτουργία δεν έχει ολοκληρωθεί ακόμα. Αυτή η αλλαγή επιτρέπει επίσης στους χρήστες να ξεκινούν εργασία σε ένα σύνολο πόρων πριν την ολοκλήρωση της λειτουργίας. Για παράδειγμα, ένας χρήστης μπορεί ξεκινήσει την αναζήτηση αρχείων σε ένα έργο το οποίο βρίσκεται σε διεργασία ανάληψης ελέγχου του. Η νέα μέθοδος IWorkspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) διαθέτει έναν προαιρετικό ενδείκτη, AVOID_UPDATE, τον οποίο μπορούν να χρησιμοποιήσουν οι λειτουργίες ως υπόδειξη στην πλατφόρμα για να καθοριστεί εάν είναι επιθυμητές περιοδικές ενημερώσεις.

23. Επεκτάσεις ρουτίνας χειρισμού ροής URL

Τι επηρεάζεται: Οι πρόσθετες λειτουργίες που συνεισφέρουν επεκτάσεις στο σημείο επέκτασης org.eclipse.core.runtime.urlHandlers .

Περιγραφή: Η συμφωνία για το σημείο επέκτασης org.eclipse.core.runtime.urlHandlers έχει αλλάξει ώστε να χρησιμοποιεί την υπηρεσία ρουτίνας χειρισμού ροής URL που παρέχεται από το OSGi. Η υποστήριξη OSGi είναι ανώτερη από αυτή που υπήρχε στο Eclipse 2.1 και χειρίζεται σωστά τις δυναμικές ρουτίνες χειρισμού. Λόγω των διαφόρων σχεδιαστικών ζητημάτων αναφορικά με το βασικό μηχανισμό ρουτίνας χειρισμού URL Java, το URLStreamHandlers που καταχωρείται με την υπηρεσία ρουτίνας χειρισμού OSGi πρέπει να υλοποιούν την org.osgi.service.url.URLStreamHandlerService.

Απαιτούμενη ενέργεια: Παλαιότερα η κλάση ρουτίνας χειρισμού έπρεπε να υλοποιεί την java.net.URLStreamHandler και να επεκτείνει το σημείο επέκτασης urlHandlers. Το σημείο επέκτασης δεν υποστηρίζεται πλέον και η ρουτίνα χειρισμού πρέπει να ενημερωθεί για να υλοποιεί τη διεπαφή org.osgi.service.url.URLStreamHandlerService. Το πλαίσιο OSGi παρέχει μια αφηρημένη βασική κλάση (org.osgi.service.url.AbstractURLStreamHandlerService) η οποία μπορεί με μη κοινό τρόπο να αποτελέσει υποκλάση για να παίξει αυτό το ρόλο.

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

    Hashtable properties = new Hashtable(1);
    properties.put(URLConstants.URL_HANDLER_PROTOCOL, new String[] {MyHandler.PROTOCOL});
    String serviceClass = URLStreamHandlerService.class.getName();
    context.registerService(serviceClass, new MyHandler(), properties);

24. Σειρά φόρτωσης κλάσεων

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

Περιγραφή: Στις εκδοχές Eclipse 2.x, οι φορτωτές κλάσεων αναζητούν κλάσεις με την ακόλουθη σειρά: συμβουλεύονται (1) το φορτωτή γονικών κλάσεων (στην πράξη αυτό αποτελεί το φορτωτή κλάσεων εκκίνησης Java), κατόπιν (2) τα περιεχόμενα διαδρομής κλάσεών του και τέλος (3) όλα τα προαπαιτούμενα στοιχεία του με τη σειρά που έχει δηλωθεί. Το OSGi προσφέρει μια βελτίωση αυτού του μοντέλου. Με αυτή την προσέγγιση ο φορτωτής κλάσεων θα συμβουλευτεί (1) το φορτωτή γονικών κλάσεων (και σε αυτή την περίπτωση αποτελεί αποτελεσματικά το φορτωτή κλάσεων εκκίνησης Java) και έπειτα είτε (2a) ένα μοναδικό προαπαιτούμενο στοιχείο, το οποίο είναι γνωστό ότι συνεισφέρει κλάσεις στο πακέτο για το οποίο υποβάλλεται ερώτημα, είτε (2b) τις δικές του καταχωρήσεις διαδρομής κλάσεων για την κλάση που επιθυμείτε.

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

Για παράδειγμα, στην περίπτωση των πρόσθετων λειτουργιών Xerces και Xalan, και οι δύο περιέχουν διάφορες κλάσεις από τα πακέτα org.xml. Χρησιμοποιώντας την πρώτη προσέγγιση, η πρόσθετη λειτουργία Xerces θα έβλεπε το αντίγραφό του των κλάσεων αυτών, ενώ η πρόσθετη λειτουργία Xalan θα έβλεπε το αντίγραφό τους. Εφόσον αυτές οι πρόσθετες λειτουργίες χρειάζεται να επικοινωνήσουν, πραγματοποιείται η ClassCastExceptions. Χρησιμοποιώντας τη δεύτερη προσέγγιση, μόνο μία από τις πρόσθετες λειτουργίες συνεισφέρει τις διπλότυπες κλάσεις και οι δύο πρόσθετες λειτουργίες βλέπουν τα ίδια αντίγραφα.

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

25. Δεν έχει οριστεί προστατευμένος τομέας για το φορτωτή κλάσεων

Τι επηρεάζεται: Οι πρόσθετες λειτουργίες που αναμένουν ότι ο προστατευόμενος τομέας του φορτωτή κλάσεών τους είναι πάντα καθορισμένος.

Περιγραφή: Στο Eclipse 2.1 οι φορτωτές κλάσεων πρόσθετων λειτουργιών αποτελούσαν java.security.SecureClassloaders και γι αυτό το λόγο διέθεταν πάντα ένα καθορισμένο προστατευόμενο τομέα. Στο Eclipse 3.0 οι φορτωτές κλάσεων δεν επεκτείνουν την SecureClassloader και καθορίζουν τον προστατευόμενο τομέα μόνο εάν ενεργοποιηθεί η ασφάλεια Java (δεν αποτελεί τυπική περίπτωση).

Απαιτούμενη ενέργεια: Η ενέργεια που απαιτείται εξαρτάται από το σενάριο στο οποίο η πρόσθετη λειτουργία χρησιμοποιεί τον προστατευόμενο τομέα.

26. Μετατροπή αντικειμένου PluginModel

Τι επηρεάζεται: Οι πρόσθετες λειτουργίες που μετατρέπουν αντικείμενα του είδους org.eclipse.core.runtime.IPlugin* σε org.eclipse.core.runtime.model.Plugin*Model. Παρόλο που η σχέση μεταξύ των διεπαφών αυτών και των κλάσεων μοντέλων δεν καθορίζεται στο API του Eclipse 2.1, ζητούσαμε ρητά αυτή την αλλαγή καθώς βρήκαμε χρήσεις πρόσθετων λειτουργιών που βασίζονταν σε αυτή τη σχέση στην υλοποίηση της έκδοσης 2.1.

Περιγραφή: Το API του Eclipse παρέχει μια σειρά διεπαφών (π.χ., η IPluginDescriptor) και τις επονομαζόμενες κλάσεις "μοντέλων" (π.χ., η PluginDescriptorModel) που σχετίζονται με τις πρόσθετες λειτουργίες και το μητρώο πρόσθετων λειτουργιών. Στην υλοποίηση του Eclipse 2.1 συμβαίνει οι κλάσεις μοντέλων να υλοποιούν τις σχετικές διεπαφές. Στο νέο περιβάλλον εκτέλεσης που βασίζεται στο OSGi, έχει γίνει επανεπεξεργασία σε σημαντικό βαθμό του μητρώου πρόσθετων λειτουργιών για να επιτρέπεται ο διαχωρισμός μεταξύ των πτυχών φόρτωσης κλάσεων και προαπαιτούμενων στοιχείων των πρόσθετων λειτουργιών από τη μια πλευρά και των επεκτάσεων και σημείων επέκτασης από την άλλη. Το περιβάλλον εκτέλεσης του Eclipse 3.0 ως έχει δεν είναι σε θέση να διατηρήσει τη σχέση υλοποίησης που υπάρχει στην εκδοχή 2.1.

Απαιτούμενη ενέργεια: Για τις πρόσθετες λειτουργίες που βασίζονται σε αυτή τη σχέση που δεν είναι API χρειάζεται να γίνει επανεπεξεργασία του κώδικά τους σύμφωνα με την περίπτωση χρήσης τους. Περισσότερες πληροφορίες σχετικά με τα παραπάνω δίνονται στην ενότητα προτεινόμενων αλλαγών σε αυτό το έγγραφο καθώς και στο Javadoc για τις σχετικές κλάσεις και μεθόδους.

27. Ημιτελής υλοποίηση ILibrary

Τι επηρεάζεται: Οι πρόσθετες λειτουργίες που χρησιμοποιούν το org.eclipse.core.runtime.ILibrary.

Περιγραφή: Το νέο περιβάλλον εκτέλεσης διατηρεί τις καταχωρήσεις διαδρομής κλάσεων σε διαφορετική και μη συμβατή μορφή με αυτή του Eclipse. Συνεπώς το επίπεδο συμβατότητας δεν είναι σε θέση να μοντελοποιήσει σωστά τις υποκείμενες δομές OSGi ως αντικείμενα ILibrary. Η υποστήριξη συμβατότητας του περιβάλλοντος εκτέλεσης δημιουργεί αντικείμενα ILibrary αλλά πρέπει να υποθέσει προεπιλεγμένες τιμές για ο,τιδήποτε εκτός της διαδρομής της βιβλιοθήκης.

Απαιτούμενη ενέργεια: Οι χρήστες της ILibrary πρέπει να εξετάσουν την πρόσβαση στις επιθυμητές τιμές κεφαλίδας (π.χ., Bundle-Classpath) από την κατάλληλη δέσμη (δείτε Bundle.getHeaders()) και τη χρήση της κλάσης βοήθειας ManifestElement για την ερμηνεία των καταχωρήσεων. Δείτε την κλάση Javadoc για περισσότερες λεπτομέρειες.

28. Μη έγκυρες υποθέσεις αναφορικά με τη φόρμα των URL

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

Περιγραφή: Μέθοδοι όπως η IPluginDescriptor.getInstallURL() επιστρέφουν URL μια συγκεκριμένης μορφής. Παρά τη μη καθορισμένη μορφή τους, διάφορες πρόσθετες λειτουργίες κάνουν υποθέσεις με βάση την τρέχουσα υλοποίηση. Για παράδειγμα, μπορεί να αναμένουν να λάβουν ένα file: URL και χρησιμοποιούν την URL.getFile() και το χειρισμό java.io.File στο αποτέλεσμα. Μέχρι σήμερα αυτό αποτελούσε μια πραγματοποιήσιμη αλλά σχετικά εύθραυστη προσέγγιση. Για παράδειγμα, εάν εγκατασταθεί μια πρόσθετη λειτουργία σε έναν διαδικτυακό εξυπηρετητή, είναι δυνατή η επιστροφή ενός http: URL. Το νέο περιβάλλον εκτέλεσης του Eclipse 3.0 είναι ακόμα πιο ευέλικτο και ανοίγει περισσότερες δυνατότητες για την εκτέλεση ρυθμίσεων (π.χ., η διατήρηση ολόκληρων πρόσθετων λειτουργιών σε αρχεία JAR παρά την ανάπτυξή τους σε καταλόγους). Δηλαδή ενώ το νέο περιβάλλον εκτέλεσης με βάση το OSGi δεν καταργήσει στην πραγματικότητα το API εκδοχής 2.1, εκθέτει περισσότερες περιπτώσεις όπου οι υποθέσεις που γίνονται στην τρέχουσα πρόσθετη λειτουργία είναι μη έγκυρες.

Απαιτούμενη ενέργεια: Οι μεταγραφείς πρόσθετων λειτουργιών πρέπει να εξασφαλίσουν ότι η πληροφορία στην οποία χρειάζονται πρόσβαση είναι διαθέσιμη μέσω της μεθόδου getResource() (και ότι βρίσκεται στη διαδρομή κλάσης) ή να χρησιμοποιήσουν το σχετικό API για πρόσβαση στα περιεχόμενα μιας πρόσθετης λειτουργίας (π.χ., η Bundle.getEntry(String)).

29. Μετακίνηση/διαγραφή μεθόδων BootLoader

Τι επηρεάζεται: Κώδικας που δεν αναφέρεται σε πρόσθετες λειτουργίες ο οποίος καλεί συγκεκριμένες μεθόδους από την κλάση org.eclipse.core.boot.BootLoader.

Περιγραφή: Οι στατικές μέθοδοι BootLoader.startup(), shutdown() και run() μετακινήθηκαν στο org.eclipse.core.runtime.adaptor.EclipseStarter, το οποίο αποτελεί τμήμα του πλαισίου OSGi. Αυτό το API αποτελεί τη διεπαφή μεταξύ του main() στο startup.jar και στο πλαίσιο OSGi /περιβάλλον εκτέλεσης Eclipse. Η αναδιάρθρωση του περιβάλλοντος εκτέλεσης δεν επέτρεπε σε αυτές τις μεθόδους να παραμένουν στην BootLoader. Η παλαιά κλάση BootLoader βρίσκεται στο επίπεδο συμβατότητας του περιβάλλοντος εκτέλεσης ενώ έχει καταργηθεί και οι μέθοδοι που μετακινήθηκαν έχουν στελεχωθεί έτσι ώστε να μην εκτελούν καμία ενέργεια.

Η παλαιά BootLoader.getRunnable() δεν έχει αντικατασταθεί καθώς το περιβάλλον εκτέλεσης δεν μπορεί πλέον να υποστηρίξει την απόκτηση μεμονωμένων εφαρμογών. Αντιθέτως οι χρήστες πρέπει να υποδείξουν την εφαρμογή που τους ενδιαφέρει κατά την εκκίνηση της πλατφόρμας.

Απαιτούμενη ενέργεια: Γενικά αυτό το API χρησιμοποιείται από πολύ λίγους ανθρώπους (δεν μπορεί να χρησιμοποιηθεί μέσα από μια πρόσθετη λειτουργία του Eclipse). Στη σπάνια περίπτωση που θα χρησιμοποιηθεί, ο κώδικας πρέπει να προσαρμοστεί ώστε να χρησιμοποιεί τις αντίστοιχες μεθόδους στο EclipseStarter.

30. Η εξαγωγή πρόσθετης λειτουργίας δεν περιλαμβάνει αυτόματα τα αρχεία JAR της πρόσθετης λειτουργίας

Τι επηρεάζεται: Όλες οι πρόσθετες λειτουργίες.

Περιγραφή: Στο Eclipse 2.1 η γραμμή bin.includes μιας πρόσθετης λειτουργίας από το αρχείο build.properties τους δεν χρειάζεται να περιέχει τη λίστα των αρχείων JAR από τη δήλωση βιβλιοθήκης τους στο αρχείο plugin.xml καθώς αυτά τα αρχεία JAR προστέθηκαν δωρεάν. Στο Eclipse 3.0 η λίστα των αρχείων στην ενότητα bin.includes του build.properties αποτελεί μια εκτενής λίστα και πρέπει να περιλαμβάνει όλα τα αρχεία τα οποία οι προγραμματιστές πρόσθετων λειτουργιών σκοπεύουν να συμπεριλάβουν στην πρόσθετη λειτουργία τους κατά τη διαδικασία δόμησης ή εξαγωγής.

Απαιτούμενη ενέργεια: Βεβαιωθείτε ότι η γραμμή bin.includes από το αρχείο build.properties περιλαμβάνει όλα τα αρχεία JAR που περιέχονται στο αρχείο plugin.xml.

31. Εξαγωγή εκ νέου του API περιβάλλοντος εκτέλεσης

Τι επηρεάζεται: Οι πρόσθετες λειτουργίες οι οποίες εκθέτουν το API που περιλαμβάνει στοιχεία από αλλαγμένο API περιβάλλοντος εκτέλεσης.

Περιγραφή: Διάφορες πρόσθετες λειτουργίες εκθέτουν το API που περιλαμβάνει στοιχεία από το API περιβάλλοντος εκτέλεσης. Με τις αλλαγές στο περιβάλλον εκτέλεσης του Eclipse 3.0 που περιγράφονται εδώ, οι πρόσθετες λειτουργίες πελατών πρέπει να επανεξετάσουν τη χρήση του περιβάλλοντος εκτέλεσης API στο δικό τους API.

Απαιτούμενη ενέργεια: Αυτό το σενάριο είναι αρκετά σπάνιο καθώς λίγα στοιχεία του API περιβάλλοντος εκτέλεσης του Eclipse αλλάζουν. Αναλόγως το σενάριο, οι πελάτες μπορεί να χρειαστεί να αλλάξουν το API τους ή να συνεχίσουν να βασίζονται στο επίπεδο συμβατότητας.

32. Μέθοδοι ανάλυσης πρόσθετων λειτουργιών στην πλατφόρμα

Τι επηρεάζεται: Οι πρόσθετες λειτουργίες που χρησιμοποιούν το org.eclipse.core.runtime.Platform.parsePlugins(..., Factory).

Περιγραφή: Η μέθοδος org.eclipse.core.runtime.Platform.parsePlugins(..., Factory) έχει μετακινηθεί. Το API που συσχετίζεται με το όρισμα Factory έχει μετακινηθεί από την πρόσθετη λειτουργία org.eclipse.core.runtime στην πρόσθετη λειτουργία org.eclipse.core.runtime.compatibility (η οποία εξαρτάται από την πρόσθετη λειτουργία περιβάλλοντος εκτέλεσης). Συνεπώς η μέθοδος ανάλυσης έχει επίσης μετακινηθεί.

Απαιτούμενη ενέργεια: Οι χρήστες αυτής της μεθόδου πρέπει να χρησιμοποιούν την ίδια μέθοδο στην κλάση org.eclipse.core.runtime.model.PluginRegistryModel.

33. Βιβλιοθήκες πρόσθετων λειτουργιών που παρέχονται από τμήματα

Τι επηρεάζεται: Οι πρόσθετες λειτουργίες που καθορίζουν κώδικα στη διαδρομή κλάσεών τους αλλά δεν παρέχουν αυτόν τον κώδικα (π.χ., το αρχείο JAR παρέχεται από ένα τμήμα κώδικα, για παράδειγμα την πρόσθετη λειτουργία org.eclipse.swt).

Περιγραφή: Το νέο περιβάλλον εκτέλεσης πρέπει να μετατρέπει τα αρχεία plug.xml σε αρχεία manifest.mf στο παρασκήνιο. Αυτό επιτυγχάνεται μέσω ενός άμεσου μηχανικού μετασχηματισμού και μιας ανάλυσης των αρχείων jar που περιέχονται και παρέχονται από την πρόσθετη λειτουργία. Στην περίπτωση κατά την οποία μια πρόσθετη λειτουργία καθορίζει ένα αρχείο jar στη διαδρομή κλάσεών της αλλά δεν παρέχει το αρχείο jar, δεν υπάρχει κώδικας προς ανάλυση και ο μετατροπέας πρόσθετων λειτουργιών δεν μπορεί να δημιουργήσει ένα σωστό αρχείο manifest.mf.

Απαιτούμενη ενέργεια: Οι παροχείς τέτοιου είδους πρόσθετων λειτουργιών πρέπει είτε να αλλάξουν ώστε να παρέχουν το κατάλληλο αρχείο jar στην ίδια την πρόσθετη λειτουργία είτε να δημιουργήσουν με μη αυτόματο τρόπο/διατηρήσουν ένα αρχείο META-INF/MANIFEST.MF για την πρόσθετη λειτουργία τους. Συνήθως αυτό μπορεί να επιτευχθεί με τη χρήση του PDE για τη λήψη της αρχικής δήλωσης και την προσθήκη της κατάλληλης κεφαλίδας Παροχή-Πακέτο.

34. Αλλαγές σε σενάρια δόμησης

Τι επηρεάζεται: Σενάρια (π.χ., αρχεία build.xml του Ant) που ορίζουν διαδρομές κλάσεων, οι οποίες περιέχουν αρχεία jar που σχετίζονται με το περιβάλλον εκτέλεσης καθώς και καταλόγους κλάσεων.

Περιγραφή: Το νέο περιβάλλον εκτέλεσης περιέχει ένα πλήθος νέων πρόσθετων λειτουργιών και αρχείων jar. Η εισαγωγή τους επιβλήθηκε λόγω της βελτιστοποίησης της δομής του περιβάλλοντος εκτέλεσης σε τροποποιήσιμα μέρη. Για τις περισσότερες καταστάσεις περιβάλλοντος εκτέλεσης αυτές οι αλλαγές δεν έχουν επιπτώσεις. Ωστόσο, εάν διαθέτετε προσαρμοσμένα σενάρια build.xml (ή παρόμοια), τα οποία μεταγλωττίζουν κώδικα έναντι της org.eclipse.core.runtime, χρειάζεται να τα ενημερώσετε πριν αυτά να λειτουργήσουν σωστά. Ένα συνηθισμένο σενάριο περιέχει μια καταχώρηση διαδρομής κλάσεων σε μια εργασία <javac> που παραπέμπει στην πρόσθετη λειτουργία org.eclipse.core.runtime ως εξής:

    ../org.eclipse.core.runtime/bin;../org.eclipse.core.runtime/runtime.jar

Η πρόσθετη λειτουργία περιβάλλοντος εκτέλεσης συνεχίζει να περιέχει μεγάλο μέρος του αρχικού κώδικα περιβάλλοντος εκτέλεσης. Ωστόσο, διάφορα μέρη του περιβάλλοντος εκτέλεσης, τα οποία υπάρχουν μόνο για λόγους συμβατότητας, περιέχονται σε μια πρόσθετη λειτουργία συμβατότητας (org.eclipse.core.runtime.compatibility). Το μεγαλύτερο μέρος του νέου κώδικα περιβάλλοντος εκτέλεσης περιέχεται σε μια συλλογή πρόσθετων λειτουργιών (org.eclipse.osgi.*).

Απαιτούμενη ενέργεια: Οι προγραμματιστές χρειάζεται να προσθέσουν τις ακόλουθες καταχωρήσεις, όπου αυτό είναι απαραίτητο, για την εξάλειψη σφαλμάτων μεταγλώττισης. Παρατίθεται το πλήρες σύνολο των αρχείων jar που παρέχονται, ωστόσο οι συνήθεις χρήσεις απαιτούν μόνο ένα υποσύνολο στη διαδρομή κλάσεων κατά το χρόνο μεταγλώττισης. Ως συνήθως, η συμπερίληψη των καταλόγων /bin είναι προαιρετική. Οι καταχωρήσεις δίδονται εδώ σε λογικές ομάδες με βάση την πρόσθετη λειτουργία που τα παρέχει:

Επιπλέον, μπορεί να απαιτούνται τα ακόλουθα jar σε ειδικές περιπτώσεις:

Ενώ ενημερώνετε αυτού του είδους τα σενάρια, πρέπει επίσης να εκμεταλλευτείτε την ευκαιρία να εκκαθαρίσετε (π.χ., αφαιρέσετε) παραπομπές στην org.eclipse.core.boot. Αυτή η πρόσθετη λειτουργία είναι παλαιή και δεν περιέχει κανένα μέρος κώδικα. Οι καταχωρήσεις μπορούν να παραμείνουν στη διαδρομή κλάσεων αλλά δεν εξυπηρετούν κανένα σκοπό και πρέπει να αφαιρεθούν. Δείτε τι πρέπει να αφαιρεθεί:

    ../org.eclipse.core.boot/bin;../org.eclipse.core.boot/boot.jar

35. Αλλαγές στην εργασία Ant δόμησης PDE

Τι επηρεάζεται: Σενάρια (π.χ., αρχεία build.xml του Ant) που χρησιμοποιούν την εργασία eclipse.buildScript.

Περιγραφή: Η δόμηση PDE εισήγαγε μια νέα ιδιότητα στην εργασία eclipse.buildScript για τον έλεγχο της δημιουργίας των σεναρίων δόμησης πρόσθετων λειτουργιών. Αυτό επιβλήθηκε λόγω της εισαγωγής του νέου περιβάλλοντος εκτέλεσης με βάση το OSGi.

Απαιτούμενη ενέργεια: Εάν επιθυμείτε να χρησιμοποιήσετε το Eclipse 3.0 για τη δόμηση ενός προϊόντος με βάση την εκδοχή 2.1, τότε εισάγετε στο eclipse.buildScript την ιδιότητα "buildingOSGi" και ορίστε για αυτή την τιμή false. Για παράδειγμα:

<eclipse.buildScript ... buildingOSGi="false"/>

36. Αλλαγές στην εργασία Ant eclipse.build

Τι επηρεάζεται: Σενάρια (π.χ., αρχεία build.xml του Ant) που χρησιμοποιούν την εργασία eclipse.buildScript.

Περιγραφή: Η δόμηση PDE εισήγαγε μια νέα ιδιότητα στην εργασία eclipse.buildScript για τον έλεγχο της δημιουργίας των σεναρίων δόμησης πρόσθετων λειτουργιών. Αυτό επιβλήθηκε λόγω της εισαγωγής του νέου περιβάλλοντος εκτέλεσης με βάση το OSGi.

Απαιτούμενη ενέργεια: Εάν επιθυμείτε να χρησιμοποιήσετε το Eclipse 3.0 για τη δόμηση ενός προϊόντος με βάση την εκδοχή 2.1, τότε εισάγετε στο eclipse.buildScript την ιδιότητα "buildingOSGi" και ορίστε για αυτή την τιμή false. Για παράδειγμα:

<eclipse.buildScript ... buildingOSGi="false"/>

37. Αλλαγές στην εργασία Ant eclipse.fetch

Τι επηρεάζεται: Σενάρια (π.χ., αρχεία build.xml του Ant) που χρησιμοποιούν την εργασία eclipse.buildScript.

Περιγραφή: Η δόμηση PDE άλλαξε τη συμπεριφορά της εργασίας eclipse.fetch για να διευκολύνει τη δόμηση του eclipse με ένα αυτόματο στυλ δόμησης. Το στυλ των στοιχείων πλέον υποστηρίζει μόνο μια καταχώρηση κάθε φορά και αγνοείται πάντα η scriptName.

Απαιτούμενη ενέργεια: Εάν διαθέτατε μια λίστα καταχωρήσεων στο προσδιοριστικό "elements" μιας κλήσης eclipse.fetch, κατανείμετέ τις σε διαφορετικές κλήσεις της eclipse.fetch. Εάν συνηθίζατε να καθορίζετε το scriptName, σημειώστε ότι πλέον το σενάριο ανάκτησης που δημιουργείται ονομάζεται πάντα "fetch_{elementId}". Για παράδειγμα:

<eclipse.fetch elements="plugin@org.eclipse.core.runtime, feature@org.eclipse.platform" .../>

γίνεται

<eclipse.fetch elements="plugin@org.eclipse.core.runtime" .../>
<eclipse.fetch elements="feature@org.eclipse.platform" .../>

38. Αντικατάσταση του αρχείου install.ini

Το αρχείο install.ini δεν περιλαμβάνεται πλέον. Στη θέση του βρίσκεται το νέο αρχείο config.ini στον υποκατάλογο ρυθμίσεων. Τα προϊόντα που χρησιμοποιούσαν το αρχείο install.ini για τον καθορισμό μιας κύριας λειτουργίας (π.χ., για την παροχή πληροφοριών επωνυμίας) χρειάζεται να πραγματοποιήσουν αλλαγές στο αρχείο config.ini. Εκτός του νέου ονόματος αρχείου, έχουν αλλάξει επίσης τα ονόματα των κλειδιών.

Ως τιμή του κλειδιού feature.default.id στην εκδοχή 2.1 πρέπει να οριστεί η τιμή του νέου κλειδιού eclipse.product. Η τιμή του eclipse.application πρέπει να οριστεί στην τιμή "org.eclipse.ui.ide.workbench".

Τέλος, στην εκδοχή 2.1 η εικόνα της εικόνας εκκίνησης ήταν πάντα splash.bmp στον κατάλογο επωνυμιών πρόσθετων λειτουργιών. Στην εκδοχή 3.0 η θέση της εικόνας εκκίνησης παρέχεται ρητά από το κλειδί osgi.splashPath στο αρχείο config.ini.