You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by jt...@apache.org on 2021/04/03 09:36:13 UTC
[netbeans-html4j] branch master updated: @ComputedProperty write
method maybe instance one
This is an automated email from the ASF dual-hosted git repository.
jtulach pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-html4j.git
The following commit(s) were added to refs/heads/master by this push:
new 3dc9560 @ComputedProperty write method maybe instance one
3dc9560 is described below
commit 3dc9560c31749a8065ea5b69cf662426db465d4e
Author: Jaroslav Tulach <ja...@apidesign.org>
AuthorDate: Sat Apr 3 11:35:59 2021 +0200
@ComputedProperty write method maybe instance one
---
.../netbeans/html/json/impl/ModelProcessor.java | 18 +++---
.../html/json/impl/WritablePropertyTest.java | 64 ++++++++++++++++++++++
2 files changed, 73 insertions(+), 9 deletions(-)
diff --git a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
index 27accd0..0dc7b87 100644
--- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
+++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
@@ -46,7 +46,6 @@ import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
-import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.AnnotationValue;
@@ -62,7 +61,6 @@ import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.MirroredTypeException;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
-import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
import javax.tools.Diagnostic;
import javax.tools.FileObject;
@@ -780,6 +778,7 @@ public final class ModelProcessor extends AbstractProcessor {
}
ExecutableElement ee = (ExecutableElement)e;
ExecutableElement write = null;
+ boolean instance = e.getEnclosingElement().getAnnotation(Model.class).instance();
if (!cp.write().isEmpty()) {
write = findWrite(ee, (TypeElement)e.getEnclosingElement(), cp.write(), className);
ok = write != null;
@@ -928,7 +927,7 @@ public final class ModelProcessor extends AbstractProcessor {
} else {
w.write(" public void " + gs[4] + "(" + write.getParameters().get(1).asType());
w.write(" value) {\n");
- w.write(" " + fqn(ee.getEnclosingElement().asType(), ee) + '.' + write.getSimpleName() + "(this, value);\n");
+ w.write(" " + (instance ? "instance" : fqn(ee.getEnclosingElement().asType(), ee)) + '.' + write.getSimpleName() + "(this, value);\n");
w.write(" }\n");
props.add(new GetSet(
@@ -1088,20 +1087,20 @@ public final class ModelProcessor extends AbstractProcessor {
}
for (String pn : onPC.value()) {
if (findPrprt(properties, pn) == null && findDerivedFrom(propDeps, pn).isEmpty()) {
- error("No Prprt named '" + pn + "' in the model", clazz);
+ error("No property named '" + pn + "' in the model", clazz);
return false;
}
}
if (!instance && !e.getModifiers().contains(Modifier.STATIC)) {
- error("@OnPrprtChange method needs to be static", e);
+ error("@OnPropertyChange method needs to be static", e);
return false;
}
if (e.getModifiers().contains(Modifier.PRIVATE)) {
- error("@OnPrprtChange method cannot be private", e);
+ error("@OnPropertyChange method cannot be private", e);
return false;
}
if (e.getReturnType().getKind() != TypeKind.VOID) {
- error("@OnPrprtChange method should return void", e);
+ error("@OnPropertyChange method should return void", e);
return false;
}
String n = e.getSimpleName().toString();
@@ -1765,7 +1764,7 @@ public final class ModelProcessor extends AbstractProcessor {
continue;
}
error(
- "@OnPrprtChange method can only accept String or " + className + " arguments",
+ "@OnPropertyChange method can only accept String or " + className + " arguments",
ee);
}
return params;
@@ -2286,6 +2285,7 @@ public final class ModelProcessor extends AbstractProcessor {
private ExecutableElement findWrite(ExecutableElement computedPropElem, TypeElement te, String name, String className) {
String err = null;
+ boolean instance = te.getAnnotation(Model.class).instance();
METHODS:
for (Element e : te.getEnclosedElements()) {
if (e.getKind() != ElementKind.METHOD) {
@@ -2297,7 +2297,7 @@ public final class ModelProcessor extends AbstractProcessor {
if (e.equals(computedPropElem)) {
continue;
}
- if (!e.getModifiers().contains(Modifier.STATIC)) {
+ if (!instance && !e.getModifiers().contains(Modifier.STATIC)) {
computedPropElem = (ExecutableElement) e;
err = "Would have to be static";
continue;
diff --git a/json/src/test/java/org/netbeans/html/json/impl/WritablePropertyTest.java b/json/src/test/java/org/netbeans/html/json/impl/WritablePropertyTest.java
new file mode 100644
index 0000000..85f9fd9
--- /dev/null
+++ b/json/src/test/java/org/netbeans/html/json/impl/WritablePropertyTest.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.html.json.impl;
+
+import net.java.html.json.ComputedProperty;
+import net.java.html.json.Model;
+import net.java.html.json.ModelOperation;
+import net.java.html.json.Property;
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.Test;
+
+@Model(className = "WritablePropertyModel", instance = true, properties = {
+ @Property(name = "meaning", type = int.class)
+})
+public class WritablePropertyTest {
+ private int value;
+
+ @ComputedProperty(write = "changeMeaning")
+ static int realMeaning(int meaning) {
+ return 40 + meaning;
+ }
+
+ void changeMeaning(WritablePropertyModel model, int value) {
+ this.value = value;
+ }
+
+ @ModelOperation
+ void readValue(WritablePropertyModel model, int[] store) {
+ store[0] = this.value;
+ }
+
+ @Test
+ public void changeValueInTest() {
+ WritablePropertyModel model = new WritablePropertyModel();
+ model.setMeaning(2);
+
+ assertEquals(model.getRealMeaning(), 42, "Changed to 42");
+
+ model.setRealMeaning(84);
+
+ assertEquals(model.getRealMeaning(), 42, "Unchanged...");
+
+ int[] holder = { -1 };
+ model.readValue(holder);
+ assertEquals(holder[0], 84, "...but value changed!");
+
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists