JetBrains / JetBrains/java-annotations

Advanced @Contract capabilities

Abierto
#30 3 comentarios 3 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Kotlin
Estrellas
463
Forks
72
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

I was thinking about possible extra possibilities for the `Contract` annotation.
I have this example already; I will add more as I stumble upon them:
Consider this method:
```java
@Contract("CacheReference -> param1; null -> fail; !null -> new")
protected abstract CacheReference advanceIntoCacheRef(Reference reference);
```
The method should do the following things; as described by the contract:
- Throw an NPE, if the parameter is `null`
- Wrap the parameter `Reference` (if not `instanceof CacheReference`, else see next) into a `CacheReference`
- Return first parameter if the first parameter is `instanceof CacheReference` (which is already imported due to return type; return types should be validated by `paramN`)

Now, obviously this contract won't work, because it doesn't know about more things than nulls; really. Given other capabilities of IntelliJ, it should be fairly easy coming up with a simple, standalone concept for advanced `Contract` syntax.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.