IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Discussion :

Projet sélectionné dans un "runtime-EclipseApplication"


Sujet :

Eclipse

  1. #1
    Membre à l'essai
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Septembre 2018
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Projet sélectionné dans un "runtime-EclipseApplication"
    Bonjour,

    Cela fait plusieurs jours que je bute sur un problème dans le développement d'un plugin Eclipse. Les caractéristiques de mon environnement :

    Eclipse IDE for RCP and RAP Developers

    Version: Photon Release (4.8.0)
    Build id: 20180619-1200

    Mon objectif est le suivant : je souhaite récupéré le projet java sélectionné pour que le plugin y crée un nouveau fichier. J'ai testé des tas de codes sans succès. Celui qui me semble correspondre le mieux à mes besoins est le suivant (j'y ai mis volontairement des traces pour observer ce qui se passe exactement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public IProject getCurrentProject() {
    		IProject project = null;
     
    		try {
    			IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    			if (window != null) {
    				ISelection iselection = window.getSelectionService().getSelection();
    				IStructuredSelection selection = (IStructuredSelection) iselection;
    				if (selection == null) {
    					System.err.println("La sélection est nulle");
    					return null;
    				}
     
    				Object firstElement = selection.getFirstElement();
    				System.out.println("Voici le premier élément de la sélection : " + firstElement);
     
    				if (firstElement instanceof IResource) {
    					project = ((IResource) firstElement).getProject();
    					System.out.println("Le premier élément est une IResource : " + project.getName());
    				} else if (firstElement instanceof PackageFragmentRoot) {
    					IJavaProject jProject = ((PackageFragmentRoot) firstElement).getJavaProject();
    					project = jProject.getProject();
    					System.out.println("Le premier élément est un PackageFragmentRoot : " + project.getName());
    				} else if (firstElement instanceof IJavaElement) {
    					IJavaProject jProject = ((IJavaElement) firstElement).getJavaProject();
    					project = jProject.getProject();
    					System.out.println("Le premier élément est une IJavaElement : " + project.getName());
    				}
    				else {
    					System.out.println("Aucune conversion possible pour "+firstElement.getClass());
    				}
    			}
    		} catch (Exception e) {
    			System.err.println("Quelque chose s'est mal passé....");
    			e.printStackTrace();
    		}
     
    		System.out.println("Aucune exception...");
     
    		return project;
    	}
    Le résultat de l'exécution, lorsque je sélectionne le dossier "src" du projet Java "TestWizard", est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Voici le premier élément de la sélection : src [in TestWizard]
      <default> (...)
    Aucune conversion possible pour class org.eclipse.jdt.internal.core.PackageFragmentRoot
    Aucune exception...
    Comme on peut le voir, la classe de l'élément est PackageFragmentRoot et devrait rendre vrai le test de la ligne 21. Or ce n'est pas le cas et c'est vraiment très étrange...J'ai lu que ce comportement arrive lorsque les classes concernées (qui sont identiques) sont chargées par des classloader différents...Sans plus de solutions...

    J'en suis là ! Je n'ai plus d'idée...Quelqu'un a-t-il déjà résolu ce type de problème ?
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    T'as essaye avec `instanof IPackageFragementRoot` (le prefix "I" est important) ?
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  3. #3
    Membre à l'essai
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Septembre 2018
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Oui, j'ai essayé, mais le résultat est toujours le même...

  4. #4
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Au lieu de mettre des traces, tu serais mieux d'utiliser le debugger.
    Pendant le debug, mets un breakpoint et voit ce qui se passe. Ca vaudrait le coup de verifier les classloaders: firstElement.getClass().getClassLoader().equals(PackageFragmentRoot.getClass().getClassLoader())
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  5. #5
    Membre à l'essai
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Septembre 2018
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Les ClassLoaders sont bien différents. As-tu une solution ?

    Merci encore pour tes réponses

  6. #6
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Citation Envoyé par NatCarmin Voir le message
    Les ClassLoaders sont bien différents. As-tu une solution ?
    Cherche a savoir pourquoi les classloaders sont differents. En debug, tu pourras les inspecter en detail pour mieux savoir d'ou ils viennent.
    Il n'y a theoriquement aucune raison qu'une meme classe de JDT puisse venir de 2 classloaders differents dans Eclipse lui-meme car le bundle org.eclipse.jdt.core est marque en singleton. Donc c'est que quelque part, ton code ou quelque chose d'autre decide de creer un nouveau class-loader. Note que si tu fais du weaving, de l'aspect ou des choses comme ca qui modifie le classloading, ca peut etre une piste a creuser.
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  7. #7
    Membre à l'essai
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Septembre 2018
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Depuis que je rencontre ce problème, je m'interroge sur la manière avec laquelle j'exécute mon plugin. Au départ, c'est un projet dans Mon IDE de développement (RCP-Photon). Lorsque j'exécute, je choisis naturellement "Eclipse Application" ce qui m'ouvre un second Eclipse, le fameux "runtime-EclipseApplication"...
    Mais je vais suivre tes conseils. Je vais débugger en détail, et peut-être que je verrai quelque chose qui me donnera la piste à suivre.

    Merci

Discussions similaires

  1. Modification d'un texte dans une fenetre "d'erreur"
    Par PAUL87 dans le forum Access
    Réponses: 8
    Dernier message: 21/10/2005, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo