Пользовательский компилятор подключаемого модуля Intellij не вызывается, несмотря на запись в META-INF / services - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь создать плагин intellij для компиляции Latex. Я следую этой документации для реализации API внешней сборки. Однако мой класс LatexBuilderService, который расширяет BuilderService, не вызывается, когда я нажимаю кнопку "построить проект". Как мне убедиться, что мой LatexBuilderService запущен правильно?

Под src/main/resources/META-INF/services я создал файл с именем org.jetbrains.jps.incremental.BuilderService, который содержит полное имя для моего BuilderService. В частности, он имеет текст: build.builders.LatexBuilderService

extensions часть моего plugin.xml выглядит так

<extensions defaultExtensionNs="com.intellij">
    <compiler.buildTargetScopeProvider implementation="build.scope.LatexBuildScopeProvider"/>
    <compileServer.plugin classpath ="/home/philip/IdeaProjects/latex-compile-proof-of-concept/build/libs/latex-compile-1.0-SNAPSHOT.jar" />
</extensions>

и подтвердили с помощью операторов печати, что getBuildTargetScopes в моем LatexBuildScopeProvider классе, который расширяет BuildTargetScopeProvider, вызывается всякий раз, когда нажимается кнопка «построить проект».

Классы, которые я продлил

  • LatexBuilder расширяется TargetBuilder<LatexBuildRootDescriptor, LatexBuildTarget>
  • LatexBuilderService расширяется BuilderService
  • LatexBuildScopeProvider продлен BuildTargetScopeProvider
  • LatexBuildRootDescriptor расширяется BuildRootDescriptor
  • LatexBuildTarget расширяется BuildTarget<LatexBuildRootDescriptor>
  • LatexBuildTargetType расширяется BuildTargetType<LatexBuildTarget>

Вот мой код для LatexBuildScopeProvider

public class LatexBuildScopeProvider extends BuildTargetScopeProvider {
    @NotNull
    @Override
    public List<TargetTypeBuildScope> getBuildTargetScopes(@NotNull CompileScope baseScope,
                                                           @NotNull Project project,
                                                           boolean forceBuild) {
        System.out.println("getBuildTargetScopes was called");

        Stream<Module> modules = Arrays.stream(baseScope.getAffectedModules());
        List<String> moduleIds = modules.map(Module::getName).collect(Collectors.toList());

        TargetTypeBuildScope scope = CmdlineProtoUtil.createTargetsScope(
                LatexBuildTargetType.instance.getTypeId(),
                moduleIds, // Sometimes referred to as module names in other plugins
                forceBuild);
        return Collections.singletonList(scope);
    }
}

и мой код для LatexBuilderService. Ни одно из операторов печати или исключений не запускается, когда я нажимаю кнопку "построить проект".

public class LatexBuilderService extends BuilderService {
    @NotNull
    @Override
    public List<LatexBuildTargetType> getTargetTypes() {
        System.out.println("calling getTargetTypes");
        return Collections.singletonList(LatexBuildTargetType.instance);
    }

    @NotNull
    @Override
    public List<LatexBuilder> createBuilders() {
        System.out.println("calling createBuilders");
        return Collections.singletonList(new LatexBuilder());
    }

    @NotNull
    @Override
    public List<? extends ModuleLevelBuilder> createModuleLevelBuilders() {
        throw new NotImplementedException("createModuleLevelBuilders");
    }
}

1 Ответ

0 голосов
/ 29 марта 2019

Лучшим местом для разработки плагинов и вопросов по IntelliJ IDEA API является форум разработчиков .

Ваш вопрос уже ответил там, и я продолжуобсуждение на форуме как удобнее в этом случае.

...