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 Java Discussion :

Délire d'Eclipse ou pas ?


Sujet :

Eclipse Java

  1. #1
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut Délire d'Eclipse ou pas ?
    Salut,

    Après m'être bien cassé la tête à comprendre pourquoi mon programme faisait n'importe quoi, j'ai fini par tomber sur un cas qui compile sous Eclipse Neon (java 1.8), mais pas avec javac en console, et qui donne un résultat pour le moins délirant. Bien sûr, il y avait bien une erreur dans le code, et ça ne devrait pas compiler, donc encore moins s'exécuter. J'ai extrait le cas dans un snippet et reproduit.

    Si quelqu'un pouvait me confirmer que ça le fait aussi sur son environnement (et que ce n'est pas quelque chose de particulier sur mon environnement) avant que je poste le problème sur le bugzilla, ça m'intéresse.

    Voici le code :
    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
    43
    44
    45
    46
    47
    48
    49
    public class Snippet {
     
    	public static void main(String[] args) {
     
    		System.out.println("starting..."); 
     
    		if ( false ) {
    			System.out.println("this is executed, but it should not !?");
    		}
    		else {
     
    			System.out.println("this is still executed...");
    			sampleMethod(42, id1-> (p1, id2)-> otherMethod()));
     
    		}
     
    		System.out.println("...finishing"); 
     
    	}
     
     
    	public static interface I1 {
    		I2 create(String id);
    	}
     
    	public static interface I2 {
     
    		Class1 get(Class2 something, String somethingElse);
     
    	}
     
    	public static class Class1 {
     
    	}
     
    	public static class Class2 {
     
    	}
     
    	public static void sampleMethod(int param1, I1 param2) {
    		System.out.println("sample method invoked");
    	}
     
    	public static Class1 otherMethod() {
    		System.out.println("other method invoked");
    		return new Class1();
    	}
     
    }
    L'exécution donnant :
    starting...
    this is executed, but it should not !?
    this is still executed...
    Remarquez, il y a un délire++... dans la ligne sampleMethod(42, id1-> (p1, id2)-> otherMethod()));, je peux mettre n'importe quoi à la place des noms de méthodes (sampleMethod et otherMethod), genre eclipse(42, id1-> (p1, id2)-> delire())); ça continue de compiler et de s'exécuter...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    L'exécution pète puisqu'il n'arrive pas à la ligne System.out.println("...finishing");.
    Je vais tester et je reviens si j'arrive à reproduire ou non.

    A+.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    L'exécution pète puisqu'il n'arrive pas à la ligne System.out.println("...finishing");.
    L'invocation de sampleMethod ne se fait pas non plus, alors que la ligne juste avant s'exécute bien (affichage de "this is still executed..."). En résumé, ça fait n'importe quoi (exécute des instructions qui ne devraient pas l'être et n'en exécute pas qui devraient).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    J'ai pu reproduire le bug avec eclipse:
    Version: Neon.2 Release (4.6.2)
    Build id: 20161208-0600

    Et en plus il ne trouve même pas qu'il y a un dead code.


    EDIT: tu as posté pendant que je redigai

    A+.

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    En fait il n'arrive pas à trouver la parenthèse fermante en trop sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sampleMethod(42, id1-> (p1, id2)-> otherMethod())); // <-- il y a une parenthèse fermante en trop

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    En fait il n'arrive pas à trouver la parenthèse fermante en trop sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sampleMethod(42, id1-> (p1, id2)-> otherMethod())); // <-- il y a une parenthèse fermante en trop
    Oui, oui, c'est bien le problème (bien vu !) sauf que dans mon code, à l'origine, j'en avais beaucoup plus (utilisation de builder dans un stream avec lambdas) et que ça été fastidieux de la repérer.

    Sinon, cool, déjà un autre qui reproduit... je vais poster sur le bugzilla.

    Citation Envoyé par andry.aime Voir le message
    Et en plus il ne trouve même pas qu'il y a un dead code.
    Je crois que le parser est complètement dans les choux à cause de cette parenthèse supplémentaire et que l'AST résultant est complètement faux. Enfin, c'est pas tout fait un AST le résultat du JavaParser de Eclpse, justement parce qu'il est capable de parser du code qui est mal structuré, c'est un arbre de tokens. Je suppose que celui-ci est partiel et que toutes les instructions n'y figure pas. En revanche, je ne sais pas comment fonctionne la compilation dans Eclipse.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/11/2007, 13h51
  2. Ant OK mais Eclipse+Ant pas OK :-(
    Par PhENTZ dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/05/2007, 00h03
  3. Test d'applet reussi sous Eclipse mais pas sous firefox
    Par TabrisLeFol dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 18/01/2007, 22h52
  4. [Applet]Marche sous Eclipse mais pas sous un Browser
    Par leminipouce dans le forum Applets
    Réponses: 2
    Dernier message: 29/05/2006, 18h38
  5. Programme fonctionnant sur Eclipse mais pas avec le jar?
    Par kirik dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 10/02/2004, 13h43

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