liquid-java / liquid-java/liquidjava

State checking for extending abstract classes

Ouverte
#131 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

enhancement
Langage dominant
Java
Étoiles
67
Forks
36
Merge moyen
10 j 18 h
PR mergées (30 j)
3

Description

Currently, reusing state refinements from an abstract superclass in a concrete class is not fully implemented, and gives an error like the one below.
Image

Example for abstract class java.net.URLConnection:

@ExternalRefinementsFor("java.net.URLConnection")
@StateSet({"setup", "connected"})
public interface URLConnectionRefinements {
 
    @StateRefinement(to="setup(this)")
    public void URLConnection(URL url);

    @StateRefinement(from="setup(this)")
    public void setDoInput(boolean doinput);

    @StateRefinement(from="setup(this)", to="connected(this)")
    public void connect();

    @StateRefinement(from="connected(this)")
    public Object getContent();
 
}

Extended in class URLExt:

class URLExt extends URLConnection{

    public URLExt(URL url){
        super(url);
    }

    @Override
    public void connect() throws IOException {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'connect'");
    }
    
}```

Tested in:
```java
class Testurl {
    void test() throws URISyntaxException, IOException {

        URLExt u = new URLExt(new URI("http://example.com").toURL());
        u.setDoInput(false); // should not be an error but it is 
        u.getContent(); // should be an error

    }
}

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez le rapport à l’aide des annotations URLConnectionRefinements, de URLExt et de l’exemple Testurl. Commencez par retracer comment les raffinements d’état hérités de java.net.URLConnection sont vérifiés lorsque des méthodes sont invoquées sur URLExt. Le travail est terminé lorsque setDoInput(false) est accepté tandis que getContent() est rejeté, car l’objet n’a pas encore atteint l’état connecté.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.