import javax.tools.Diagnostic;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.ToolProvider;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URI;

import java.util.List;
import java.util.Locale;

public class Testcase
{
    public static void main(String[] args)
    {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();

        StringWriter writer = new StringWriter();
        PrintWriter out = new PrintWriter(writer);
        out.println("public class HelloWorld {");
        out.println("  public static void main(String args[]) {");
        out.println("    java.util.List raw = new java.util.List();");
        out.println("  }");
        out.println("}");
        out.close();
        JavaFileObject file = new JavaSourceFromString("HelloWorld", writer.toString());

        Iterable<? extends JavaFileObject> compilationUnits = List.of(file);
        CompilationTask task = compiler.getTask(null, null, diagnostics, List.of("-Xlint:all"), null,
            compilationUnits);
        task.call();

        boolean success = false;
        for (Diagnostic<?> diagnostic : diagnostics.getDiagnostics())
        {
            String message = diagnostic.getMessage(Locale.getDefault());
            success |= message.contains("[raw]");
            System.out.println(message);
        }
        System.out.println("Success: " + success);
    }
}

class JavaSourceFromString extends SimpleJavaFileObject
{
    final String code;

    JavaSourceFromString(String name, String code)
    {
        super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
        this.code = code;
    }

    @Override
    public CharSequence getCharContent(boolean ignoreEncodingErrors)
    {
        return code;
    }
}