liquid-java / liquid-java/liquidjava
State checking for extending abstract classes
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Java
- Sterne
- 67
- Forks
- 36
- Ø Merge
- 10 T. 18 Std.
- Gemergte PRs (30 T.)
- 3
Beschreibung
Currently, reusing state refinements from an abstract superclass in a concrete class is not fully implemented, and gives an error like the one below.
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
}
}
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduziere den Bericht mithilfe der URLConnectionRefinements-Anmerkungen, URLExt und des Testurl-Beispiels. Beginne damit nachzuverfolgen, wie geerbte Zustandsverfeinerungen aus java.net.URLConnection überprüft werden, wenn Methoden auf URLExt aufgerufen werden. Erledigt ist die Aufgabe, wenn setDoInput(false) akzeptiert wird, während getContent() abgelehnt wird, weil das Objekt den verbundenen Zustand noch nicht erreicht hat.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100