kinds of diagnostics:
- broken accessibility contract
- name clash
- broken type contract
- unbound program element
- usually element names, but sometimes things like super()
- unimplemented inherited property
- missing required statement
- i.e. no return statement in method that returns a value, no super() call in constructor
- signature contract diagnostic
- i.e. too many/too few parameters to method call
- type mismatch
- unterminated syntax contract
- AccessibilityContractDiagnostic.java
- contract
- accessibility
- needs implicit/explicit split?
- contract
- ExplicitSignatureContractDiagnostic.java
- contract
- type? length? arity?
- explicit
- contract
- ExplicitTypeContractDiagnostic.java
- contract
- explicit
- type
- contract
- ImplicitTypeContractDiagnostic.java
- contract
- implicit
- type
- contract
- ImplicitUnboundNameDiagnostic.java
- unbound
- contract
- name
- implicit
- MissingInheritedPropertyDiagnostic.java
- contract
- explicit
- unbound name
- contract
- MissingReqiredStatementDiagnostic.java
- contract
- statement
- implicit
- contract
- NameClashDiagnostic.java
- clash
- explicit
- name
- clash
- StatementContractDiagnostic.java
- contract
- implicit
- missing statement :/
- contract
- SyntaxRequiresTypeDiagnostic.java
- type
- contract
- implicit
- TypeMismatchDiagnostic.java
- type
- contract
- explicit
- UnboundNameDiagnostic.java
- unbound name
- UndeclaredSuperclassDiagnostic.java
- unbound name?
- more like a dangling reference of some sort
- unbound name?
- UnterminatedSyntaxContractDiagnostic.java
- contract
- implicit
- syntax
- contract
- AccessibilityDiagnosticInterface.java
- ClashDiagnosticInterface.java