Skip to content

Commit 78c49d5

Browse files
authored
Refactor Scope features (#660)
* Refactor Metamodel * Rename ScopeMethod to Scope * Replace ScopeClass with ScopeClassMeta * Split validator from generator * Remove warning messages
1 parent 28e7455 commit 78c49d5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1060
-584
lines changed

doma-core/src/main/java/org/seasar/doma/Metamodel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,5 @@
3333
String suffix() default "";
3434

3535
/** @return the scope class array */
36-
Class<?>[] scope() default {};
36+
Class<?>[] scopes() default {};
3737
}

doma-core/src/main/java/org/seasar/doma/ScopeMethod.java renamed to doma-core/src/main/java/org/seasar/doma/Scope.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77

88
@Target(ElementType.METHOD)
99
@Retention(RetentionPolicy.RUNTIME)
10-
public @interface ScopeMethod {}
10+
public @interface Scope {}

doma-core/src/main/java/org/seasar/doma/message/Message.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,8 +442,8 @@ public enum Message implements MessageResource {
442442
DOMA4089(
443443
"When you annotate the field with @Id or @Version, "
444444
+ "you must not annotate the field with @Column(updatable=false) to the same field."),
445-
DOMA4090("The annotation processor \"{0}\" starts processing for the class \"{1}\"."),
446-
DOMA4091("The annotation processor \"{0}\" ends processing for the class \"{1}\"."),
445+
DOMA4090("The annotation processor \"{0}\" starts processing for the element \"{1}\"."),
446+
DOMA4091("The annotation processor \"{0}\" ends processing for the element \"{1}\"."),
447447
DOMA4092(
448448
"Failed to verify the SQL template \"{0}\" on line {2} at column {3}. The cause is as follows: {4} SQL=[{1}]."),
449449
DOMA4093("The field annotated with @Version must be numeric."),

doma-processor/src/main/java/org/seasar/doma/internal/apt/annot/Annotations.java

Lines changed: 34 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,44 @@
33
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
44

55
import java.util.ArrayList;
6-
import java.util.Collections;
7-
import java.util.List;
86
import java.util.Map;
97
import java.util.function.BiFunction;
108
import java.util.function.Function;
11-
import java.util.stream.Collectors;
12-
import javax.lang.model.element.*;
13-
import javax.lang.model.type.TypeMirror;
14-
import javax.lang.model.util.ElementFilter;
15-
import org.seasar.doma.*;
9+
import javax.lang.model.element.AnnotationMirror;
10+
import javax.lang.model.element.AnnotationValue;
11+
import javax.lang.model.element.Element;
12+
import javax.lang.model.element.ExecutableElement;
13+
import javax.lang.model.element.TypeElement;
14+
import javax.lang.model.element.VariableElement;
15+
import org.seasar.doma.AnnotateWith;
16+
import org.seasar.doma.ArrayFactory;
17+
import org.seasar.doma.BatchDelete;
18+
import org.seasar.doma.BatchInsert;
19+
import org.seasar.doma.BatchUpdate;
20+
import org.seasar.doma.BlobFactory;
21+
import org.seasar.doma.ClobFactory;
22+
import org.seasar.doma.Column;
23+
import org.seasar.doma.Dao;
24+
import org.seasar.doma.Delete;
25+
import org.seasar.doma.Domain;
26+
import org.seasar.doma.DomainConverters;
27+
import org.seasar.doma.Embeddable;
28+
import org.seasar.doma.Entity;
29+
import org.seasar.doma.Insert;
30+
import org.seasar.doma.NClobFactory;
31+
import org.seasar.doma.Procedure;
32+
import org.seasar.doma.ResultSet;
33+
import org.seasar.doma.SQLXMLFactory;
34+
import org.seasar.doma.Script;
35+
import org.seasar.doma.Select;
36+
import org.seasar.doma.SequenceGenerator;
37+
import org.seasar.doma.Sql;
38+
import org.seasar.doma.SqlProcessor;
39+
import org.seasar.doma.Table;
40+
import org.seasar.doma.TableGenerator;
41+
import org.seasar.doma.Update;
1642
import org.seasar.doma.experimental.DataType;
1743
import org.seasar.doma.internal.apt.Context;
18-
import org.seasar.doma.internal.apt.decl.TypeDeclaration;
19-
import org.seasar.doma.internal.apt.decl.TypeParameterDeclaration;
2044
import org.seasar.doma.internal.apt.util.AnnotationValueUtil;
2145

2246
public class Annotations {
@@ -179,42 +203,7 @@ public InsertAnnot newInsertAnnot(ExecutableElement method) {
179203

180204
public MetamodelAnnot newMetamodelAnnot(AnnotationMirror annotationMirror) {
181205
assertNotNull(annotationMirror);
182-
MetamodelAnnot metamodelAnnot = newInstance(annotationMirror, MetamodelAnnot::new);
183-
List<TypeMirror> types = AnnotationValueUtil.toTypeList(metamodelAnnot.getScope());
184-
for (TypeMirror t : types) {
185-
ScopeClass scopeClass = newScopeClass(t);
186-
metamodelAnnot.addScope(scopeClass);
187-
}
188-
189-
return metamodelAnnot;
190-
}
191-
192-
private ScopeClass newScopeClass(TypeMirror scopeType) {
193-
TypeDeclaration type = ctx.getDeclarations().newTypeDeclaration(scopeType);
194-
TypeElement typeElement = ctx.getMoreTypes().toTypeElement(scopeType);
195-
List<? extends Element> members = ctx.getMoreElements().getAllMembers(typeElement);
196-
List<ExecutableElement> methods = new ArrayList<>(ElementFilter.methodsIn(members));
197-
methods.removeIf(m -> m.getAnnotation(ScopeMethod.class) == null);
198-
199-
List<TypeParameterDeclaration> typeParameterDeclarations =
200-
type.getAllTypeParameterDeclarations();
201-
List<ScopeMethodAdapter> methodAdapters = new ArrayList<>(methods.size());
202-
for (ExecutableElement method : methods) {
203-
List<? extends VariableElement> parameters = method.getParameters();
204-
205-
List<TypeParameterDeclaration> typeParams =
206-
parameters.stream()
207-
.map(Element::asType)
208-
.map(
209-
formalType ->
210-
ctx.getDeclarations()
211-
.newTypeParameterDeclarationUsingTypeParams(
212-
formalType, typeParameterDeclarations))
213-
.collect(Collectors.toList());
214-
methodAdapters.add(new ScopeMethodAdapter(method, typeParams));
215-
}
216-
Collections.sort(methodAdapters);
217-
return new ScopeClass(type, methodAdapters);
206+
return newInstance(annotationMirror, MetamodelAnnot::new);
218207
}
219208

220209
public NClobFactoryAnnot newNClobFactoryAnnot(ExecutableElement method) {

doma-processor/src/main/java/org/seasar/doma/internal/apt/annot/MetamodelAnnot.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

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

5-
import java.util.ArrayList;
65
import java.util.List;
76
import java.util.Map;
87
import javax.lang.model.element.AnnotationMirror;
98
import javax.lang.model.element.AnnotationValue;
9+
import javax.lang.model.type.TypeMirror;
1010
import org.seasar.doma.internal.apt.AptIllegalStateException;
1111
import org.seasar.doma.internal.apt.util.AnnotationValueUtil;
1212

@@ -16,21 +16,19 @@ public class MetamodelAnnot extends AbstractAnnot {
1616

1717
private static final String SUFFIX = "suffix";
1818

19-
private static final String SCOPE = "scope";
19+
private static final String SCOPES = "scopes";
2020

2121
private final AnnotationValue prefix;
2222

2323
private final AnnotationValue suffix;
2424

25-
private final AnnotationValue scopeClasses;
26-
27-
private final List<ScopeClass> scopes = new ArrayList<>();
25+
private final AnnotationValue scopes;
2826

2927
MetamodelAnnot(AnnotationMirror annotationMirror, Map<String, AnnotationValue> values) {
3028
super(annotationMirror);
3129
this.prefix = assertNonNullValue(values, PREFIX);
3230
this.suffix = assertNonNullValue(values, SUFFIX);
33-
this.scopeClasses = assertNonNullValue(values, SCOPE);
31+
this.scopes = assertNonNullValue(values, SCOPES);
3432
}
3533

3634
public AnnotationValue getPrefix() {
@@ -41,8 +39,8 @@ public AnnotationValue getSuffix() {
4139
return suffix;
4240
}
4341

44-
public AnnotationValue getScope() {
45-
return scopeClasses;
42+
public AnnotationValue getScopes() {
43+
return scopes;
4644
}
4745

4846
public String getPrefixValue() {
@@ -61,11 +59,11 @@ public String getSuffixValue() {
6159
return value;
6260
}
6361

64-
public void addScope(ScopeClass scopeClass) {
65-
scopes.add(scopeClass);
66-
}
67-
68-
public List<ScopeClass> scopes() {
69-
return scopes;
62+
public List<TypeMirror> getScopesValue() {
63+
List<TypeMirror> value = AnnotationValueUtil.toTypeList(scopes);
64+
if (value == null) {
65+
throw new AptIllegalStateException(SCOPES);
66+
}
67+
return value;
7068
}
7169
}

doma-processor/src/main/java/org/seasar/doma/internal/apt/annot/ScopeClass.java

Lines changed: 0 additions & 40 deletions
This file was deleted.

doma-processor/src/main/java/org/seasar/doma/internal/apt/annot/ScopeMethodAdapter.java

Lines changed: 0 additions & 63 deletions
This file was deleted.

0 commit comments

Comments
 (0)