You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2023/04/03 15:24:00 UTC
[camel] 01/01: CAMEL-19245: camel-java-joor-dsl - Ease the way to get all the compiled classes
This is an automated email from the ASF dual-hosted git repository.
nfilotto pushed a commit to branch CAMEL-19245/java-joor-dsl-get-compiled-classes
in repository https://gitbox.apache.org/repos/asf/camel.git
commit fd51b8fb6930fc0b27d01e4294f57e111646aaba
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Mon Apr 3 17:23:29 2023 +0200
CAMEL-19245: camel-java-joor-dsl - Ease the way to get all the compiled classes
---
.../camel/dsl/java/joor/CompilationUnit.java | 6 ++
.../camel/dsl/java/joor/CompilationUnitTest.java | 96 ++++++++++++++++++++++
2 files changed, 102 insertions(+)
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/CompilationUnit.java b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/CompilationUnit.java
index a9c8ccf9b1a..e53b365f1ec 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/CompilationUnit.java
+++ b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/CompilationUnit.java
@@ -78,6 +78,12 @@ public class CompilationUnit {
return classes.keySet();
}
+ /**
+ * Set of the compiled classes by their names
+ */
+ public Set<String> getCompiledClassNames() {
+ return compiled.keySet();
+ }
}
static CompilationUnit.Result result() {
diff --git a/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/CompilationUnitTest.java b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/CompilationUnitTest.java
new file mode 100644
index 00000000000..5987cd13235
--- /dev/null
+++ b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/CompilationUnitTest.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.java.joor;
+
+import java.util.Set;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * The unit test for {@link CompilationUnit}.
+ */
+class CompilationUnitTest {
+
+ private void compile(String content, String innerClassName) {
+ CompilationUnit unit = CompilationUnit.input();
+ String outerClassName = "com.foo.OuterClass";
+ unit.addClass(outerClassName, content);
+ CompilationUnit.Result result = MultiCompile.compileUnit(unit);
+ assertEquals(Set.of(outerClassName), result.getClassNames());
+ assertEquals(Set.of(outerClassName, outerClassName + "$" + innerClassName), result.getCompiledClassNames());
+ }
+
+ @Test
+ void shouldSupportNestedInnerClass() {
+ compile(
+ """
+ package com.foo;
+ class OuterClass {
+ public class InnerClass {
+ }
+ }
+ """,
+ "InnerClass");
+ }
+
+ @Test
+ void shouldSupportStaticNestedClass() {
+ compile(
+ """
+ package com.foo;
+ class OuterClass {
+ public static class InnerClass {
+ }
+ }
+ """,
+ "InnerClass");
+ }
+
+ @Test
+ void shouldSupportMethodLocalInnerClass() {
+ compile(
+ """
+ package com.foo;
+ class OuterClass {
+ void outerClassMethod() {
+ class InnerClass {
+ void innerClassMethod() {
+
+ }
+ }
+ }
+ }
+ """,
+ "1InnerClass");
+ }
+
+ @Test
+ void shouldSupportAnonymousInnerClass() {
+ compile(
+ """
+ package com.foo;
+ class OuterClass {
+ void outerClassMethod() {
+ Object o = new Object(){};
+ }
+ }
+ """,
+ "1");
+ }
+}