Можно ли поручить компилятору Kotlin импортировать дополнительные пакеты по умолчанию (как это происходит с его собственными пакетами)? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть набор классов в пакете my.framework, который я хочу использовать везде в моем проекте, не импортируя их явно (без использования оператора import my.framework.*).Можно ли как-то проинструктировать компилятор Kotlin, чтобы он включал дополнительные пакеты в список импортированных по умолчанию (как это происходит с kotlin.collections, kotlin.text и т. Д.)?

1 Ответ

0 голосов
/ 25 июля 2019

Я не нашел простого способа сделать это, но согласно этому ответу, в компиляторе Kotlin есть определенный файл , вы можете изменить его, чтобы изменить значение по умолчаниюимпорт.Вам нужно будет:
1. Клонировать репозиторий kotlin : git clone https://github.com/JetBrains/kotlin
2. Изменить определенный файл, чтобы импортировать некоторые дополнительные пакеты по умолчанию.
Например, импортировать kotlin.reflect по умолчанию вы изменяете файл kotlin, расположенный в компиляторе / frontend.java / src / org / jetbrains / kotlin / resolv / jvm / platform / JvmPlatform.kt относительно корня проекта, следующим образом:

/*
 * Copyright 2010-2015 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jetbrains.kotlin.resolve.jvm.platform

import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.resolve.PlatformConfigurator
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import java.util.*

object JvmPlatform : TargetPlatform("JVM") {
    override val defaultImports: List<ImportPath> = ArrayList<ImportPath>().apply {
        add(ImportPath("java.lang.*"))
        add(ImportPath("kotlin.*"))
        add(ImportPath("kotlin.annotation.*"))
        add(ImportPath("kotlin.jvm.*"))
        add(ImportPath("kotlin.collections.*"))
        add(ImportPath("kotlin.coroutines.*"))
        add(ImportPath("kotlin.ranges.*"))
        add(ImportPath("kotlin.sequences.*"))
        add(ImportPath("kotlin.text.*"))
        add(ImportPath("kotlin.io.*"))
        add(ImportPath("kotlin.reflect.*")) //This is the important change!!! 
        fun addAllClassifiersFromScope(scope: MemberScope) {
            for (descriptor in scope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS, MemberScope.ALL_NAME_FILTER)) {
                add(ImportPath(DescriptorUtils.getFqNameSafe(descriptor), false))
            }
        }

        val builtIns = DefaultBuiltIns.Instance
        for (builtinPackageFragment in builtIns.builtInsPackageFragments) {
            addAllClassifiersFromScope(builtinPackageFragment.getMemberScope())
        }
    }

    override val platformConfigurator: PlatformConfigurator = JvmPlatformConfigurator
}
Перекомпилируйте компилятор kotlin: gradle dist Используйте его и посмотрите, работает ли он: jar компилятора kotlin находится в dist/kotlinc/lib/kotlin-compiler.jar, а для запуска компилятора вы используете dist/kotlinc/bin/kotlinc.

Может быть, проще просто импортировать необходимые пакеты вместо ручной перекомпиляции компилятора kotlin (;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...