Как получить экземпляр ModuleBuilder при разработке плагина Intellij - PullRequest
0 голосов
/ 21 апреля 2019

Я создал несколько трехэтапных процессов для извлечения файлов, которые будут созданы как модуль: Но он не может создать модуль:

Plugin.xml

    <moduleBuilder id="SALESFORCE_MODULE_BUILDER" builderClass="salesforce.plugin.project.SalesForceModuleBuilder" order="first"/>
    <moduleType id="SALESFORCE_MODULE" implementationClass="salesforce.plugin.project.SalesForceModuleType"/>

    <sdkType id="SALESFORCE_SDK" implementation="salesforce.plugin.sdk.SalesForceSdkType"/>

ModuleBuilder:

public class SalesForceModuleBuilder extends JavaModuleBuilder {

    private final Logger logger = Logger.getInstance(getClass());

    private SalesForceWizardStateBean stateBean = new SalesForceWizardStateBean();

    public SalesForceModuleBuilder(){
        super();
    }

    @Override
    public String getName() {
        return "SalesForce Module Builder";
    }

    @Override
    public void setupRootModel(ModifiableRootModel modifiableRootModel) throws ConfigurationException {
        if (myJdk == null){
            modifiableRootModel.inheritSdk();
        } else {
            modifiableRootModel.setSdk(myJdk);
        }

        // Add root folder
        ContentEntry contentEntry = doAddContentEntry(modifiableRootModel);

        // The classes, trigger, pages, and components folder were created by one of the Wizard steps
        // Now, we need to add them as source folders under the root folder
        if (contentEntry != null) {
            for (SalesForceWizardStateBean.FOLDER_NAMES folderName : SalesForceWizardStateBean.FOLDER_NAMES.values()) {
                logger.warn("folderName SalesForceModuleBuilder "+folderName);
                String path = getContentEntryPath() + '/' + folderName.name().toLowerCase();
                logger.warn("path SalesFError creating folderorceModuleBuilder "+path);
                addSourceFolder(contentEntry, path);
            }
        }
        logger.warn("contentEntry check this SalesForceModuleBuilder "+contentEntry.getFile());
        ProjectSettingsPersistentStateComponent projectSettings = ServiceManager.getService(modifiableRootModel.getProject(), ProjectSettingsPersistentStateComponent.class);
        projectSettings.instanceName = stateBean.getSelectedInstance();

    }

    @Override
    public ModuleType getModuleType() {
        return new SalesForceModuleType();
    }

    @Override
    public boolean isSuitableSdkType(SdkTypeId sdkType) {
        return sdkType instanceof SalesForceSdkType;
    }

    private void addSourceFolder(ContentEntry contentEntry, String path) {
        final VirtualFile sourceRoot = LocalFileSystem.getInstance().refreshAndFindFileByPath(FileUtil.toSystemIndependentName(path));
        if (sourceRoot != null) {
            contentEntry.addSourceFolder(sourceRoot, false, "");
        }
    }

    public SalesForceWizardStateBean getStateBean() {
        return stateBean;
    }

}

Тип модуля имеет три шага:

@Override
@NotNull
public ModuleWizardStep[] createWizardSteps(@NotNull WizardContext wizardContext, @NotNull SalesForceModuleBuilder moduleBuilder, @NotNull ModulesProvider modulesProvider) {
    ArrayList<ModuleWizardStep> steps = new ArrayList<ModuleWizardStep>();
    steps.add(new SalesForceInstanceSelectionStep(wizardContext.getProject(), moduleBuilder.getStateBean()));
    steps.add(new SalesForceSynchroniseOptionsStep(moduleBuilder.getStateBean()));
    steps.add(new SalesForceSynchroniseStep(moduleBuilder.getStateBean(), moduleBuilder));
    return steps.toArray(new ModuleWizardStep[steps.size()]);
}

Третий шаг, где появляется ошибка:

public class SalesForceSynchroniseStep extends ModuleWizardStep {

    private final Logger logger = Logger.getInstance(getClass());
    private SalesForceModuleBuilder moduleBuilder;
    private final SalesForceWizardStateBean stateBean;

    private JButton cancelButton;
    private JTextArea statusArea;
    private JPanel synchronizingPanel;

    private volatile boolean synchronizing = false;
    private volatile boolean synchronizeFinished = false;

    public SalesForceSynchroniseStep(SalesForceWizardStateBean stateBean, SalesForceModuleBuilder moduleBuilder) {
        this.stateBean = stateBean;
        this.moduleBuilder = moduleBuilder;
    }

    @Override
    public JComponent getComponent() {
        return synchronizingPanel;
    }

    @Override
    public void updateDataModel() {
        // nothing to do here
    }

    @Override
    public void _init() {
        if (synchronizeFinished) {
            // this gets called when we enter AND exits the step (?!?!), so ignore the second call on exit
            return;
        }
        synchronizing = true;
        createFolders();
        SynchronizeSwingWorker swingWorker = new SynchronizeSwingWorker(statusArea, stateBean, new SynchronizeSwingWorker.DoneCallBack() {
            @Override
            public void done() {
                synchronizing = false;
                synchronizeFinished = true;
            }
        });
        swingWorker.execute();
    }

    private void createFolders() {
        String contentEntryPath = moduleBuilder.getContentEntryPath();
        logger.warn("moduleBuilder.getModuleFileDirectory() -> "+moduleBuilder.getModuleFileDirectory());
        for (SalesForceWizardStateBean.FOLDER_NAMES folderName : SalesForceWizardStateBean.FOLDER_NAMES.values()) {
            String folderPath = contentEntryPath + File.separator + folderName.name().toLowerCase();
            logger.warn("folderPath Path " + folderPath);
            logger.warn("contentEntryPath Path " + contentEntryPath);
            boolean result = new File(folderPath).mkdirs();
            if (!result) {
                logger.warn("Error creating folder " + folderName.name().toLowerCase());
            }
            stateBean.addCreatedFolder(folderName, folderPath);
        }

    }

    @Override
    public void _commit(boolean finishChosen) throws CommitStepException {
        if (synchronizing) {
            throw new CommitStepException("Please wait for synchronization to complete.");
        }
    }

}

moduleBuilder.getContentEntryPath() эта строка всегда возвращает ноль, Есть ли что-то, что яотсутствует.

Что ожидается: при синхронизации файлов следует создать папку и синхронизировать ее в модуле после завершения третьего шага:

Записывать файлы, если это помогает:

2019-04-21 14:37:29,302 [ 731958]   WARN - ject.SalesForceSynchroniseStep - moduleBuilder.getModuleFileDirectory() -> null 
2019-04-21 14:37:29,302 [ 731958]   WARN - ject.SalesForceSynchroniseStep - folderPath Path null\classes 
2019-04-21 14:37:29,302 [ 731958]   WARN - ject.SalesForceSynchroniseStep - contentEntryPath Path null 
2019-04-21 14:37:29,302 [ 731958]   WARN - ject.SalesForceSynchroniseStep - Error creating folder classes 
2019-04-21 14:37:29,302 [ 731958]   WARN - ject.SalesForceSynchroniseStep - folderPath Path null\triggers 
2019-04-21 14:37:29,302 [ 731958]   WARN - ject.SalesForceSynchroniseStep - contentEntryPath Path null 
2019-04-21 14:37:29,303 [ 731959]   WARN - ject.SalesForceSynchroniseStep - Error creating folder triggers 
2019-04-21 14:37:29,303 [ 731959]   WARN - ject.SalesForceSynchroniseStep - folderPath Path null\pages 
2019-04-21 14:37:29,303 [ 731959]   WARN - ject.SalesForceSynchroniseStep - contentEntryPath Path null 
2019-04-21 14:37:29,304 [ 731960]   WARN - ject.SalesForceSynchroniseStep - Error creating folder pages 
2019-04-21 14:37:29,304 [ 731960]   WARN - ject.SalesForceSynchroniseStep - folderPath Path null\components 
2019-04-21 14:37:29,304 [ 731960]   WARN - ject.SalesForceSynchroniseStep - contentEntryPath Path null 
2019-04-21 14:37:29,304 [ 731960]   WARN - ject.SalesForceSynchroniseStep - Error creating folder components 
2019-04-21 14:37:35,832 [ 738488]   INFO - ellij.project.impl.ProjectImpl - 183 project components initialized in 93 ms 
2019-04-21 14:37:35,834 [ 738490]   INFO - le.impl.ModuleManagerComponent - 0 module(s) loaded in 0 ms 
2019-04-21 14:37:37,126 [ 739782]   WARN - roject.SalesForceModuleBuilder - folderName SalesForceModuleBuilder CLASSES 
2019-04-21 14:37:37,126 [ 739782]   WARN - roject.SalesForceModuleBuilder - path SalesFError creating folderorceModuleBuilder C:/Users/Nagendra/Downloads/Simple-Intellij-Plugin-0.1.0/untitled10/classes 
2019-04-21 14:37:37,128 [ 739784]   WARN - roject.SalesForceModuleBuilder - folderName SalesForceModuleBuilder TRIGGERS 
2019-04-21 14:37:37,128 [ 739784]   WARN - roject.SalesForceModuleBuilder - path SalesFError creating folderorceModuleBuilder C:/Users/Nagendra/Downloads/Simple-Intellij-Plugin-0.1.0/untitled10/triggers 
2019-04-21 14:37:37,128 [ 739784]   WARN - roject.SalesForceModuleBuilder - folderName SalesForceModuleBuilder PAGES 
2019-04-21 14:37:37,128 [ 739784]   WARN - roject.SalesForceModuleBuilder - path SalesFError creating folderorceModuleBuilder C:/Users/Nagendra/Downloads/Simple-Intellij-Plugin-0.1.0/untitled10/pages 
2019-04-21 14:37:37,129 [ 739785]   WARN - roject.SalesForceModuleBuilder - folderName SalesForceModuleBuilder COMPONENTS 
2019-04-21 14:37:37,129 [ 739785]   WARN - roject.SalesForceModuleBuilder - path SalesFError creating folderorceModuleBuilder C:/Users/Nagendra/Downloads/Simple-Intellij-Plugin-0.1.0/untitled10/components 
2019-04-21 14:37:37,130 [ 739786]   WARN - roject.SalesForceModuleBuilder - contentEntry check this SalesForceModuleBuilder file://C:/Users/Nagendra/Downloads/Simple-Intellij-Plugin-0.1.0/untitled10
...