Fix eager instantiation with special other annotation
Dieser Commit ist enthalten in:
Ursprung
bc7ae5cf9a
Commit
0c68dfd19d
@ -115,10 +115,10 @@ public class LinkageProcessor extends AbstractProcessor {
|
||||
Writer writer = processingEnv.getFiler().createSourceFile("de.steamwar." + name + ".linkage.LinkageUtils").openWriter();
|
||||
|
||||
BuildPlan buildPlan = new BuildPlan(packageName, className);
|
||||
buildPlan.addImport("de.steamwar.linkage.LinkageType");
|
||||
|
||||
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(Linked.class);
|
||||
Map<String, TypeElement> neededFields = new HashMap<>();
|
||||
Set<Runnable> fieldInjections = new HashSet<>();
|
||||
for (Element element : elements) {
|
||||
if (element.getKind() != ElementKind.CLASS) {
|
||||
continue;
|
||||
@ -156,17 +156,25 @@ public class LinkageProcessor extends AbstractProcessor {
|
||||
TypeElement fieldType = (TypeElement) ((DeclaredType) variableElement.asType()).asElement();
|
||||
neededFields.put(fieldType.getQualifiedName().toString(), fieldType);
|
||||
|
||||
fieldInjections.add(() -> {
|
||||
specialElements(typeElement, buildPlan, buildPlan::addStaticLine, () -> {
|
||||
buildPlan.addStaticLine(getElement(typeElement, neededFields) + "." + variableElement.getSimpleName().toString() + " = " + getElement((TypeElement) ((DeclaredType) variableElement.asType()).asElement(), neededFields) + ";");
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
neededFields.forEach((s, typeElement) -> {
|
||||
buildPlan.addImport(typeElement.getQualifiedName().toString());
|
||||
String t = typeElement.getSimpleName().toString();
|
||||
t = t.substring(0, 1).toLowerCase() + t.substring(1);
|
||||
buildPlan.addField(new FieldBuilder(typeElement.getSimpleName().toString(), t, "new " + typeElement.getSimpleName().toString() + "()"));
|
||||
buildPlan.addField(new FieldBuilder(typeElement.getSimpleName().toString(), t));
|
||||
|
||||
String finalT = t;
|
||||
specialElements(typeElement, buildPlan, buildPlan::addStaticLine, () -> {
|
||||
buildPlan.addStaticLine(finalT + " = new " + typeElement.getSimpleName().toString() + "();");
|
||||
});
|
||||
});
|
||||
fieldInjections.forEach(Runnable::run);
|
||||
|
||||
Map<String, MethodBuilder> methods = new HashMap<>();
|
||||
for (Element element : elements) {
|
||||
|
@ -79,7 +79,12 @@ public class Listener_SPIGOT implements LinkageType {
|
||||
});
|
||||
|
||||
String localInstance = "local" + typeElement.getSimpleName().toString();
|
||||
if (!instance.startsWith("new ")) {
|
||||
localInstance = instance;
|
||||
} else {
|
||||
method.addLine(typeElement.getSimpleName() + " " + localInstance + " = " + instance + ";");
|
||||
}
|
||||
String finalLocalInstance = localInstance;
|
||||
eventMethods.forEach((type, executableElement) -> {
|
||||
AnnotationMirror eventHandler = executableElement.getAnnotationMirrors().stream().filter(annotationMirror -> annotationMirror.getAnnotationType().asElement().getSimpleName().toString().equals("EventHandler")).findFirst().orElse(null);
|
||||
if (eventHandler == null) {
|
||||
@ -94,7 +99,7 @@ public class Listener_SPIGOT implements LinkageType {
|
||||
ignoreCancelled = entry.getValue().getValue().toString();
|
||||
}
|
||||
}
|
||||
method.addLine(type.getSimpleName().toString() + "(" + localInstance + ", " + localInstance + "::" + executableElement.getSimpleName().toString() + ", EventPriority." + priority + ", " + ignoreCancelled + ");");
|
||||
method.addLine(type.getSimpleName().toString() + "(" + finalLocalInstance + ", " + finalLocalInstance + "::" + executableElement.getSimpleName().toString() + ", EventPriority." + priority + ", " + ignoreCancelled + ");");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren