Skip to content

Commit 2310068

Browse files
authored
created simple test invoking Java compiler and running annotation (#2244)
* created simple test invoking Java compiler and running annotation processor * helpers for source processing * added tests for some annotation warnings * added more error tests * added more tests
1 parent d52235f commit 2310068

12 files changed

Lines changed: 1035 additions & 20 deletions

annot/pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,13 @@
5353
<groupId>org.apache.logging.log4j</groupId>
5454
<artifactId>log4j-core</artifactId>
5555
</dependency>
56-
</dependencies>
56+
<dependency>
57+
<groupId>org.hamcrest</groupId>
58+
<artifactId>hamcrest</artifactId>
59+
<version>3.0</version>
60+
<scope>test</scope>
61+
</dependency>
62+
</dependencies>
5763

5864
<build>
5965
<plugins>

core/src/main/java/com/predic8/membrane/core/config/spring/AbstractParser.java renamed to annot/src/main/java/com/predic8/membrane/annot/AbstractParser.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
See the License for the specific language governing permissions and
1313
limitations under the License. */
1414

15-
package com.predic8.membrane.core.config.spring;
15+
package com.predic8.membrane.annot;
1616

1717
import java.util.HashMap;
18+
import java.util.HashSet;
1819
import java.util.Set;
1920

2021
import org.springframework.beans.factory.config.BeanDefinition;
@@ -31,7 +32,7 @@
3132
import org.w3c.dom.Node;
3233
import org.w3c.dom.NodeList;
3334

34-
import com.google.common.collect.Sets;
35+
import static java.util.List.of;
3536

3637
public abstract class AbstractParser extends AbstractSingleBeanDefinitionParser {
3738

@@ -49,7 +50,7 @@ public BeanDefinition parse(Element e) {
4950

5051
protected void setIdIfNeeded(Element element, ParserContext parserContext, String defaultId) {
5152
if ( !isInlined() && !element.hasAttribute("id") ) {
52-
Set<String> names = Sets.newHashSet(parserContext.getRegistry().getBeanDefinitionNames());
53+
Set<String> names = new HashSet<>(of(parserContext.getRegistry().getBeanDefinitionNames()));
5354
for (int i = 0; ; i++) {
5455
String id = defaultId + (i == 0 ? "" : i);
5556
if (!names.contains(id)) {

annot/src/main/java/com/predic8/membrane/annot/SpringConfigurationXSDGeneratingAnnotationProcessor.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import javax.lang.model.*;
2222
import javax.lang.model.element.*;
2323
import javax.lang.model.type.*;
24-
import javax.lang.model.util.Elements;
25-
import javax.lang.model.util.Types;
2624
import javax.tools.Diagnostic.*;
2725
import javax.tools.*;
2826
import java.io.*;
@@ -211,14 +209,15 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
211209
main.getIis().add(ii);
212210

213211
main.getElements().put(ii.getElement(), ii);
214-
if (main.getGlobals().containsKey(ii.getAnnotation().name()))
215-
throw new ProcessingException("Duplicate global @MCElement name.", main.getGlobals().get(ii.getAnnotation().name()).getElement(), ii.getElement());
216212
if (main.getIds().containsKey(ii.getId()))
217213
throw new ProcessingException("Duplicate element id \"" + ii.getId() + "\". Please assign one using @MCElement(id=\"...\").", e, main.getIds().get(ii.getId()).getElement());
218214
main.getIds().put(ii.getId(), ii);
219215

220216
scan(m, main, ii);
221217

218+
if (ii.getAnnotation().topLevel())
219+
main.getTopLevels().put(ii.getAnnotation().name(), ii);
220+
222221
if (ii.getAnnotation().noEnvelope()) {
223222
if (ii.getAnnotation().topLevel())
224223
throw new ProcessingException("@MCElement(..., noEnvelope=true, topLevel=true) is invalid.", ii.getElement());
@@ -271,17 +270,20 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
271270

272271
for (MainInfo main : m.getMains()) {
273272
for (Map.Entry<TypeElement, ElementInfo> f : main.getElements().entrySet()) {
273+
ElementInfo ei2 = main.getTopLevels().get(f.getKey().getAnnotation(MCElement.class).name());
274+
if (ei2 != null && f.getValue() != ei2 && f.getValue().getAnnotation().topLevel())
275+
throw new ProcessingException("Duplicate top-level @MCElement name. Make at least one @MCElement(topLevel=false,...) .", f.getKey(), ei2.getElement());
276+
274277
List < String > uniquenessErrors = getUniquenessError(f.getValue(), main);
275278
if (!uniquenessErrors.isEmpty())
276279
throw new ProcessingException(String.join(System.lineSeparator(), uniquenessErrors), f.getValue().getElement());
277280
}
281+
if (main.getElements().isEmpty()) {
282+
processingEnv.getMessager().printMessage(Kind.ERROR, "@MCMain but no @MCElement found.", mcmains.iterator().next());
283+
return true;
284+
}
278285
}
279286

280-
281-
if (mcmains.isEmpty()) {
282-
processingEnv.getMessager().printMessage(Kind.ERROR, "@MCMain but no @MCElement found.", mcmains.iterator().next());
283-
return true;
284-
}
285287
process(m);
286288
}
287289

annot/src/main/java/com/predic8/membrane/annot/generator/Parsers.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void writeParserDefinitior(Model m) throws IOException {
4242
sources.toArray(new Element[0]));
4343
try (BufferedWriter bw = new BufferedWriter(o.openWriter())) {
4444
String copyright = """
45-
/* Copyright 2012,2013 predic8 GmbH, www.predic8.com
45+
/* Copyright 2012-2025 predic8 GmbH, www.predic8.com
4646
4747
Licensed under the Apache License, Version 2.0 (the "License");
4848
you may not use this file except in compliance with the License.
@@ -125,11 +125,12 @@ public void writeParsers(Model m) throws IOException {
125125
"\r\n" +
126126
"package " + main.getAnnotation().outputPackage() + ";\r\n" +
127127
"\r\n" +
128+
"import com.predic8.membrane.annot.AbstractParser;\r\n" +
128129
"import org.w3c.dom.Element;\r\n" +
129130
"import org.springframework.beans.factory.xml.ParserContext;\r\n" +
130131
"import org.springframework.beans.factory.support.BeanDefinitionBuilder;\r\n");
131-
if (!main.getAnnotation().outputPackage().equals("com.predic8.membrane.core.config.spring"))
132-
bw.write("import com.predic8.membrane.core.config.spring.*;\r\n");
132+
// if (!main.getAnnotation().outputPackage().equals("com.predic8.membrane.core.config.spring"))
133+
// bw.write("import com.predic8.membrane.core.config.spring.*;\r\n");
133134
bw.write(
134135
"\r\n" +
135136
"/**\r\n" +

annot/src/main/java/com/predic8/membrane/annot/generator/kubernetes/K8sHelperGenerator.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@ private void writeClassContent(Writer w, MainInfo mainInfo) throws IOException {
8787
"",
8888
"package " + mainInfo.getAnnotation().outputPackage() + ";",
8989
"",
90-
"import com.predic8.membrane.core.proxies.Proxy;",
91-
"import com.predic8.membrane.core.interceptor.Interceptor;",
92-
"",
9390
"import java.util.Map;",
9491
"import java.util.List;",
9592
"import java.util.HashMap;",

annot/src/main/java/com/predic8/membrane/annot/model/MainInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public Map<TypeElement, ElementInfo> getElements() {
6767
return elements;
6868
}
6969

70-
public Map<String, ElementInfo> getGlobals() {
70+
public Map<String, ElementInfo> getTopLevels() {
7171
return globals;
7272
}
7373

0 commit comments

Comments
 (0)