Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,33 @@ abstract class AbstractGenerator {

static final String DEFAULT_PACKAGE = Arc.class.getPackage().getName() + ".generator";

/**
* Create a generated bean name from a bean package. When bean is located
* in a default package (i.e. a classpath root), the target package name
* is empty string. This need to be taken into account when creating
* generated bean name because it is later used to build class file path
* and we do not want it to start from a slash because it will point root
* directory instead of a relative one. This method will address this
* problem.<br>
* <br>
* Example generated bean names (without quotes):
* <ol>
* <li>a <i>"io/quarcus/foo/FooService_Bean"</i>, when in io.quarcus.foo package,</li>
* <li>a <i>"BarService_Bean"</i>, when in default package.</li>
* </ol>
*
* @param baseName a bean name (class name)
* @param targetPackage a package where bean is located
* @return Generated name
*/
static String generatedNameFromTarget(String targetPackage, String baseName, String suffix) {
if (targetPackage == null || targetPackage.isEmpty()) {
return baseName + suffix;
} else {
return targetPackage.replace('.', '/') + "/" + baseName + suffix;
}
}

protected String getBaseName(BeanInfo bean, String beanClassName) {
String name = Types.getSimpleName(beanClassName);
return name.substring(0, name.lastIndexOf(BeanGenerator.BEAN_SUFFIX));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ Collection<Resource> generateSyntheticBean(BeanInfo bean, ReflectionRegistration
ClassInfo providerClass = bean.getDeployment().getIndex().getClassByName(providerType.name());
String providerTypeName = providerClass.name().toString();
String targetPackage = getPackageName(bean);
String generatedName = targetPackage.replace('.', '/') + "/" + baseName + BEAN_SUFFIX;
String generatedName = generatedNameFromTarget(targetPackage, baseName, BEAN_SUFFIX);

boolean isApplicationClass = applicationClassPredicate.test(bean.getImplClazz().name());
ResourceClassOutput classOutput = new ResourceClassOutput(isApplicationClass,
Expand Down Expand Up @@ -247,7 +247,7 @@ Collection<Resource> generateClassBean(BeanInfo bean, ClassInfo beanClass, Refle
ClassInfo providerClass = bean.getDeployment().getIndex().getClassByName(providerType.name());
String providerTypeName = providerClass.name().toString();
String targetPackage = DotNames.packageName(providerType.name());
String generatedName = targetPackage.replace('.', '/') + "/" + baseName + BEAN_SUFFIX;
String generatedName = generatedNameFromTarget(targetPackage, baseName, BEAN_SUFFIX);

boolean isApplicationClass = applicationClassPredicate.test(beanClass.name());
ResourceClassOutput classOutput = new ResourceClassOutput(isApplicationClass,
Expand Down Expand Up @@ -337,7 +337,7 @@ Collection<Resource> generateProducerMethodBean(BeanInfo bean, MethodInfo produc
+ Hashes.sha1(sigBuilder.toString());
String providerTypeName = providerType.name().toString();
String targetPackage = DotNames.packageName(declaringClass.name());
String generatedName = targetPackage.replace('.', '/') + "/" + baseName + BEAN_SUFFIX;
String generatedName = generatedNameFromTarget(targetPackage, baseName, BEAN_SUFFIX);

boolean isApplicationClass = applicationClassPredicate.test(declaringClass.name());
ResourceClassOutput classOutput = new ResourceClassOutput(isApplicationClass,
Expand Down Expand Up @@ -415,7 +415,7 @@ Collection<Resource> generateProducerFieldBean(BeanInfo bean, FieldInfo producer
String baseName = declaringClassBase + PRODUCER_FIELD_SUFFIX + "_" + producerField.name();
String providerTypeName = providerType.name().toString();
String targetPackage = DotNames.packageName(declaringClass.name());
String generatedName = targetPackage.replace('.', '/') + "/" + baseName + BEAN_SUFFIX;
String generatedName = generatedNameFromTarget(targetPackage, baseName, BEAN_SUFFIX);

boolean isApplicationClass = applicationClassPredicate.test(declaringClass.name());
ResourceClassOutput classOutput = new ResourceClassOutput(isApplicationClass,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ Collection<Resource> generate(BeanInfo bean, String beanClassName, ReflectionReg
String providerTypeName = providerClass.name().toString();
String baseName = getBaseName(bean, beanClassName);
String targetPackage = getPackageName(bean);
String generatedName = targetPackage.replace('.', '/') + "/" + baseName + CLIENT_PROXY_SUFFIX;
String generatedName = generatedNameFromTarget(targetPackage, baseName, CLIENT_PROXY_SUFFIX);

// Foo_ClientProxy extends Foo implements ClientProxy
List<String> interfaces = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ Collection<Resource> generate(InterceptorInfo interceptor, ReflectionRegistratio
ClassInfo providerClass = interceptor.getDeployment().getIndex().getClassByName(providerType.name());
String providerTypeName = providerClass.name().toString();
String targetPackage = DotNames.packageName(providerType.name());
String generatedName = targetPackage.replace('.', '/') + "/" + baseName + BEAN_SUFFIX;
String generatedName = generatedNameFromTarget(targetPackage, baseName, BEAN_SUFFIX);

boolean isApplicationClass = applicationClassPredicate.test(interceptor.getBeanClass());
ResourceClassOutput classOutput = new ResourceClassOutput(isApplicationClass,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,16 @@ Collection<Resource> generate(ObserverInfo observer, ReflectionRegistration refl
for (org.jboss.jandex.Type paramType : observer.getObserverMethod().parameters()) {
sigBuilder.append(paramType.name().toString());
}
String baseName = declaringClassBase + OBSERVER_SUFFIX + "_" + observer.getObserverMethod().name() + "_"
+ Hashes.sha1(sigBuilder.toString());
String generatedName = DotNames.packageName(declaringClass.name()).replace('.', '/') + "/" + baseName;

String baseName = declaringClassBase + OBSERVER_SUFFIX
+ "_" + observer.getObserverMethod().name()
+ "_" + Hashes.sha1(sigBuilder.toString());

// No suffix added at the end of generated name because it's already
// included in a baseName, e.g. Foo_Observer_fooMethod_hash

String targetPackage = DotNames.packageName(declaringClass.name());
String generatedName = generatedNameFromTarget(targetPackage, baseName, "");

boolean isApplicationClass = applicationClassPredicate.test(observer.getObserverMethod().declaringClass().name());
ResourceClassOutput classOutput = new ResourceClassOutput(isApplicationClass,
Expand Down