Skip to content

Commit 0ac66d5

Browse files
committed
Simplify Generator classes
1 parent 1c23adf commit 0ac66d5

34 files changed

+1419
-1447
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.seasar.doma.internal.apt.annot.Annotations;
55
import org.seasar.doma.internal.apt.cttype.CtTypes;
66
import org.seasar.doma.internal.apt.decl.Declarations;
7+
import org.seasar.doma.internal.apt.generator.ClassNames;
78

89
public class Context {
910

@@ -48,4 +49,8 @@ public Declarations getDeclarations() {
4849
public CtTypes getCtTypes() {
4950
return new CtTypes(this);
5051
}
52+
53+
public ClassNames getClassNames() {
54+
return new ClassNames(this);
55+
}
5156
}

src/main/java/org/seasar/doma/internal/apt/cttype/CtTypes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public CtTypes(Context ctx) {
3535
this.ctx = ctx;
3636
}
3737

38-
private AnyCtType newAnyCtType(TypeMirror type) {
38+
public AnyCtType newAnyCtType(TypeMirror type) {
3939
return new AnyCtType(ctx, type);
4040
}
4141

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

Lines changed: 12 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,96 +2,30 @@
22

33
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
44

5-
import java.io.BufferedWriter;
6-
import java.io.IOException;
7-
import java.util.Formatter;
85
import javax.lang.model.element.TypeElement;
96
import javax.lang.model.type.TypeMirror;
10-
import javax.tools.JavaFileObject;
117
import org.seasar.doma.internal.Artifact;
12-
import org.seasar.doma.internal.Conventions;
13-
import org.seasar.doma.internal.apt.AptException;
148
import org.seasar.doma.internal.apt.Context;
15-
import org.seasar.doma.internal.util.ClassUtil;
16-
import org.seasar.doma.message.Message;
179

1810
public abstract class AbstractGenerator implements Generator {
1911

20-
protected static final String INDENT_SPACE = " ";
21-
2212
protected final Context ctx;
2313

24-
protected final TypeElement typeElement;
25-
26-
protected final String canonicalName;
14+
protected final ClassName className;
2715

2816
protected final String packageName;
2917

3018
protected final String simpleName;
3119

32-
protected final String fullpackage;
33-
34-
protected final String subpackage;
35-
36-
protected final String prefix;
37-
38-
protected final String suffix;
39-
40-
protected final Formatter formatter;
20+
protected final Printer printer;
4121

42-
protected final StringBuilder indentBuffer = new StringBuilder();
43-
44-
protected AbstractGenerator(
45-
Context ctx,
46-
TypeElement typeElement,
47-
String fullpackage,
48-
String subpackage,
49-
String prefix,
50-
String suffix)
51-
throws IOException {
52-
assertNotNull(ctx, typeElement, prefix, suffix);
22+
protected AbstractGenerator(Context ctx, ClassName className, Printer printer) {
23+
assertNotNull(ctx, className, printer);
5324
this.ctx = ctx;
54-
this.typeElement = typeElement;
55-
this.fullpackage = fullpackage;
56-
this.subpackage = subpackage;
57-
this.prefix = prefix;
58-
this.suffix = suffix;
59-
this.canonicalName =
60-
createCanonicalName(ctx, typeElement, fullpackage, subpackage, prefix, suffix);
61-
this.packageName = ClassUtil.getPackageName(canonicalName);
62-
this.simpleName = ClassUtil.getSimpleName(canonicalName);
63-
JavaFileObject file = ctx.getResources().createSourceFile(canonicalName, typeElement);
64-
formatter = new Formatter(new BufferedWriter(file.openWriter()));
65-
}
66-
67-
protected String createCanonicalName(
68-
Context ctx,
69-
TypeElement typeElement,
70-
String fullpackage,
71-
String subpackage,
72-
String prefix,
73-
String suffix) {
74-
String qualifiedNamePrefix = getQualifiedNamePrefix(ctx, typeElement, fullpackage, subpackage);
75-
String binaryName =
76-
Conventions.normalizeBinaryName(ctx.getElements().getBinaryNameAsString(typeElement));
77-
String infix = ClassUtil.getSimpleName(binaryName);
78-
return qualifiedNamePrefix + prefix + infix + suffix;
79-
}
80-
81-
protected String getQualifiedNamePrefix(
82-
Context ctx, TypeElement typeElement, String fullpackage, String subpackage) {
83-
if (fullpackage != null) {
84-
return fullpackage + ".";
85-
}
86-
String packageName = ctx.getElements().getPackageName(typeElement);
87-
String base = "";
88-
if (packageName != null && packageName.length() > 0) {
89-
base = packageName + ".";
90-
}
91-
if (subpackage != null) {
92-
return base + subpackage + ".";
93-
}
94-
return base;
25+
this.className = className;
26+
this.packageName = className.getPackageName();
27+
this.simpleName = className.getSimpleName();
28+
this.printer = printer;
9529
}
9630

9731
protected void printGenerated() {
@@ -118,41 +52,19 @@ protected void printValidateVersionStaticInitializer() {
11852
}
11953

12054
protected void iprint(String format, Object... args) {
121-
formatter.format(indentBuffer.toString());
122-
throwExceptionIfNecessary();
123-
formatter.format(format, args);
124-
throwExceptionIfNecessary();
55+
printer.iprint(format, args);
12556
}
12657

12758
protected void print(String format, Object... args) {
128-
formatter.format(format, args);
129-
throwExceptionIfNecessary();
130-
}
131-
132-
protected void throwExceptionIfNecessary() {
133-
IOException ioException = formatter.ioException();
134-
if (ioException != null) {
135-
formatter.close();
136-
throw new AptException(
137-
Message.DOMA4079, typeElement, ioException, new Object[] {canonicalName, ioException});
138-
}
59+
printer.print(format, args);
13960
}
14061

14162
protected void indent() {
142-
indentBuffer.append(INDENT_SPACE);
63+
printer.indent();
14364
}
14465

14566
protected void unindent() {
146-
if (indentBuffer.length() >= INDENT_SPACE.length()) {
147-
indentBuffer.setLength(indentBuffer.length() - INDENT_SPACE.length());
148-
}
149-
}
150-
151-
@Override
152-
public void close() {
153-
if (formatter != null) {
154-
formatter.close();
155-
}
67+
printer.unindent();
15668
}
15769

15870
private TypeMirror getGeneratedTypeMirror() {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.seasar.doma.internal.apt.generator;
2+
3+
import org.seasar.doma.internal.util.ClassUtil;
4+
5+
public class ClassName implements CharSequence {
6+
7+
private final String qualifiedName;
8+
9+
ClassName(String qualifiedName) {
10+
this.qualifiedName = qualifiedName;
11+
}
12+
13+
public String getPackageName() {
14+
return ClassUtil.getPackageName(qualifiedName);
15+
}
16+
17+
public String getSimpleName() {
18+
return ClassUtil.getSimpleName(qualifiedName);
19+
}
20+
21+
@Override
22+
public int length() {
23+
return qualifiedName.length();
24+
}
25+
26+
@Override
27+
public char charAt(int index) {
28+
return qualifiedName.charAt(index);
29+
}
30+
31+
@Override
32+
public CharSequence subSequence(int start, int end) {
33+
return qualifiedName.subSequence(start, end);
34+
}
35+
36+
@Override
37+
public String toString() {
38+
return qualifiedName;
39+
}
40+
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package org.seasar.doma.internal.apt.generator;
2+
3+
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
4+
5+
import javax.lang.model.element.TypeElement;
6+
import org.seasar.doma.internal.Constants;
7+
import org.seasar.doma.internal.Conventions;
8+
import org.seasar.doma.internal.apt.Context;
9+
import org.seasar.doma.internal.util.ClassUtil;
10+
11+
public class ClassNames {
12+
13+
private final Context ctx;
14+
15+
public ClassNames(Context ctx) {
16+
assertNotNull(ctx);
17+
this.ctx = ctx;
18+
}
19+
20+
public ClassName newDaoImplClassName(TypeElement typeElement) {
21+
assertNotNull(typeElement);
22+
return new DaoImplClassNameBuilder(typeElement).build();
23+
}
24+
25+
public ClassName newDomainMetaTypeClassName(TypeElement typeElement) {
26+
assertNotNull(typeElement);
27+
return new MetaTypeClassNameBuilder(typeElement).build();
28+
}
29+
30+
public ClassName newEmbeddableMetaTypeClassName(TypeElement typeElement) {
31+
assertNotNull(typeElement);
32+
return new MetaTypeClassNameBuilder(typeElement).build();
33+
}
34+
35+
public ClassName newEntityMetaTypeClassName(TypeElement typeElement) {
36+
assertNotNull(typeElement);
37+
return new MetaTypeClassNameBuilder(typeElement).build();
38+
}
39+
40+
public ClassName newExternalDomainMetaTypeClassName(TypeElement typeElement) {
41+
assertNotNull(typeElement);
42+
return new ExternalDomainMetaTypeClassNameBuilder(typeElement).build();
43+
}
44+
45+
private class MetaTypeClassNameBuilder {
46+
protected final TypeElement typeElement;
47+
48+
private MetaTypeClassNameBuilder(TypeElement typeElement) {
49+
this.typeElement = typeElement;
50+
}
51+
52+
protected String prefix() {
53+
String packageName = ctx.getElements().getPackageName(typeElement);
54+
String prefix = "";
55+
if (packageName != null && packageName.length() > 0) {
56+
prefix = packageName + ".";
57+
}
58+
return prefix;
59+
}
60+
61+
protected String infix() {
62+
return Constants.METATYPE_PREFIX;
63+
}
64+
65+
protected String suffix() {
66+
String binaryName =
67+
Conventions.normalizeBinaryName(ctx.getElements().getBinaryNameAsString(typeElement));
68+
return ClassUtil.getSimpleName(binaryName);
69+
}
70+
71+
public ClassName build() {
72+
return new ClassName(prefix() + infix() + suffix());
73+
}
74+
}
75+
76+
private class ExternalDomainMetaTypeClassNameBuilder extends MetaTypeClassNameBuilder {
77+
78+
private ExternalDomainMetaTypeClassNameBuilder(TypeElement typeElement) {
79+
super(typeElement);
80+
}
81+
82+
@Override
83+
protected String prefix() {
84+
return Constants.EXTERNAL_DOMAIN_METATYPE_ROOT_PACKAGE
85+
+ "."
86+
+ ctx.getElements().getPackageName(typeElement)
87+
+ ".";
88+
}
89+
}
90+
91+
private class DaoImplClassNameBuilder {
92+
93+
private final TypeElement typeElement;
94+
95+
private DaoImplClassNameBuilder(TypeElement typeElement) {
96+
this.typeElement = typeElement;
97+
}
98+
99+
protected String prefix() {
100+
String daoPackage = ctx.getOptions().getDaoPackage();
101+
if (daoPackage != null) {
102+
return daoPackage + ".";
103+
}
104+
String packageName = ctx.getElements().getPackageName(typeElement);
105+
String base = "";
106+
if (packageName != null && packageName.length() > 0) {
107+
base = packageName + ".";
108+
}
109+
String daoSubpackage = ctx.getOptions().getDaoSubpackage();
110+
if (daoSubpackage != null) {
111+
return base + daoSubpackage + ".";
112+
}
113+
return base;
114+
}
115+
116+
protected String infix() {
117+
String binaryName =
118+
Conventions.normalizeBinaryName(ctx.getElements().getBinaryNameAsString(typeElement));
119+
return ClassUtil.getSimpleName(binaryName);
120+
}
121+
122+
protected String suffix() {
123+
return ctx.getOptions().getDaoSuffix();
124+
}
125+
126+
public ClassName build() {
127+
return new ClassName(prefix() + infix() + suffix());
128+
}
129+
}
130+
}

0 commit comments

Comments
 (0)