public final class io.helidon.config.FileSourceHelper extends java.lang.Object
{
private static final java.util.logging.Logger LOGGER;
private static final int FILE_BUFFER_SIZE;
private void <init>()
{
io.helidon.config.FileSourceHelper v;
java.lang.AssertionError v;
v := @this: io.helidon.config.FileSourceHelper;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>(java.lang.Object)>("Instantiation not allowed.");
throw v;
}
public static java.util.Optional lastModifiedTime(java.nio.file.Path)
{
java.nio.file.attribute.FileTime v;
java.util.function.Supplier v;
java.util.logging.Level v;
java.lang.String v;
java.nio.file.Path v, v;
java.nio.file.LinkOption[] v, v;
java.io.IOException v;
java.time.Instant v, v;
java.util.logging.Logger v, v;
java.io.FileNotFoundException v;
java.util.Optional v, v, v;
v := @parameter: java.nio.file.Path;
label:
v = newarray (java.nio.file.LinkOption)[0];
v = interfaceinvoke v.<java.nio.file.Path: java.nio.file.Path toRealPath(java.nio.file.LinkOption[])>(v);
v = newarray (java.nio.file.LinkOption)[0];
v = staticinvoke <java.nio.file.Files: java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path,java.nio.file.LinkOption[])>(v, v);
v = virtualinvoke v.<java.nio.file.attribute.FileTime: java.time.Instant toInstant()>();
v = staticinvoke <java.util.Optional: java.util.Optional of(java.lang.Object)>(v);
label:
return v;
label:
v := @caughtexception;
v = staticinvoke <java.util.Optional: java.util.Optional empty()>();
return v;
label:
v := @caughtexception;
v = <io.helidon.config.FileSourceHelper: java.util.logging.Logger LOGGER>;
v = <java.util.logging.Level: java.util.logging.Level FINE>;
v = staticinvoke <io.helidon.config.FileSourceHelper$lambda_lastModifiedTime_0__262: java.util.function.Supplier bootstrap$(java.nio.file.Path)>(v);
virtualinvoke v.<java.util.logging.Logger: void log(java.util.logging.Level,java.lang.Throwable,java.util.function.Supplier)>(v, v, v);
v = <java.time.Instant: java.time.Instant MIN>;
v = <io.helidon.config.FileSourceHelper: java.util.logging.Logger LOGGER>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.time.Instant)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Cannot obtain the last modified time. Used time \'\u0001\' as a content timestamp.");
virtualinvoke v.<java.util.logging.Logger: void finer(java.lang.String)>(v);
v = staticinvoke <java.util.Optional: java.util.Optional of(java.lang.Object)>(v);
return v;
catch java.io.FileNotFoundException from label to label with label;
catch java.io.IOException from label to label with label;
}
public static java.lang.String safeReadContent(java.nio.file.Path)
{
java.lang.Throwable v, v, v;
java.lang.Object[] v, v, v;
io.helidon.config.ConfigException v, v, v;
java.nio.channels.FileLock v;
java.nio.charset.Charset v;
java.lang.String v, v, v;
java.util.stream.Collector v;
java.nio.file.Path v, v, v;
java.io.IOException v, v;
java.io.FileInputStream v;
java.nio.channels.NonWritableChannelException v;
java.io.File v;
java.io.FileNotFoundException v;
java.util.stream.Stream v;
java.lang.Object v;
java.io.BufferedReader v;
java.nio.channels.FileChannel v;
v := @parameter: java.nio.file.Path;
label:
v = new java.io.FileInputStream;
v = interfaceinvoke v.<java.nio.file.Path: java.io.File toFile()>();
specialinvoke v.<java.io.FileInputStream: void <init>(java.io.File)>(v);
label:
v = null;
label:
v = virtualinvoke v.<java.io.FileInputStream: java.nio.channels.FileChannel getChannel()>();
v = virtualinvoke v.<java.nio.channels.FileChannel: java.nio.channels.FileLock tryLock(long,long,boolean)>(0L, 9223372036854775807L, 0);
label:
goto label;
label:
v := @caughtexception;
label:
v = <java.nio.charset.StandardCharsets: java.nio.charset.Charset UTF_8>;
v = staticinvoke <java.nio.file.Files: java.io.BufferedReader newBufferedReader(java.nio.file.Path,java.nio.charset.Charset)>(v, v);
label:
v = virtualinvoke v.<java.io.BufferedReader: java.util.stream.Stream lines()>();
v = staticinvoke <java.util.stream.Collectors: java.util.stream.Collector joining(java.lang.CharSequence)>("\n");
v = interfaceinvoke v.<java.util.stream.Stream: java.lang.Object collect(java.util.stream.Collector)>(v);
label:
virtualinvoke v.<java.io.BufferedReader: void close()>();
label:
if v == null goto label;
virtualinvoke v.<java.nio.channels.FileLock: void release()>();
label:
virtualinvoke v.<java.io.FileInputStream: void close()>();
label:
return v;
label:
v := @caughtexception;
throw v;
label:
v := @caughtexception;
v = new io.helidon.config.ConfigException;
v = newarray (java.lang.Object)[1];
v[0] = v;
v = staticinvoke <java.lang.String: java.lang.String format(java.lang.String,java.lang.Object[])>("Cannot read from path \'%s\'", v);
specialinvoke v.<io.helidon.config.ConfigException: void <init>(java.lang.String,java.lang.Throwable)>(v, v);
throw v;
label:
v := @caughtexception;
if v == null goto label;
virtualinvoke v.<java.nio.channels.FileLock: void release()>();
label:
throw v;
label:
v := @caughtexception;
throw v;
label:
v := @caughtexception;
v = new io.helidon.config.ConfigException;
v = newarray (java.lang.Object)[2];
v[0] = v;
v = interfaceinvoke v.<java.nio.file.Path: java.nio.file.Path toAbsolutePath()>();
v[1] = v;
v = staticinvoke <java.lang.String: java.lang.String format(java.lang.String,java.lang.Object[])>("File \'%s\' not found. Absolute path: \'%s\'", v);
specialinvoke v.<io.helidon.config.ConfigException: void <init>(java.lang.String,java.lang.Throwable)>(v, v);
throw v;
label:
v := @caughtexception;
v = new io.helidon.config.ConfigException;
v = newarray (java.lang.Object)[2];
v[0] = v;
v = interfaceinvoke v.<java.nio.file.Path: java.nio.file.Path toAbsolutePath()>();
v[1] = v;
v = staticinvoke <java.lang.String: java.lang.String format(java.lang.String,java.lang.Object[])>("Cannot obtain a lock for file \'%s\'. Absolute path: \'%s\'", v);
specialinvoke v.<io.helidon.config.ConfigException: void <init>(java.lang.String,java.lang.Throwable)>(v, v);
throw v;
catch java.nio.channels.NonWritableChannelException from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.io.IOException from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.io.FileNotFoundException from label to label with label;
catch java.io.IOException from label to label with label;
catch java.io.IOException from label to label with label;
}
public static java.util.Optional digest(java.nio.file.Path)
{
java.lang.Throwable v;
byte[] v, v;
java.security.MessageDigest v;
io.helidon.config.ConfigException v;
java.nio.file.OpenOption[] v;
int v, v;
java.lang.String v;
java.nio.file.Path v;
java.io.IOException v;
java.io.FileNotFoundException v;
java.security.DigestInputStream v;
java.util.Optional v, v;
java.io.InputStream v;
v := @parameter: java.nio.file.Path;
v = staticinvoke <io.helidon.config.FileSourceHelper: java.security.MessageDigest digest()>();
label:
v = new java.security.DigestInputStream;
v = newarray (java.nio.file.OpenOption)[0];
v = staticinvoke <java.nio.file.Files: java.io.InputStream newInputStream(java.nio.file.Path,java.nio.file.OpenOption[])>(v, v);
specialinvoke v.<java.security.DigestInputStream: void <init>(java.io.InputStream,java.security.MessageDigest)>(v, v);
label:
v = newarray (byte)[4096];
label:
v = virtualinvoke v.<java.security.DigestInputStream: int read(byte[])>(v);
v = (int) -1;
if v != v goto label;
v = virtualinvoke v.<java.security.MessageDigest: byte[] digest()>();
v = staticinvoke <java.util.Optional: java.util.Optional of(java.lang.Object)>(v);
label:
virtualinvoke v.<java.security.DigestInputStream: void close()>();
label:
return v;
label:
v := @caughtexception;
throw v;
label:
v := @caughtexception;
v = staticinvoke <java.util.Optional: java.util.Optional empty()>();
return v;
label:
v := @caughtexception;
v = new io.helidon.config.ConfigException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.nio.file.Path)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Failed to calculate digest for file: \u0001");
specialinvoke v.<io.helidon.config.ConfigException: void <init>(java.lang.String,java.lang.Throwable)>(v, v);
throw v;
catch java.lang.Throwable from label to label with label;
catch java.io.FileNotFoundException from label to label with label;
catch java.io.IOException from label to label with label;
catch java.io.IOException from label to label with label;
}
public static boolean isModified(java.nio.file.Path, byte[])
{
byte[] v;
java.util.function.Function v;
java.lang.Boolean v;
java.util.Optional v, v;
java.lang.Object v;
java.nio.file.Path v;
boolean v, v;
v := @parameter: java.nio.file.Path;
v := @parameter: byte[];
v = staticinvoke <io.helidon.config.FileSourceHelper: java.util.Optional digest(java.nio.file.Path)>(v);
v = staticinvoke <io.helidon.config.FileSourceHelper$lambda_isModified_1__263: java.util.function.Function bootstrap$(byte[])>(v);
v = virtualinvoke v.<java.util.Optional: java.util.Optional map(java.util.function.Function)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(0);
v = virtualinvoke v.<java.util.Optional: java.lang.Object orElse(java.lang.Object)>(v);
v = virtualinvoke v.<java.lang.Boolean: boolean booleanValue()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public static boolean isModified(java.nio.file.Path, java.time.Instant)
{
java.time.Instant v;
java.util.function.Function v;
java.lang.Boolean v;
java.util.Optional v, v;
java.lang.Object v;
java.nio.file.Path v;
boolean v;
v := @parameter: java.nio.file.Path;
v := @parameter: java.time.Instant;
v = staticinvoke <io.helidon.config.FileSourceHelper: java.util.Optional lastModifiedTime(java.nio.file.Path)>(v);
v = staticinvoke <io.helidon.config.FileSourceHelper$lambda_isModified_2__264: java.util.function.Function bootstrap$(java.time.Instant)>(v);
v = virtualinvoke v.<java.util.Optional: java.util.Optional map(java.util.function.Function)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(0);
v = virtualinvoke v.<java.util.Optional: java.lang.Object orElse(java.lang.Object)>(v);
v = virtualinvoke v.<java.lang.Boolean: boolean booleanValue()>();
return v;
}
public static java.util.Optional readDataAndDigest(java.nio.file.Path)
{
java.lang.Throwable v, v, v;
byte[] v, v, v;
java.lang.Object[] v;
java.io.ByteArrayOutputStream v;
java.security.MessageDigest v;
io.helidon.config.ConfigException v;
java.nio.channels.FileLock v;
int v, v;
java.lang.String v;
java.nio.file.Path v;
java.io.IOException v;
java.io.FileInputStream v;
io.helidon.config.FileSourceHelper$DataAndDigest v;
java.io.File v;
java.io.FileNotFoundException v;
java.security.DigestInputStream v;
java.util.Optional v, v;
v := @parameter: java.nio.file.Path;
v = staticinvoke <io.helidon.config.FileSourceHelper: java.io.ByteArrayOutputStream createByteArrayOutput(java.nio.file.Path)>(v);
v = staticinvoke <io.helidon.config.FileSourceHelper: java.security.MessageDigest digest()>();
label:
v = new java.io.FileInputStream;
v = interfaceinvoke v.<java.nio.file.Path: java.io.File toFile()>();
specialinvoke v.<java.io.FileInputStream: void <init>(java.io.File)>(v);
label:
v = staticinvoke <io.helidon.config.FileSourceHelper: java.nio.channels.FileLock lockFile(java.nio.file.Path,java.io.FileInputStream)>(v, v);
label:
v = new java.security.DigestInputStream;
specialinvoke v.<java.security.DigestInputStream: void <init>(java.io.InputStream,java.security.MessageDigest)>(v, v);
label:
v = newarray (byte)[4096];
label:
v = virtualinvoke v.<java.security.DigestInputStream: int read(byte[])>(v);
v = (int) -1;
if v == v goto label;
virtualinvoke v.<java.io.ByteArrayOutputStream: void write(byte[],int,int)>(v, 0, v);
goto label;
label:
virtualinvoke v.<java.security.DigestInputStream: void close()>();
goto label;
label:
v := @caughtexception;
throw v;
label:
if v == null goto label;
virtualinvoke v.<java.nio.channels.FileLock: void release()>();
goto label;
label:
v := @caughtexception;
if v == null goto label;
virtualinvoke v.<java.nio.channels.FileLock: void release()>();
label:
throw v;
label:
virtualinvoke v.<java.io.FileInputStream: void close()>();
goto label;
label:
v := @caughtexception;
throw v;
label:
v := @caughtexception;
v = staticinvoke <java.util.Optional: java.util.Optional empty()>();
return v;
label:
v := @caughtexception;
v = new io.helidon.config.ConfigException;
v = newarray (java.lang.Object)[1];
v[0] = v;
v = staticinvoke <java.lang.String: java.lang.String format(java.lang.String,java.lang.Object[])>("Cannot handle file \'%s\'.", v);
specialinvoke v.<io.helidon.config.ConfigException: void <init>(java.lang.String,java.lang.Throwable)>(v, v);
throw v;
label:
v = new io.helidon.config.FileSourceHelper$DataAndDigest;
v = virtualinvoke v.<java.io.ByteArrayOutputStream: byte[] toByteArray()>();
v = virtualinvoke v.<java.security.MessageDigest: byte[] digest()>();
specialinvoke v.<io.helidon.config.FileSourceHelper$DataAndDigest: void <init>(byte[],byte[])>(v, v);
v = staticinvoke <java.util.Optional: java.util.Optional of(java.lang.Object)>(v);
return v;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.io.FileNotFoundException from label to label with label;
catch java.io.IOException from label to label with label;
}
private static java.io.ByteArrayOutputStream createByteArrayOutput(java.nio.file.Path)
{
java.io.ByteArrayOutputStream v, v;
java.io.IOException v;
long v;
java.nio.file.Path v;
v := @parameter: java.nio.file.Path;
label:
v = new java.io.ByteArrayOutputStream;
v = staticinvoke <java.nio.file.Files: long size(java.nio.file.Path)>(v);
specialinvoke v.<java.io.ByteArrayOutputStream: void <init>(int)>(v);
label:
return v;
label:
v := @caughtexception;
v = new java.io.ByteArrayOutputStream;
specialinvoke v.<java.io.ByteArrayOutputStream: void <init>(int)>(4096);
return v;
catch java.io.IOException from label to label with label;
}
private static java.nio.channels.FileLock lockFile(java.nio.file.Path, java.io.FileInputStream) throws java.io.IOException
{
java.io.FileInputStream v;
java.lang.String v;
java.nio.channels.NonWritableChannelException v;
io.helidon.config.ConfigException v;
java.nio.channels.FileChannel v;
java.nio.file.Path v;
java.nio.channels.FileLock v;
v := @parameter: java.nio.file.Path;
v := @parameter: java.io.FileInputStream;
label:
v = virtualinvoke v.<java.io.FileInputStream: java.nio.channels.FileChannel getChannel()>();
v = virtualinvoke v.<java.nio.channels.FileChannel: java.nio.channels.FileLock tryLock(long,long,boolean)>(0L, 9223372036854775807L, 0);
if null != v goto label;
v = new io.helidon.config.ConfigException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.nio.file.Path)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Failed to acquire a lock on configuration file \u, cannot safely read it");
specialinvoke v.<io.helidon.config.ConfigException: void <init>(java.lang.String)>(v);
throw v;
label:
return v;
label:
v := @caughtexception;
return null;
catch java.nio.channels.NonWritableChannelException from label to label with label;
}
private static java.security.MessageDigest digest()
{
io.helidon.config.ConfigException v;
java.security.MessageDigest v;
java.security.NoSuchAlgorithmException v;
label:
v = staticinvoke <java.security.MessageDigest: java.security.MessageDigest getInstance(java.lang.String)>("MD5");
label:
return v;
label:
v := @caughtexception;
v = new io.helidon.config.ConfigException;
specialinvoke v.<io.helidon.config.ConfigException: void <init>(java.lang.String,java.lang.Throwable)>("Cannot get MD5 digest algorithm.", v);
throw v;
catch java.security.NoSuchAlgorithmException from label to label with label;
}
static void <clinit>()
{
java.lang.Class v;
java.lang.String v;
java.util.logging.Logger v;
v = class "Lio/helidon/config/FileSourceHelper;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
v = staticinvoke <java.util.logging.Logger: java.util.logging.Logger getLogger(java.lang.String)>(v);
<io.helidon.config.FileSourceHelper: java.util.logging.Logger LOGGER> = v;
return;
}
}