// Path: src/main/java/ru/adelf/idea/dotenv/java/JavaEnvironmentClasses.java
// public class JavaEnvironmentClasses {
//     public static boolean isDirectMethodCall(String methodName) {
//         return methodName.equals("getenv") || methodName.equals("getEnv");
//     }
// 
//     @Nullable
//     public static List<String> getClassNames(String methodName) {
//         switch (methodName) {
//             case "get":
//                 return Arrays.asList("Dotenv", "DotEnv");
//             case "getProperty":
//                 return Collections.singletonList("System");
//         }
// 
//         return null;
//     }
// }
// 
// Path: src/main/java/ru/adelf/idea/dotenv/models/KeyUsagePsiElement.java
// public class KeyUsagePsiElement {
// 
//     private final String key;
//     private final PsiElement element;
// 
//     public KeyUsagePsiElement(String key, PsiElement element) {
//         this.key = key;
//         this.element = element;
//     }
// 
//     public String getKey() {
//         return key;
//     }
// 
//     public PsiElement getElement() {
//         return element;
//     }
// }


import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.psi.*;
import ru.adelf.idea.dotenv.java.JavaEnvironmentClasses;
import ru.adelf.idea.dotenv.models.KeyUsagePsiElement;
import java.util.Arrays;
import java.util.List;
package ru.adelf.idea.dotenv.kotlin;



class KotlinPsiHelper {
    /**
     * Checks that this element environment string
     *
     * @param literal Checking psi element
     */
    static boolean isEnvStringLiteral(KtLiteralStringTemplateEntry literal) {
        if (!(literal.getParent() instanceof KtStringTemplateExpression)) {
            return false;
        }

        PsiElement parent = literal.getParent().getParent();
        if (parent instanceof KtValueArgument) {
            return isMethodCallLiteral((KtValueArgument) parent);
        }

        if (parent instanceof KtContainerNode) {
            return isArrayAccessLiteral((KtContainerNode) parent);
        }

        return false;
    }

    private static boolean isMethodCallLiteral(KtValueArgument valueArgument) {
        PsiElement valueArgumentList = valueArgument.getParent();

        if (!(valueArgumentList instanceof KtValueArgumentList)) {
            return false;
        }

        if (((KtValueArgumentList) valueArgumentList).getArguments().get(0) != valueArgument) {
            return false;
        }

        PsiElement methodCall = valueArgumentList.getParent();

// Path: src/main/java/ru/adelf/idea/dotenv/java/JavaEnvironmentClasses.java
// public class JavaEnvironmentClasses {
//     public static boolean isDirectMethodCall(String methodName) {
//         return methodName.equals("getenv") || methodName.equals("getEnv");
//     }
// 
//     @Nullable
//     public static List<String> getClassNames(String methodName) {
//         switch (methodName) {
//             case "get":
//                 return Arrays.asList("Dotenv", "DotEnv");
//             case "getProperty":
//                 return Collections.singletonList("System");
//         }
// 
//         return null;
//     }
// }
// 
// Path: src/main/java/ru/adelf/idea/dotenv/models/KeyUsagePsiElement.java
// public class KeyUsagePsiElement {
// 
//     private final String key;
//     private final PsiElement element;
// 
//     public KeyUsagePsiElement(String key, PsiElement element) {
//         this.key = key;
//         this.element = element;
//     }
// 
//     public String getKey() {
//         return key;
//     }
// 
//     public PsiElement getElement() {
//         return element;
//     }
// }


// Path: src/main/java/ru/adelf/idea/dotenv/kotlin/KotlinPsiHelper.java
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.psi.*;
import ru.adelf.idea.dotenv.java.JavaEnvironmentClasses;
import ru.adelf.idea.dotenv.models.KeyUsagePsiElement;
import java.util.Arrays;
import java.util.List;

package ru.adelf.idea.dotenv.kotlin;



class KotlinPsiHelper {
    /**
     * Checks that this element environment string
     *
     * @param literal Checking psi element
     */
    static boolean isEnvStringLiteral(KtLiteralStringTemplateEntry literal) {
        if (!(literal.getParent() instanceof KtStringTemplateExpression)) {
            return false;
        }

        PsiElement parent = literal.getParent().getParent();
        if (parent instanceof KtValueArgument) {
            return isMethodCallLiteral((KtValueArgument) parent);
        }

        if (parent instanceof KtContainerNode) {
            return isArrayAccessLiteral((KtContainerNode) parent);
        }

        return false;
    }

    private static boolean isMethodCallLiteral(KtValueArgument valueArgument) {
        PsiElement valueArgumentList = valueArgument.getParent();

        if (!(valueArgumentList instanceof KtValueArgumentList)) {
            return false;
        }

        if (((KtValueArgumentList) valueArgumentList).getArguments().get(0) != valueArgument) {
            return false;
        }

        PsiElement methodCall = valueArgumentList.getParent();

        if (!(methodCall instanceof KtCallExpression)) return false;