Отмена регистрации моделей М3 - PullRequest
2 голосов
/ 03 марта 2020

Каков текущий предпочтительный способ отмены регистрации моделей M3 в Реестре?

В моем проекте я использую Rascal для анализа ~ 100 больших java программ, и моей JVM медленно не хватает памяти. Я нашел метод unregisterProject в старых версиях Реестра и попытался использовать этот код, но я не думаю, что он работает правильно.

public void unregisterProject(loc project, M3 model) {
    rel[str scheme, loc name, loc src] perScheme 
      = {<name.scheme, name, src> | <name, src> <- model.declarations};

    for (str scheme <- perScheme<scheme>) {
           unregisterLocations(scheme, project.authority);
    }
}

Мой текущий обходной путь заключается в том, чтобы избавиться от проблемы с большим объемом памяти.

1 Ответ

2 голосов
/ 03 марта 2020

Этот код может работать лучше. Сначала он собирает все зарегистрированные пары схем и прав доступа (и удаляет дубликаты), а затем вызывает для оставшихся уникальных пар функцию unregisterLocations.

public void unregisterProject(loc project, M3 model) {
    schemesAndAuthorities 
      = {<name.scheme, name.authority> | <name, src> <- model.declarations};

    for (<scheme, authority> <- schemesAndAuthorities) {
           unregisterLocations(scheme, authority);
    }
}

Вы попробуете? Если это работает, мы можем добавить его обратно в стандартную библиотеку с некоторыми тестами. Предыдущий код был основан на другом способе регистрации местоположений, поэтому отмена регистрации не работает.

...