// Copyright (c) 2022, 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.keepanno.testsource;

import com.android.tools.r8.keepanno.ast.KeepConsequences;
import com.android.tools.r8.keepanno.ast.KeepEdge;
import com.android.tools.r8.keepanno.ast.KeepItemPattern;
import com.android.tools.r8.keepanno.ast.KeepMethodNamePattern;
import com.android.tools.r8.keepanno.ast.KeepMethodPattern;
import com.android.tools.r8.keepanno.ast.KeepQualifiedClassNamePattern;
import com.android.tools.r8.keepanno.ast.KeepTarget;
import java.util.Collections;
import java.util.Set;

/**
 * Utility to get the AST edges for the various annotation test sources.
 *
 * <p>This makes it easier to share the test sources among tests (e.g., processor and asm tests).
 */
public class KeepSourceEdges {

  public static Set<KeepEdge> getExpectedEdges(Class<?> clazz) {
    if (clazz.equals(KeepClassAndDefaultConstructorSource.class)) {
      return getKeepClassAndDefaultConstructorSourceEdges();
    }
    throw new RuntimeException();
  }

  public static Set<KeepEdge> getKeepClassAndDefaultConstructorSourceEdges() {
    Class<?> clazz = KeepClassAndDefaultConstructorSource.class;
    // Build the class target.
    KeepQualifiedClassNamePattern name = KeepQualifiedClassNamePattern.exact(clazz.getTypeName());
    KeepItemPattern classItem = KeepItemPattern.builder().setClassPattern(name).build();
    KeepTarget classTarget = KeepTarget.builder().setItem(classItem).build();
    // Build the constructor target.
    KeepMethodPattern constructorMethod =
        KeepMethodPattern.builder().setNamePattern(KeepMethodNamePattern.exact("<init>")).build();
    KeepItemPattern constructorItem =
        KeepItemPattern.builder()
            .setClassPattern(name)
            .setMembersPattern(constructorMethod)
            .build();
    KeepTarget constructorTarget = KeepTarget.builder().setItem(constructorItem).build();
    // The consequet set is the class an its constructor.
    KeepConsequences consequences =
        KeepConsequences.builder().addTarget(classTarget).addTarget(constructorTarget).build();
    KeepEdge edge = KeepEdge.builder().setConsequences(consequences).build();
    return Collections.singleton(edge);
  }
}
