liquid-java / liquid-java/liquidjava

State checking for extending abstract classes

Aberta
#131 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

enhancement
Linguagem predominante
Java
Estrelas
67
Forks
36
Merge médio
10d 18h
PRs com merge (30d)
3

Descrição

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

    }
}

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Reproduza o relatório usando as anotações URLConnectionRefinements, URLExt e o exemplo Testurl. Comece rastreando como os refinamentos de estado herdados de java.net.URLConnection são verificados quando métodos são invocados em URLExt. Está concluído quando setDoInput(false) é aceito, enquanto getContent() é rejeitado porque o objeto ainda não atingiu o estado conectado.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
java
Domínio
compilers
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.