Conversation
- QueryAppliedDirectiveArgument: remove @nonnull from Builder methods (import was dropped) - ResultPath: fix @nullable parent/segment dereferences with assertNotNull - ExecutionStepInfo: fix @nullable field dereference in getResultKey() - ExecutionContext: add assertNotNull for AtomicReference.get() calls on errors - SubscriptionExecutionStrategy: fix @nullable getField()/getDeferredCallContext() dereferences - AsyncSerialExecutionStrategy: fix @nullable getSubField()/getFieldValueObject() issues - DataFetcherExceptionHandlerParameters: mark getSourceLocation() @nullable - ExceptionWhileDataFetching: accept @nullable SourceLocation in constructor - TracingSupport/UnresolvedTypeError: fix @nullable getParent()/getFieldDefinition() dereferences - InstrumentationFieldParameters/Complete: fix @nullable getFieldDefinition() in getField() - ExecutionStepInfoFactory: fix @nullable getField() with assertNotNull - GraphQL: fix @nullable getDocument() with assertNotNull - ValueTraverser: fix @nullable newValue passed to ImmutableList.Builder.add() - MaxQueryDepthInstrumentation: mark getPathLength() param @nullable Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
| * This Exception indicates that the current execution should be aborted. | ||
| */ | ||
| @PublicApi | ||
| @NullMarked |
There was a problem hiding this comment.
I abruptly ran out of credits here - more is coming
There was a problem hiding this comment.
Given it's already 66 classes - the next wave will happen in a separate PR
Test Results 335 files ±0 335 suites ±0 5m 4s ⏱️ -2s Results for commit 0a77532. ± Comparison against base commit 739403f. This pull request removes 196 and adds 172 tests. Note that renamed tests count towards both.This pull request skips 1 test.♻️ This comment has been updated with latest results. |
All 66 classes annotated in Wave 1 (graphql.analysis, graphql.execution core, and graphql.execution sub-packages) are removed from the exemption list now that they carry @NullMarked. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
| graphql.execution.reactive.DelegatingSubscription | ||
| graphql.execution.reactive.SubscriptionPublisher | ||
| ``` | ||
|
|
There was a problem hiding this comment.
Worker 4 got removed because it was covered by previous PRs.
Work from worker 5 onwards will be in another PR. This PR is already quite large
- Explicitly state that @internal classes must not be annotated - Tighten exemption list cleanup instruction to remove only the annotated class Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
| * @return this builder | ||
| */ | ||
| public Builder valueLiteral(@NonNull Value<?> value) { | ||
| public Builder valueLiteral(Value<?> value) { |
There was a problem hiding this comment.
So you tuned OFF null marked but this is no less precise than it was. Perhaps a Object.requireNonNull ??
|
|
||
| @Nullable | ||
| public List<? extends GraphQLError> getErrors() { | ||
| return errors; |
There was a problem hiding this comment.
Maybe we should change this so that errors is always non null but some times empty?
Document has to nullable of course. Quasi breaking change but nicer - eg less nullable things
|
I'm impressed, I have the correct number of fingers on both hands. Models have come a long way. But I'm going to deduct marks for Python references creeping in! |
Test ReportTest Results
Code Coverage (Java 25)
Changed Class Coverage (1 class)
|


Another wave of JSpecify changes, this time featuring Claude's agent teams.
Keeping in draft while I review.
66 classes annotated
graphql.analysis (16 classes)
QueryComplexityCalculator,QueryComplexityInfo,QueryDepthInfo,QueryReducer,QueryTransformer,QueryTraversalOptions,QueryVisitor,QueryVisitorFieldArgumentEnvironment,QueryVisitorFieldArgumentInputValue,QueryVisitorFieldArgumentValueEnvironment,QueryVisitorFieldEnvironment,QueryVisitorFragmentDefinitionEnvironment,QueryVisitorFragmentSpreadEnvironment,QueryVisitorInlineFragmentEnvironment,QueryVisitorStub,ValueTraversergraphql.execution core (26 classes)
AbortExecutionException,AsyncExecutionStrategy,AsyncSerialExecutionStrategy,CoercedVariables,DataFetcherExceptionHandlerParameters,DataFetcherExceptionHandlerResult,DefaultValueUnboxer,ExecutionContext,ExecutionId,ExecutionStepInfo,ExecutionStrategyParameters,FetchedValue,FieldValueInfo,InputMapDefinesTooManyFieldsException,MergedSelectionSet,MissingRootTypeException,NonNullableValueCoercedAsNullException,NormalizedVariables,OneOfNullValueException,OneOfTooManyKeysException,ResultNodesInfo,ResultPath,SimpleDataFetcherExceptionHandler,SubscriptionExecutionStrategy,UnknownOperationException,UnresolvedTypeExceptiongraphql.execution sub-packages (24 classes)
ConditionalNodeDecision,QueryAppliedDirective,QueryAppliedDirectiveArgument,QueryDirectives,FieldValidationInstrumentation,SimpleFieldValidation,InstrumentationCreateStateParameters,InstrumentationExecuteOperationParameters,InstrumentationExecutionParameters,InstrumentationExecutionStrategyParameters,InstrumentationFieldCompleteParameters,InstrumentationFieldFetchParameters,InstrumentationFieldParameters,InstrumentationValidationParameters,TracingInstrumentation,TracingSupport,PreparsedDocumentEntry,ApolloPersistedQuerySupport,InMemoryPersistedQueryCache,PersistedQueryCacheMiss,PersistedQueryIdInvalid,PersistedQueryNotFound,DelegatingSubscription,SubscriptionPublisherReview passes
./gradlew compileJavapasses. The reviewer agent also fixed cascading NullAway errors in calling code (e.g.ResultPath,ExecutionStepInfo,ExecutionContext,TracingSupport) usingassertNotNull()where structural invariants guarantee non-null.