Skip to content

Commit 883cf96

Browse files
committed
#11 - [WARNING] /path/to/SomeType.java found raw type: org.gwtproject.editor.client.adapters.SimpleEditor missing type arguments... - done
1 parent 37921b6 commit 883cf96

File tree

37 files changed

+324
-271
lines changed

37 files changed

+324
-271
lines changed

gwt-editor-gwt2-tests/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<properties>
1919
<maven.gwt.plugin>1.0.0</maven.gwt.plugin>
2020

21-
<gwt.version>2.9.0</gwt.version>
21+
<gwt.version>2.10.0</gwt.version>
2222
<junit.version>4.13.1</junit.version>
2323
</properties>
2424

gwt-editor-processor/src/main/java/org/gwtproject/editor/processor/DriverProcessor.java

Lines changed: 152 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,30 @@
2020
import com.google.auto.common.MoreTypes;
2121
import com.google.auto.service.AutoService;
2222
import com.google.common.base.Stopwatch;
23-
import com.squareup.javapoet.*;
23+
import com.squareup.javapoet.AnnotationSpec;
24+
import com.squareup.javapoet.ClassName;
25+
import com.squareup.javapoet.FieldSpec;
26+
import com.squareup.javapoet.JavaFile;
27+
import com.squareup.javapoet.MethodSpec;
28+
import com.squareup.javapoet.ParameterizedTypeName;
29+
import com.squareup.javapoet.TypeName;
30+
import com.squareup.javapoet.TypeSpec;
2431
import java.io.IOException;
2532
import java.io.PrintWriter;
2633
import java.io.StringWriter;
27-
import java.util.*;
34+
import java.util.ArrayList;
35+
import java.util.IdentityHashMap;
36+
import java.util.List;
37+
import java.util.Map;
38+
import java.util.Set;
39+
import java.util.StringJoiner;
2840
import java.util.stream.Stream;
29-
import javax.annotation.processing.*;
41+
import javax.annotation.processing.AbstractProcessor;
42+
import javax.annotation.processing.Filer;
43+
import javax.annotation.processing.Messager;
44+
import javax.annotation.processing.ProcessingEnvironment;
45+
import javax.annotation.processing.Processor;
46+
import javax.annotation.processing.RoundEnvironment;
3047
import javax.lang.model.SourceVersion;
3148
import javax.lang.model.element.Element;
3249
import javax.lang.model.element.Modifier;
@@ -164,6 +181,10 @@ protected void generate(TypeElement interfaceToImplement, EditorModel rootEditor
164181
.addModifiers(Modifier.PUBLIC)
165182
.returns(void.class)
166183
.addAnnotation(Override.class)
184+
.addAnnotation(
185+
AnnotationSpec.builder(SuppressWarnings.class)
186+
.addMember("value", "$S", "unchecked")
187+
.build())
167188
.addParameter(EditorVisitor.class, "visitor")
168189
// ugly cast to shut up java warnings at compile time - however, this might be overkill,
169190
// could just use raw types
@@ -240,6 +261,10 @@ protected void generate(TypeElement interfaceToImplement, EditorModel rootEditor
240261
/**
241262
* Joins the name of the type with any enclosing types, with "_" as the delimeter, and appends an
242263
* optional suffix.
264+
*
265+
* @param interfaceToImplement TypeElement of the interface to implement
266+
* @param suffix suffix to use or null (no suffix)
267+
* @return created name
243268
*/
244269
protected String createNameFromEnclosedTypes(TypeElement interfaceToImplement, String suffix) {
245270
StringJoiner joiner = new StringJoiner("_", "", suffix == null ? "" : suffix);
@@ -272,22 +297,38 @@ protected ClassName getEditorDelegate(EditorModel editorModel, EditorProperty da
272297
TypeSpec.classBuilder(delegateSimpleName)
273298
.addOriginatingElement(types.asElement(data.getEditedType()))
274299
.addOriginatingElement(types.asElement(data.getEditorType()))
275-
.addModifiers(Modifier.PUBLIC)
276-
// Once GWT supports the new package of the Generated class
277-
// we can uncomment this code
278-
// .addAnnotation(
279-
// AnnotationSpec.builder(getGeneratedClassName())
280-
// .addMember("value", "\"$L\"",
281-
// DriverProcessor.class.getCanonicalName())
282-
// .build())
283-
.superclass(getEditorDelegateType()); // raw type here, for the same reason as above
300+
.addModifiers(Modifier.PUBLIC);
301+
// Once GWT supports the new package of the Generated class
302+
// we can uncomment this code
303+
// .addAnnotation(
304+
// AnnotationSpec.builder(getGeneratedClassName())
305+
// .addMember("value", "\"$L\"",
306+
// DriverProcessor.class.getCanonicalName())
307+
// .build())
308+
if (data.getEditedType() != null && data.getEditorType() != null) {
309+
ParameterizedTypeName delegateType =
310+
ParameterizedTypeName.get(
311+
getEditorDelegateType(),
312+
TypeName.get(data.getEditedType()),
313+
TypeName.get(data.getEditorType()));
314+
delegateTypeBuilder.superclass(delegateType);
315+
} else {
316+
delegateTypeBuilder.superclass(getEditorDelegateType());
317+
}
284318

285319
NameFactory names = new NameFactory();
286320
Map<EditorProperty, String> delegateFields = new IdentityHashMap<>();
287321

288-
delegateTypeBuilder.addField(
289-
FieldSpec.builder(rawEditorType, "editor", Modifier.PRIVATE).build());
290-
names.addName("editor");
322+
if (data.getEditorType() != null) {
323+
delegateTypeBuilder.addField(
324+
FieldSpec.builder(ClassName.get(data.getEditorType()), "editor", Modifier.PRIVATE)
325+
.build());
326+
names.addName("editor");
327+
} else {
328+
delegateTypeBuilder.addField(
329+
FieldSpec.builder(rawEditorType, "editor", Modifier.PRIVATE).build());
330+
names.addName("editor");
331+
}
291332
delegateTypeBuilder.addField(
292333
FieldSpec.builder(ClassName.get(data.getEditedType()), "object", Modifier.PRIVATE).build());
293334
names.addName("object");
@@ -298,26 +339,48 @@ protected ClassName getEditorDelegate(EditorModel editorModel, EditorProperty da
298339
String fieldName = names.createName(d.getPropertyName() + "Delegate");
299340
delegateFields.put(d, fieldName);
300341
delegateTypeBuilder.addField(
301-
getEditorDelegateType(), fieldName, Modifier.PRIVATE); // TODO parameterize
342+
ParameterizedTypeName.get(
343+
getEditorDelegateType(),
344+
TypeName.get(d.getEditedType()),
345+
TypeName.get(d.getEditorType())),
346+
fieldName,
347+
Modifier.PRIVATE);
302348
}
303349
}
304350

305-
delegateTypeBuilder.addMethod(
306-
MethodSpec.methodBuilder("getEditor")
307-
.addModifiers(Modifier.PROTECTED)
308-
.returns(rawEditorType)
309-
.addAnnotation(Override.class)
310-
.addStatement("return editor")
311-
.build());
312-
313-
delegateTypeBuilder.addMethod(
314-
MethodSpec.methodBuilder("setEditor")
315-
.addModifiers(Modifier.PROTECTED)
316-
.returns(void.class)
317-
.addAnnotation(Override.class)
318-
.addParameter(Editor.class, "editor")
319-
.addStatement("this.editor = ($T) editor", rawEditorType)
320-
.build());
351+
if (data.getEditorType() != null) {
352+
delegateTypeBuilder.addMethod(
353+
MethodSpec.methodBuilder("getEditor")
354+
.addModifiers(Modifier.PROTECTED)
355+
.returns(ClassName.get(data.getEditorType()))
356+
.addAnnotation(Override.class)
357+
.addStatement("return editor")
358+
.build());
359+
delegateTypeBuilder.addMethod(
360+
MethodSpec.methodBuilder("setEditor")
361+
.addModifiers(Modifier.PROTECTED)
362+
.returns(void.class)
363+
.addAnnotation(Override.class)
364+
.addParameter(ClassName.get(data.getEditorType()), "editor")
365+
.addStatement("this.editor = editor")
366+
.build());
367+
} else {
368+
delegateTypeBuilder.addMethod(
369+
MethodSpec.methodBuilder("getEditor")
370+
.addModifiers(Modifier.PROTECTED)
371+
.returns(rawEditorType)
372+
.addAnnotation(Override.class)
373+
.addStatement("return editor")
374+
.build());
375+
delegateTypeBuilder.addMethod(
376+
MethodSpec.methodBuilder("setEditor")
377+
.addModifiers(Modifier.PROTECTED)
378+
.returns(void.class)
379+
.addAnnotation(Override.class)
380+
.addParameter(Editor.class, "editor")
381+
.addStatement("this.editor = editor")
382+
.build());
383+
}
321384

322385
delegateTypeBuilder.addMethod(
323386
MethodSpec.methodBuilder("getObject")
@@ -327,14 +390,25 @@ protected ClassName getEditorDelegate(EditorModel editorModel, EditorProperty da
327390
.addStatement("return object")
328391
.build());
329392

330-
delegateTypeBuilder.addMethod(
331-
MethodSpec.methodBuilder("setObject")
332-
.addModifiers(Modifier.PROTECTED)
333-
.returns(void.class)
334-
.addAnnotation(Override.class)
335-
.addParameter(ClassName.get(Object.class), "object")
336-
.addStatement("this.object = ($T) object", ClassName.get(data.getEditedType()))
337-
.build());
393+
if (data.getEditedType() != null) {
394+
delegateTypeBuilder.addMethod(
395+
MethodSpec.methodBuilder("setObject")
396+
.addModifiers(Modifier.PROTECTED)
397+
.returns(void.class)
398+
.addAnnotation(Override.class)
399+
.addParameter(ClassName.get(data.getEditedType()), "object")
400+
.addStatement("this.object = object")
401+
.build());
402+
} else {
403+
delegateTypeBuilder.addMethod(
404+
MethodSpec.methodBuilder("setObject")
405+
.addModifiers(Modifier.PROTECTED)
406+
.returns(void.class)
407+
.addAnnotation(Override.class)
408+
.addParameter(ClassName.get(Object.class), "object")
409+
.addStatement("this.object = ($T) object", ClassName.get(data.getEditedType()))
410+
.build());
411+
}
338412

339413
MethodSpec.Builder initializeSubDelegatesBuilder =
340414
MethodSpec.methodBuilder("initializeSubDelegates")
@@ -520,18 +594,49 @@ private ClassName getEditorContext(EditorProperty parent, EditorProperty data) {
520594
MethodSpec.methodBuilder("checkAssignment")
521595
.addModifiers(Modifier.PUBLIC)
522596
.addAnnotation(Override.class)
597+
.addAnnotation(
598+
AnnotationSpec.builder(SuppressWarnings.class)
599+
.addMember("value", "$S", "unchecked")
600+
.build())
523601
.returns(ClassName.get(data.getEditedType()))
524602
.addParameter(Object.class, "value")
525603
.addStatement("return ($T) value", ClassName.get(data.getEditedType()))
526604
.build());
527605

528-
contextTypeBuilder.addMethod(
529-
MethodSpec.methodBuilder("getEditedType")
530-
.addModifiers(Modifier.PUBLIC)
531-
.addAnnotation(Override.class)
532-
.returns(Class.class)
533-
.addStatement("return $L.class", MoreTypes.asElement(data.getEditedType()))
534-
.build());
606+
if (MoreTypes.asDeclared(data.getEditorType()).getTypeArguments().size() > 1) {
607+
contextTypeBuilder.addMethod(
608+
MethodSpec.methodBuilder("getEditedType")
609+
.addModifiers(Modifier.PUBLIC)
610+
.addAnnotation(Override.class)
611+
.addAnnotation(
612+
AnnotationSpec.builder(SuppressWarnings.class)
613+
.addMember("value", "$S", "unchecked")
614+
.build())
615+
.returns(
616+
ParameterizedTypeName.get(
617+
ClassName.get(Class.class), ClassName.get(data.getEditedType())))
618+
.addStatement(
619+
"return ($T<$T>) ($T) $L.class",
620+
ClassName.get(Class.class),
621+
ClassName.get(data.getEditedType()),
622+
ClassName.get(Class.class),
623+
MoreTypes.asElement(data.getEditedType()))
624+
.build());
625+
} else {
626+
contextTypeBuilder.addMethod(
627+
MethodSpec.methodBuilder("getEditedType")
628+
.addModifiers(Modifier.PUBLIC)
629+
.addAnnotation(Override.class)
630+
.addAnnotation(
631+
AnnotationSpec.builder(SuppressWarnings.class)
632+
.addMember("value", "$S", "unchecked")
633+
.build())
634+
.returns(
635+
ParameterizedTypeName.get(
636+
ClassName.get(Class.class), ClassName.get(data.getEditedType())))
637+
.addStatement("return $L.class", MoreTypes.asElement(data.getEditedType()))
638+
.build());
639+
}
535640

536641
contextTypeBuilder.addMethod(
537642
MethodSpec.methodBuilder("getFromModel")

0 commit comments

Comments
 (0)