Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Advanced @Contract capabilities

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

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
25/100
Tipo de issue
Funcionalidade
Clareza
Precisa de esclarecimento
Status de atividade
Estagnada
Stack de tecnologia
java
Domínio
tooling

Direção de pesquisa

Comece revisando a anotação Contract e a sintaxe de exemplo nesta issue, incluindo o comportamento proposto de CacheReference e Reference. Determine se é possível especificar uma sintaxe de contrato avançada independente e quais regras de validação são necessárias; o trabalho estará concluído quando a sintaxe e os comportamentos compatíveis estiverem claramente definidos e acordados.

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

Descrição

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:

    @Contract("CacheReference -> param1; null -> fail; !null -> new")
    protected abstract CacheReference<K, V> advanceIntoCacheRef(Reference<V> 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.

Linguagem predominante
Kotlin
Estrelas
465
Forks
73
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

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.

Mais de JetBrains/java-annotations

Todas as issues de JetBrains/java-annotations

Issues semelhantes

Mais issues de Kotlin

Receba novas issues na sua caixa de entrada

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