blob: 89a5db58744feed4188cd815b030ec6d9455b83e [file] [log] [blame]
// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.diagnosticinspector;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import com.android.tools.r8.diagnostic.MissingDefinitionContext;
import com.android.tools.r8.diagnostic.MissingDefinitionInfo;
import com.android.tools.r8.diagnostic.internal.MissingDefinitionContextUtils;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.FieldReference;
import com.android.tools.r8.references.MethodReference;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FoundMissingDefinitionInfoSubject {
private final MissingDefinitionInfo missingDefinitionInfo;
private final Map<ClassReference, FoundMissingDefinitionContextSubject> classContexts =
new HashMap<>();
private final Map<FieldReference, FoundMissingDefinitionContextSubject> fieldContexts =
new HashMap<>();
private final Map<MethodReference, FoundMissingDefinitionContextSubject> methodContexts =
new HashMap<>();
public FoundMissingDefinitionInfoSubject(MissingDefinitionInfo missingDefinitionInfo) {
this.missingDefinitionInfo = missingDefinitionInfo;
missingDefinitionInfo
.getReferencedFromContexts()
.forEach(
context ->
MissingDefinitionContextUtils.accept(
context,
classContext ->
classContexts.put(
classContext.getClassReference(),
new FoundMissingDefinitionContextSubject(context)),
fieldContext ->
fieldContexts.put(
fieldContext.getFieldReference(),
new FoundMissingDefinitionContextSubject(context)),
methodContext ->
methodContexts.put(
methodContext.getMethodReference(),
new FoundMissingDefinitionContextSubject(context))));
}
public FoundMissingDefinitionInfoSubject assertExactContexts(
List<MissingDefinitionContext> expectedContexts) {
assertEquals(expectedContexts.size(), missingDefinitionInfo.getReferencedFromContexts().size());
expectedContexts.forEach(
expectedContext ->
MissingDefinitionContextUtils.accept(
expectedContext,
expectedClassContext -> {
FoundMissingDefinitionContextSubject subject =
classContexts.get(expectedClassContext.getClassReference());
assertNotNull(subject);
subject.assertEqualTo(expectedClassContext);
},
expectedFieldContext -> {
FoundMissingDefinitionContextSubject subject =
fieldContexts.get(expectedFieldContext.getFieldReference());
assertNotNull(subject);
subject.assertEqualTo(expectedFieldContext);
},
expectedMethodContext -> {
FoundMissingDefinitionContextSubject subject =
methodContexts.get(expectedMethodContext.getMethodReference());
assertNotNull(subject);
subject.assertEqualTo(expectedMethodContext);
}));
return this;
}
}