Skip to content

Commit 2d00f53

Browse files
committed
Merge pull request #127 from domaframework/nested-domain-class
ドメインクラスをネストした型として定義することをサポート
2 parents 9d65aac + ba7a6ef commit 2d00f53

33 files changed

+877
-196
lines changed

src/main/java/org/seasar/doma/internal/Constants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,6 @@ public final class Constants {
3939

4040
public static final String EXTERNAL_DOMAIN_METATYPE_ROOT_PACKAGE = "__";
4141

42+
public static final String BINARY_NAME_ENCLOSING_DELIMITER = "__";
43+
4244
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright 2004-2010 the Seasar Foundation and the Others.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13+
* either express or implied. See the License for the specific language
14+
* governing permissions and limitations under the License.
15+
*/
16+
package org.seasar.doma.internal;
17+
18+
import static java.util.stream.Collectors.joining;
19+
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
20+
21+
import java.util.List;
22+
23+
import org.seasar.doma.internal.util.ClassUtil;
24+
25+
/**
26+
* @author nakamura-to
27+
*
28+
*/
29+
public class Conventions {
30+
31+
public static String normalizeBinaryName(String binaryName) {
32+
assertNotNull(binaryName);
33+
String packageName = ClassUtil.getPackageName(binaryName);
34+
List<String> enclosingNames = ClassUtil.getEnclosingNames(binaryName);
35+
String simpleName = ClassUtil.getSimpleName(binaryName);
36+
String base = "";
37+
if (packageName != null && packageName.length() > 0) {
38+
base = packageName + ".";
39+
}
40+
return base
41+
+ enclosingNames
42+
.stream()
43+
.map(n -> n + Constants.BINARY_NAME_ENCLOSING_DELIMITER)
44+
.collect(joining()) + simpleName;
45+
}
46+
47+
public static String toFullMetaName(String originalBinaryName) {
48+
assertNotNull(originalBinaryName);
49+
String binaryName = normalizeBinaryName(originalBinaryName);
50+
String packageName = ClassUtil.getPackageName(binaryName);
51+
String simpleName = ClassUtil.getSimpleName(binaryName);
52+
String base = "";
53+
if (packageName != null && packageName.length() > 0) {
54+
base = packageName + ".";
55+
}
56+
return base + createSimpleMetaName(simpleName);
57+
}
58+
59+
public static String toSimpleMetaName(String originalBinaryName) {
60+
assertNotNull(originalBinaryName);
61+
String binaryName = normalizeBinaryName(originalBinaryName);
62+
String simpleName = ClassUtil.getSimpleName(binaryName);
63+
return createSimpleMetaName(simpleName);
64+
}
65+
66+
private static String createSimpleMetaName(String originalSimpleName) {
67+
return Constants.METATYPE_PREFIX + originalSimpleName;
68+
}
69+
70+
}

src/main/java/org/seasar/doma/internal/apt/AbstractGenerator.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.seasar.doma.internal.apt;
1717

18-
import static org.seasar.doma.internal.util.AssertionUtil.*;
18+
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
1919

2020
import java.io.BufferedWriter;
2121
import java.io.IOException;
@@ -28,6 +28,7 @@
2828
import javax.tools.JavaFileObject;
2929

3030
import org.seasar.doma.internal.Artifact;
31+
import org.seasar.doma.internal.Conventions;
3132
import org.seasar.doma.internal.apt.util.ElementUtil;
3233
import org.seasar.doma.internal.util.ClassUtil;
3334
import org.seasar.doma.message.Message;
@@ -44,7 +45,7 @@ public abstract class AbstractGenerator implements Generator {
4445

4546
protected final TypeElement typeElement;
4647

47-
protected final String qualifiedName;
48+
protected final String canonicalName;
4849

4950
protected final String packageName;
5051

@@ -72,24 +73,25 @@ protected AbstractGenerator(ProcessingEnvironment env,
7273
this.subpackage = subpackage;
7374
this.prefix = prefix;
7475
this.suffix = suffix;
75-
this.qualifiedName = createQualifiedName(env, typeElement, fullpackage,
76+
this.canonicalName = createCanonicalName(env, typeElement, fullpackage,
7677
subpackage, prefix, suffix);
77-
this.packageName = ClassUtil.getPackageName(qualifiedName);
78-
this.simpleName = ClassUtil.getSimpleName(qualifiedName);
78+
this.packageName = ClassUtil.getPackageName(canonicalName);
79+
this.simpleName = ClassUtil.getSimpleName(canonicalName);
7980
Filer filer = env.getFiler();
8081
JavaFileObject file = filer
81-
.createSourceFile(qualifiedName, typeElement);
82+
.createSourceFile(canonicalName, typeElement);
8283
formatter = new Formatter(new BufferedWriter(file.openWriter()));
8384
}
8485

85-
protected String createQualifiedName(ProcessingEnvironment env,
86+
protected String createCanonicalName(ProcessingEnvironment env,
8687
TypeElement typeElement, String fullpackage, String subpackage,
8788
String prefix, String suffix) {
8889
String qualifiedNamePrefix = getQualifiedNamePrefix(env, typeElement,
8990
fullpackage, subpackage);
90-
return qualifiedNamePrefix + prefix
91-
+ ElementUtil.getPackageExcludedBinaryName(typeElement, env)
92-
+ suffix;
91+
String binaryName = Conventions.normalizeBinaryName(ElementUtil
92+
.getBinaryName(typeElement, env));
93+
String infix = ClassUtil.getSimpleName(binaryName);
94+
return qualifiedNamePrefix + prefix + infix + suffix;
9395
}
9496

9597
protected String getQualifiedNamePrefix(ProcessingEnvironment env,
@@ -138,7 +140,7 @@ protected void throwExceptionIfNecessary() {
138140
if (ioException != null) {
139141
formatter.close();
140142
throw new AptException(Message.DOMA4079, env, typeElement,
141-
ioException, qualifiedName, ioException);
143+
ioException, canonicalName, ioException);
142144
}
143145
}
144146

0 commit comments

Comments
 (0)