// Copyright (c) 2017, 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.naming;

import com.android.tools.r8.SourceFileEnvironment;
import com.android.tools.r8.SourceFileProvider;
import com.android.tools.r8.graph.AppView;

/** Computes the source file provider based on the proguard configuration if none is set. */
public class SourceFileRewriter {

  private final AppView<?> appView;

  public SourceFileRewriter(AppView<?> appView) {
    this.appView = appView;
  }

  public void run() {
    if (appView.options().sourceFileProvider != null) {
      return;
    }
    appView.options().sourceFileProvider = computeSourceFileProvider();
  }

  public SourceFileProvider computeSourceFileProvider() {
    if (!appView.options().getProguardConfiguration().getKeepAttributes().sourceFile) {
      return rewriteToDefaultSourceFile();
    }
    if (appView.options().forceProguardCompatibility) {
      return computeCompatProvider();
    }
    return computeNonCompatProvider();
  }

  private SourceFileProvider computeCompatProvider() {
    // Compatibility mode will only apply -renamesourcefileattribute when minifying names.
    if (appView.options().isMinifying()) {
      String renaming = getRenameSourceFileAttribute();
      if (renaming != null) {
        return rewriteTo(renaming);
      }
    }
    return null;
  }

  private SourceFileProvider computeNonCompatProvider() {
    String renaming = getRenameSourceFileAttribute();
    if (renaming != null) {
      return rewriteTo(renaming);
    }
    if (appView.options().isMinifying()) {
      // TODO(b/202367773): This should also apply if optimizing.
      return rewriteToDefaultSourceFile();
    }
    return null;
  }

  private String getRenameSourceFileAttribute() {
    return appView.options().getProguardConfiguration().getRenameSourceFileAttribute();
  }

  private SourceFileProvider rewriteToDefaultSourceFile() {
    return rewriteTo(appView.dexItemFactory().defaultSourceFileAttributeString);
  }

  private SourceFileProvider rewriteTo(String renaming) {
    return new SourceFileProvider() {
      @Override
      public String get(SourceFileEnvironment environment) {
        return renaming;
      }
    };
  }
}
