Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
1b2483b
migrated AnalysisParams on record
rishikraj990 Dec 29, 2025
9c7e5d3
migrated CollectLikeMethodRecord on record
rishikraj990 Dec 29, 2025
ed33a43
migrated MethodAnnotationsRecord on record
rishikraj990 Dec 29, 2025
75a2d78
migrated FieldRef on record
rishikraj990 Dec 29, 2025
c43b083
migrated MethodClassAndName on record
rishikraj990 Dec 29, 2025
76cf410
remove unsed import
rishikraj990 Dec 29, 2025
9ebfd92
migrated CollectRecordAndInnerMethod on record
rishikraj990 Dec 29, 2025
506e4c4
migrated FieldInitEntities on record
rishikraj990 Dec 29, 2025
a14c9ce
migrated CfgParams from AutoValue to direct
rishikraj990 Dec 29, 2025
9de1799
removed auto-value dependencies
rishikraj990 Dec 29, 2025
32806d6
replace java doc
rishikraj990 Dec 29, 2025
5dd8b69
remove autovalue dependencies for model gen module
rishikraj990 Dec 29, 2025
f7fd4bd
java doc correction
rishikraj990 Dec 29, 2025
21d6359
correcting
rishikraj990 Dec 29, 2025
3000a24
Merge branch 'master' into autoValue2Records
rishikraj990 Jan 2, 2026
f8671ff
Updating the java doc
rishikraj990 Jan 3, 2026
fa305c1
remove autoValue from build gradle
rishikraj990 Jan 3, 2026
91f0cdc
Merge branch 'master' into autoValue2Records
rishikraj990 Jan 10, 2026
b449530
applied spotlessApply
rishikraj990 Jan 10, 2026
d85b929
resolved nullable warning
rishikraj990 Jan 10, 2026
06ccd25
restore autovalue for benchmark
msridhar Jan 10, 2026
c2e6bda
updated java doc by moving details to record rather than in method
rishikraj990 Jan 11, 2026
c67a209
Refactor ContractsTests to use Java text blocks (#1435)
cobayo Jan 11, 2026
158fbd2
Update Error Prone and errorprone-plugin versions (#1434)
msridhar Jan 12, 2026
daec884
convert docs
msridhar Jan 13, 2026
99049cb
Merge branch 'master' into autoValue2Records
msridhar Jan 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ subprojects { project ->
"-parameters",
]
options.errorprone {
// disable warnings in generated code; AutoValue code fails UnnecessaryParentheses check
// disable warnings in generated code; fails UnnecessaryParentheses check
disableWarningsInGeneratedCode = true
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably we can just get rid of this line now?


// https://github.com/uber/NullAway/issues/1398
Expand Down
3 changes: 0 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ check-framework = "3.49.2"
support = "27.1.1"
wala = "1.6.12"
commons-cli = "1.4"
auto-value = "1.11.1"
auto-service = "1.1.1"
google-java-format = "1.30.0"
android-gradle-plugin = "8.13.0"
Expand Down Expand Up @@ -58,8 +57,6 @@ android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref
gradle-maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "gradle-maven-publish-plugin" }

# --- APT (Annotation Processing) ---
auto-value = { module = "com.google.auto.value:auto-value", version.ref = "auto-value" }
auto-value-annotations = { module = "com.google.auto.value:auto-value-annotations", version.ref = "auto-value" }
auto-service = { module = "com.google.auto.service:auto-service", version.ref = "auto-service" }
auto-service-annotations = { module = "com.google.auto.service:auto-service-annotations", version.ref = "auto-service" }
jakarta-inject = { module = "jakarta.inject:jakarta.inject-api", version.ref = "jakarta-inject" }
Expand Down
3 changes: 0 additions & 3 deletions library-model/library-model-generator/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,5 @@ plugins {
dependencies {
implementation libs.guava

compileOnly libs.auto.value.annotations
annotationProcessor libs.auto.value

testImplementation libs.junit4
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
package com.uber.nullaway.libmodel;

import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;

/** A record describing the annotations associated with a java method and its arguments. */
@AutoValue
public abstract class MethodAnnotationsRecord {
/** A record describing the annotations associated with a java method and its arguments.
* Generates by Record
*/

public record MethodAnnotationsRecord(ImmutableSet<String> methodAnnotations,
ImmutableSet<Integer> typeParamNullableUpperbounds,
ImmutableMap<Integer, ImmutableSet<String>> argumentAnnotations) {

public static MethodAnnotationsRecord create(
ImmutableSet<String> methodAnnotations,
ImmutableSet<Integer> typeParamNullableUpperbounds,
ImmutableMap<Integer, ImmutableSet<String>> argumentAnnotations) {
return new AutoValue_MethodAnnotationsRecord(
return new MethodAnnotationsRecord(
methodAnnotations, typeParamNullableUpperbounds, argumentAnnotations);
}

abstract ImmutableSet<String> methodAnnotations();

abstract ImmutableSet<Integer> typeParamNullableUpperbounds();

abstract ImmutableMap<Integer, ImmutableSet<String>> argumentAnnotations();
}
2 changes: 0 additions & 2 deletions nullaway/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ configurations {

dependencies {
compileOnly project(":annotations")
compileOnly libs.auto.value.annotations
annotationProcessor libs.auto.value
compileOnly libs.auto.service.annotations
annotationProcessor libs.auto.service
// Using api following the guidance at https://jspecify.dev/docs/using#gradle
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

package com.uber.nullaway;

import com.google.auto.value.AutoValue;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
Expand Down Expand Up @@ -609,11 +608,11 @@ public boolean warnOnGenericInferenceFailure() {
return warnOnInferenceFailure;
}

@AutoValue
abstract static class MethodClassAndName {
record MethodClassAndName(String enclosingClass,
String methodName) {

static MethodClassAndName create(String enclosingClass, String methodName) {
return new AutoValue_ErrorProneCLIFlagsConfig_MethodClassAndName(enclosingClass, methodName);
return new MethodClassAndName(enclosingClass, methodName);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

MethodClassAndName record migration preserves value semantics

Using a record here keeps the previous AutoValue-style value semantics (field-based equals/hashCode) and works cleanly with the knownInitializers ImmutableSet. The factory and fromClassDotMethod logic remain unchanged in behavior.

If this type is only used inside ErrorProneCLIFlagsConfig, you could optionally mark the record private to keep the helper out of the public surface, but that's non-blocking.

🤖 Prompt for AI Agents
In nullaway/src/main/java/com/uber/nullaway/ErrorProneCLIFlagsConfig.java around
lines 611 to 616, the new MethodClassAndName record preserves value semantics
but should be made private if it’s only used inside ErrorProneCLIFlagsConfig;
change the declaration to a private record MethodClassAndName(...) and keep the
existing static factory and fromClassDotMethod logic unchanged so behavior
remains the same.


static MethodClassAndName fromClassDotMethod(String classDotMethod) {
Expand All @@ -623,8 +622,5 @@ static MethodClassAndName fromClassDotMethod(String classDotMethod) {
return MethodClassAndName.create(className, methodName);
}

abstract String enclosingClass();

abstract String methodName();
}
}
10 changes: 3 additions & 7 deletions nullaway/src/main/java/com/uber/nullaway/LibraryModels.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

package com.uber.nullaway;

import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
Expand Down Expand Up @@ -325,15 +324,12 @@ public String toString() {
}

/** Representation of a field as a qualified class name + a field name */
@AutoValue
abstract class FieldRef {

public abstract String getEnclosingClassName();

public abstract String getFieldName();
record FieldRef(String enclosingClassName,
String fieldName) {

public static FieldRef fieldRef(String enclosingClass, String fieldName) {
return new AutoValue_LibraryModels_FieldRef(enclosingClass, fieldName);
return new FieldRef(enclosingClass, fieldName);
}
}
}
88 changes: 42 additions & 46 deletions nullaway/src/main/java/com/uber/nullaway/NullAway.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import static java.lang.annotation.ElementType.TYPE_USE;

import com.google.auto.service.AutoService;
import com.google.auto.value.AutoValue;
import com.google.common.base.Verify;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMultimap;
Expand Down Expand Up @@ -2817,8 +2816,47 @@ public void setComputedNullness(ExpressionTree e, Nullness nullness) {
computedNullnessMap.put(e, nullness);
}

@AutoValue
abstract static class FieldInitEntities {
/**
* Generates by Record
* <p>
* Returns symbol for class.
* Symbol.ClassSymbol classSymbol()
* <p>
* Returns <code>@NonNull</code> instance fields that are not directly initialized at declaration.
* ImmutableSet<Symbol> nonnullInstanceFields()
* <p>
* Returns <code>@NonNull</code> static fields that are not directly initialized at declaration.
* ImmutableSet<Symbol> nonnullStaticFields();
* <p>
* Returns the list of instance initializer blocks (e.g. blocks of the form `class X { { //Code
* } } ), in the order in which they appear in the class.
* ImmutableList<BlockTree> instanceInitializerBlocks();
* <p>
* Returns the list of static initializer blocks (e.g. blocks of the form `class X { static {
* //Code } } ), in the order in which they appear in the class.
* ImmutableList<BlockTree> staticInitializerBlocks();
* <p>
* Returns constructors in the class.
* ImmutableSet<MethodTree> constructors();
* <p>
* Returns the list of non-static (instance) initializer methods. This includes methods
* annotated @Initializer, as well as those specified by -XepOpt:NullAway:KnownInitializers or
* annotated with annotations passed to -XepOpt:NullAway:CustomInitializerAnnotations.
* ImmutableSet<MethodTree> instanceInitializerMethods();
* <p>
* Returns the list of static initializer methods. This includes static methods
* annotated @Initializer, as well as those specified by -XepOpt:NullAway:KnownInitializers or
* annotated with annotations passed to -XepOpt:NullAway:CustomInitializerAnnotations.
* ImmutableSet<MethodTree> staticInitializerMethods();
*/
record FieldInitEntities(Symbol.ClassSymbol classSymbol,
ImmutableSet<Symbol> nonnullInstanceFields,
ImmutableSet<Symbol> nonnullStaticFields,
ImmutableList<BlockTree> instanceInitializerBlocks,
ImmutableList<BlockTree> staticInitializerBlocks,
ImmutableSet<MethodTree> constructors,
ImmutableSet<MethodTree> instanceInitializerMethods,
ImmutableSet<MethodTree> staticInitializerMethods) {

static FieldInitEntities create(
Symbol.ClassSymbol classSymbol,
Expand All @@ -2829,7 +2867,7 @@ static FieldInitEntities create(
Set<MethodTree> constructors,
Set<MethodTree> instanceInitializerMethods,
Set<MethodTree> staticInitializerMethods) {
return new AutoValue_NullAway_FieldInitEntities(
return new FieldInitEntities(
classSymbol,
ImmutableSet.copyOf(nonnullInstanceFields),
ImmutableSet.copyOf(nonnullStaticFields),
Expand All @@ -2840,47 +2878,5 @@ static FieldInitEntities create(
ImmutableSet.copyOf(staticInitializerMethods));
}

/** Returns symbol for class. */
abstract Symbol.ClassSymbol classSymbol();

/**
* Returns <code>@NonNull</code> instance fields that are not directly initialized at
* declaration.
*/
abstract ImmutableSet<Symbol> nonnullInstanceFields();

/**
* Returns <code>@NonNull</code> static fields that are not directly initialized at declaration.
*/
abstract ImmutableSet<Symbol> nonnullStaticFields();

/**
* Returns the list of instance initializer blocks (e.g. blocks of the form `class X { { //Code
* } } ), in the order in which they appear in the class.
*/
abstract ImmutableList<BlockTree> instanceInitializerBlocks();

/**
* Returns the list of static initializer blocks (e.g. blocks of the form `class X { static {
* //Code } } ), in the order in which they appear in the class.
*/
abstract ImmutableList<BlockTree> staticInitializerBlocks();

/** Returns constructors in the class. */
abstract ImmutableSet<MethodTree> constructors();

/**
* Returns the list of non-static (instance) initializer methods. This includes methods
* annotated @Initializer, as well as those specified by -XepOpt:NullAway:KnownInitializers or
* annotated with annotations passed to -XepOpt:NullAway:CustomInitializerAnnotations.
*/
abstract ImmutableSet<MethodTree> instanceInitializerMethods();

/**
* Returns the list of static initializer methods. This includes static methods
* annotated @Initializer, as well as those specified by -XepOpt:NullAway:KnownInitializers or
* annotated with annotations passed to -XepOpt:NullAway:CustomInitializerAnnotations.
*/
abstract ImmutableSet<MethodTree> staticInitializerMethods();
}
}
40 changes: 26 additions & 14 deletions nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import static com.uber.nullaway.NullabilityUtil.castToNonNull;
import static com.uber.nullaway.NullabilityUtil.findEnclosingMethodOrLambdaOrInitializer;

import com.google.auto.value.AutoValue;
import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
import com.google.common.cache.CacheBuilder;
Expand Down Expand Up @@ -352,13 +351,21 @@ public boolean isRunning(TreePath path, Context context, AccessPathNullnessPropa
return analysis.isRunning();
}

@AutoValue
abstract static class CfgParams {
// Should not be used for hashCode or equals
static final class CfgParams {
/**
* Records cannot declare extra instance fields (environment).
* Used direct replacement approach to migrate from AutoValue
*/
private final TreePath codePath;

private @Nullable ProcessingEnvironment environment;

private static CfgParams create(TreePath codePath, ProcessingEnvironment environment) {
CfgParams cp = new AutoValue_DataFlow_CfgParams(codePath);
private CfgParams(TreePath codePath) {
this.codePath = codePath;
}

static CfgParams create(TreePath codePath, ProcessingEnvironment environment) {
CfgParams cp = new CfgParams(codePath);
cp.environment = environment;
return cp;
}
Expand All @@ -367,21 +374,26 @@ ProcessingEnvironment environment() {
return castToNonNull(environment);
}

abstract TreePath codePath();
TreePath codePath() {
return codePath;
}
/*
* If needed, need to override these methods
* @Override
* public boolean equals(Object o) { ...codePath... }
*
* @Override
* public int hashCode() { ...codePath... }
*/
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, important to override these and only use the codePath field. Also can we override toString?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

}
Comment on lines 355 to 473
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

🧩 Analysis chain

🏁 Script executed:

cd nullaway && find . -name "DataFlow.java" -type f

Repository: uber/NullAway

Length of output: 113


🏁 Script executed:

wc -l nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java

Repository: uber/NullAway

Length of output: 124


🏁 Script executed:

sed -n '355,477p' nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java

Repository: uber/NullAway

Length of output: 4056


🏁 Script executed:

# Check for CfgParams usage throughout the file
rg -n "CfgParams" nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java

Repository: uber/NullAway

Length of output: 1063


🏁 Script executed:

# Check for LoadingCache and synchronization in the file
rg -n "LoadingCache|synchronized|volatile" nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java | head -20

Repository: uber/NullAway

Length of output: 277


🏁 Script executed:

# Check imports to see what caching framework is used
head -50 nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java | grep -E "^import"

Repository: uber/NullAway

Length of output: 1545


🏁 Script executed:

sed -n '93,155p' nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java

Repository: uber/NullAway

Length of output: 3507


🏁 Script executed:

# Check what happens in the CacheLoader.load() method
sed -n '97,155p' nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java

Repository: uber/NullAway

Length of output: 3349


🏁 Script executed:

# Check for all accesses to environment field or environment() method
rg -n "\.environment|environment\(\)" nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java

Repository: uber/NullAway

Length of output: 211


🏁 Script executed:

# Check if CfgParams instances are stored/retrieved outside of immediate cache usage
rg -n "CfgParams" nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java -A 2 -B 2

Repository: uber/NullAway

Length of output: 2940


Simplify CfgParams by initializing environment in the constructor.

The environment field is mutable and non-final, but this is not a practical thread-safety concern here. Each call creates a fresh CfgParams instance that is immediately passed to the cache's load() method, where the environment field is read synchronously. The Guava LoadingCache handles all necessary synchronization internally, and CfgParams instances are never shared across threads.

That said, the post-construction initialization pattern (lines 402-406) adds unnecessary complexity. Passing environment as a constructor parameter would be simpler and clearer without affecting caching behavior, since only codePath contributes to the cache key.

🤖 Prompt for AI Agents
In @nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java around lines
355 - 477, Change CfgParams to take ProcessingEnvironment in the constructor and
make the environment field final: replace the single-arg private
CfgParams(TreePath) and the static create(TreePath, ProcessingEnvironment)
factory with a constructor CfgParams(TreePath, ProcessingEnvironment) that
assigns both final fields, update environment() to return the final field as
before, and remove the post-construction mutation paths (and calls to create) so
callers (e.g., code that calls CfgParams.create(...) before passing to the cache
load) instead call new CfgParams(codePath, environment); keep
equals/hashCode/toString based only on codePath.


@AutoValue
abstract static class AnalysisParams {
record AnalysisParams(ForwardTransferFunction<?, ?> transferFunction, ControlFlowGraph cfg) {

private static AnalysisParams create(
ForwardTransferFunction<?, ?> transferFunction, ControlFlowGraph cfg) {
AnalysisParams ap = new AutoValue_DataFlow_AnalysisParams(transferFunction, cfg);
return ap;
return new AnalysisParams(transferFunction, cfg);
}

abstract ForwardTransferFunction<?, ?> transferFunction();

abstract ControlFlowGraph cfg();
}
Comment on lines 475 to 481
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Consider removing the redundant factory method.

The create() method simply wraps the record constructor without adding any logic. While it may preserve API compatibility with the previous AutoValue implementation, direct constructor usage is more idiomatic for records.

♻️ Optional: Call-sites can use the record constructor directly

At lines 158 and 350, replace:

-AnalysisParams aparams = AnalysisParams.create(transfer, cfg);
+AnalysisParams aparams = new AnalysisParams(transfer, cfg);

Then remove the create() method entirely:

 record AnalysisParams(ForwardTransferFunction<?, ?> transferFunction, ControlFlowGraph cfg) {
-
-    private static AnalysisParams create(
-        ForwardTransferFunction<?, ?> transferFunction, ControlFlowGraph cfg) {
-      return new AnalysisParams(transferFunction, cfg);
-    }
-
 }
🤖 Prompt for AI Agents
In @nullaway/src/main/java/com/uber/nullaway/dataflow/DataFlow.java around lines
479 - 486, The AnalysisParams.record defines a redundant static factory create()
that only delegates to the record constructor; remove the
create(ForwardTransferFunction<?, ?>, ControlFlowGraph) method and update all
call sites that use AnalysisParams.create(...) to use the record constructor
directly (new AnalysisParams(transferFunction, cfg)) or the canonical record
construction form with the same parameters, ensuring you update references in
the code paths that previously called create (e.g., the sites where
transferFunction and cfg are supplied).


/** A pair of Analysis and ControlFlowGraph. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

import static com.uber.nullaway.NullabilityUtil.castToNonNull;

import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.LinkedHashMultimap;
Expand Down Expand Up @@ -128,18 +127,15 @@ class StreamNullabilityPropagator implements Handler {
private final Map<MethodInvocationTree, Tree> observableCallToInnerMethodOrLambda =
new LinkedHashMap<>();

@AutoValue
abstract static class CollectRecordAndInnerMethod {
record CollectRecordAndInnerMethod(CollectLikeMethodRecord collectlikeMethodRecord,
Tree innerMethodOrLambda) {

static CollectRecordAndInnerMethod create(
CollectLikeMethodRecord collectlikeMethodRecord, Tree innerMethodOrLambda) {
return new AutoValue_StreamNullabilityPropagator_CollectRecordAndInnerMethod(
return new CollectRecordAndInnerMethod(
collectlikeMethodRecord, innerMethodOrLambda);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

CollectRecordAndInnerMethod record is a clean AutoValue replacement

The record-based CollectRecordAndInnerMethod plus the updated call sites using collectlikeMethodRecord() / innerMethodOrLambda() keep the previous semantics (immutable pair, correct equals/hashCode) while simplifying the implementation. No functional issues spotted.

Optionally, consider renaming the component to collectLikeMethodRecord for readability and consistency with the CollectLikeMethodRecord type name.

Also applies to: 375-382

🤖 Prompt for AI Agents
In
nullaway/src/main/java/com/uber/nullaway/handlers/StreamNullabilityPropagator.java
around lines 130-137 (and similarly 375-382), the record components use names
`collectlikeMethodRecord` and `innerMethodOrLambda`; rename the first component
to `collectLikeMethodRecord` to match the `CollectLikeMethodRecord` type and
improve readability, update the record constructor/factory and all call sites to
use the new accessor `collectLikeMethodRecord()` (and leave
`innerMethodOrLambda()` as-is), and ensure imports and usages compile after the
rename.


abstract CollectLikeMethodRecord getCollectLikeMethodRecord();

abstract Tree getInnerMethodOrLambda();
}

// Maps collect calls in the observable call chain to the relevant (collect record, inner method
Expand Down Expand Up @@ -380,9 +376,9 @@ private void handleChainFromFilter(
collectCallToRecordsAndInnerMethodsOrLambdas.get(castToNonNull(outerCallInChain))) {
MapOrCollectMethodToFilterInstanceRecord record =
new MapOrCollectMethodToFilterInstanceRecord(
collectRecordAndInnerMethod.getCollectLikeMethodRecord(), filterMethodOrLambda);
collectRecordAndInnerMethod.collectlikeMethodRecord(), filterMethodOrLambda);
mapOrCollectRecordToFilterMap.put(
collectRecordAndInnerMethod.getInnerMethodOrLambda(), record);
collectRecordAndInnerMethod.innerMethodOrLambda(), record);
}
}
} while (outerCallInChain != null
Expand Down
Loading
Loading