Невозможно получить доступ к com.sun.tools.javac.processing.JavaProcessingEnvironment.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно получить доступ к com.sun.tools.javac.processing.JavaProcessingEnvironment.

Сообщение Anonymous »

Я работаю над структурой структуры данных, моим личным проектом в учебных целях.
У меня есть следующая настройка
Я использую IntelliJ IDEA 2024.2 Ultimate с OpenJDK17 и Maven в качестве системы сборки< /p>
У меня есть несколько аннотаций, которые используются для обозначения частей библиотеки

Код: Выделить всё

@Implementation
определяет тип реализации класса: АБСТРАКЦИЯ или РЕАЛИЗАЦИЯ.

Код: Выделить всё

@EngineNature
определяет поведение механизма, тип и характер заказа
Например

Код: Выделить всё

//An ABSTRACTION
@Implementation(ImplementationType.ABSTRACTION)
public abstract class AbstractList extends AbstractDataEngine {
...
}

Код: Выделить всё

//An MUTABLE Implementation
@Implementation(ImplementationType.IMPLEMENTATION)
@EngineNature(nature = Nature.MUTABLE, behaviour = EngineBehaviour.DYNAMIC, order = Ordering.UNSORTED)
public class DynamicArrayList extends AbstractList {
...
}

Код: Выделить всё

//An IMMUTABLE Implementation
@Implementation(ImplementationType.IMPLEMENTATION)
@EngineNature(nature = Nature.IMMUTABLE, behaviour = EngineBehaviour.FIXED_LENGTH, order = Ordering.UNSUPPORTED)
public class ImmutableList extends FixedArrayList{
...
}
У меня также есть еще одна аннотация @Behavior для методов, которая определяет, являются ли они MUTABLE , IMMUTABLE или UNSUPPORTED
В моем проекте DataEngineFramework есть два модуля

Код: Выделить всё

DataEngineCore
и DataEngine. Основной модуль содержит важные классы верхнего уровня и процессоры аннотаций для основного модуля. Основной модуль содержит конкретные и абстрактные реализации различных структур данных.
Я уже настроил различные обработчики аннотаций, которые проверяют различные условия,

Код: Выделить всё

IMPLEMENTATION conditions
if(element.getModifiers().contains(Modifier.ABSTRACT))
injectError("An implementation cannot be declared abstract. " +
((TypeElement)element).getQualifiedName()+ " is declared abstract", element);
else if(!hasEnclosedIterator((TypeElement) element))
injectError("An implementation must contain an iterator implementation. " +
((TypeElement)element).getQualifiedName() +" has no concrete iterator.", element);
else if(isNotSubClassOf((TypeElement) element))
injectError("An implementation must be a direct or indirect subclass of " +
"AbstractDataEngine. " + ((TypeElement)element).getQualifiedName() + " does not have " +
"AbstractDataEngine as a superclass ",element );

Код: Выделить всё

ABSTRACTION conditions
if(!element.getModifiers().contains(Modifier.ABSTRACT))
injectError("An abstraction must be declared abstract "
+ ((TypeElement)element).getQualifiedName() + " is not declared abstract", element);
else if(isNotSubClassOf((TypeElement) element))
injectError("An abstraction must be a direct or indirect subclass of " +
"AbstractDataEngine "+ ((TypeElement)element).getQualifiedName() + " does not have " +
"AbstractDataEngine as a superclass ",element );
Самой важной функцией является генерация кода времени компиляции путем изменения AST класса.
По сути, я просматриваю иерархию и найдите все методы, помеченные как MUTABLE, и сохраните их в LinkedHashSet Моя проблема в том, что я хочу внедрить их в AST или что-то подобное, чтобы внедрить дополнительный код. Моя идея состоит в том, что я могу оставить методы, которые являются ИЗМЕНЯЕМЫМИ по отношению к НЕИЗМЕНИМОЙ реализации, и позволить моему процессору искать и находить все методы, которые должны иметь переопределение. Переопределение просто генерирует исключение.
Пример помечаемых методов

Код: Выделить всё

  @Override
@Behaviour(Type.MUTABLE)
public void add(E item) {
...
}

Код: Выделить всё

  @Override
@Behaviour(Type.IMMUTABLE)
public int getLastIndexOf(E item) {
....
}
Как мне добиться такого поведения?

Подробнее здесь: https://stackoverflow.com/questions/786 ... nvironment
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»