001/*
002 * Copyright (C) 2022 - 2023, the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *    http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package io.github.ascopes.jct.compilers;
017
018import io.github.ascopes.jct.compilers.javac.JavacJctCompilerImpl;
019import io.github.ascopes.jct.utils.UtilityClass;
020import org.apiguardian.api.API;
021import org.apiguardian.api.API.Status;
022import org.slf4j.Logger;
023import org.slf4j.LoggerFactory;
024
025/**
026 * Helpers to create new compiler instances.
027 *
028 * @author Ashley Scopes
029 * @since 0.0.1
030 */
031@API(since = "0.0.1", status = Status.STABLE)
032public final class JctCompilers extends UtilityClass {
033  private static final Logger LOGGER = LoggerFactory.getLogger(JctCompilers.class);
034
035  private JctCompilers() {
036    // Disallow initialisation.
037  }
038
039  /**
040   * Create a new instance of the default platform compiler that is part of the JDK ({@code javac}
041   * on OpenJDK-derived implementations).
042   *
043   * @return the compiler instance.
044   * @since 0.2.0
045   */
046  @API(status = Status.STABLE, since = "0.2.0")
047  public static JctCompiler<?, ?> newPlatformCompiler() {
048    return new JavacJctCompilerImpl();
049  }
050
051  /**
052   * Create a new instance of the default platform compiler that is part of the JDK ({@code javac}
053   * on OpenJDK-derived implementations).
054   *
055   * @return the compiler instance.
056   * @deprecated Renamed in 0.2.0 for consistency, use {@link #newPlatformCompiler} instead.
057   */
058  @Deprecated(forRemoval = true, since = "0.2.0")
059  public static JctCompiler<?, ?> createPlatformCompiler() {
060    LOGGER.warn("JctCompilers.createPlatformCompiler() is deprecated for removal. "
061        + "Use JctCompilers.newPlatformCompiler() instead");
062    return newPlatformCompiler();
063  }
064}