From f013ea7242bde78a1ef64fa691f3ee2f1a13675c Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Fri, 12 Jan 2024 21:22:52 +0100 Subject: [PATCH 1/4] Set the component description via JAXB The description is now expected to be a string. Any special (html) characters need to be properly encoded. See #638 --- RELEASE_NOTES.md | 7 +++++ .../schema/wbp-component.xsd | 2 +- .../helpers/ComponentDescriptionHelper.java | 31 +++---------------- .../ComponentDescriptionHelperTest.java | 4 +-- 4 files changed, 15 insertions(+), 29 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 9f8af9049..9555806aa 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -32,6 +32,13 @@ The technology is effectively dead and the project no longer actively maintained In prevent compilation errors inside the workspace, those components have been removed from the project. +### Changes to wbp-component.xml schema + +All special characters in the description need to be properly encoded. + +Example: +<b>...</b> + ## 1.14.0 (2023-12) ### Deprecation of SWTResourceManager diff --git a/org.eclipse.wb.core.databinding.xsd/schema/wbp-component.xsd b/org.eclipse.wb.core.databinding.xsd/schema/wbp-component.xsd index 1df2101be..6936ec3ba 100644 --- a/org.eclipse.wb.core.databinding.xsd/schema/wbp-component.xsd +++ b/org.eclipse.wb.core.databinding.xsd/schema/wbp-component.xsd @@ -48,7 +48,7 @@ - + diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java index afc22057a..ab461859d 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java @@ -71,7 +71,6 @@ import org.eclipse.wb.internal.core.model.description.rules.StandardBeanPropertiesRule; import org.eclipse.wb.internal.core.model.description.rules.StandardBeanPropertyTagRule; import org.eclipse.wb.internal.core.model.description.rules.ToolkitRule; -import org.eclipse.wb.internal.core.utils.IOUtils2; import org.eclipse.wb.internal.core.utils.ast.AstEditor; import org.eclipse.wb.internal.core.utils.ast.AstNodeUtils; import org.eclipse.wb.internal.core.utils.ast.AstParser; @@ -391,9 +390,7 @@ private static ComponentDescription getDescription0(AstEditor editor, ComponentD process(componentDescription, component, editor); } // clear parts that can not be inherited - if (descriptionInfo.clazz == componentClass) { - setDescriptionWithInnerTags(componentDescription, resourceInfo); - } else { + if (descriptionInfo.clazz != componentClass) { componentDescription.clearCreations(); componentDescription.setDescription(null); } @@ -440,22 +437,6 @@ && shouldCacheDescriptions_inPackage(descriptionInfos.getLast(), componentClass) } } - /** - * Usually XML parsers don't allow to get content of element with all inner - * tags, but we want these tags for description. So, we need special way to get - * description. Right now it is not very accurate, but may be will enough for - * practical purposes. - */ - private static void setDescriptionWithInnerTags(ComponentDescription componentDescription, - ResourceInfo resourceInfo) throws Exception { - InputStream stream = resourceInfo.getURL().openStream(); - String string = IOUtils2.readString(stream); - String description = StringUtils.substringBetween(string, "", ""); - if (description != null) { - componentDescription.setDescription(description); - } - } - /** * Configures default {@link CreationDescription} with valid source. */ @@ -644,6 +625,10 @@ private static void process(ComponentDescription componentDescription, Component } } } + // description text + { + acceptSafe(componentDescription, component.getDescription(), ComponentDescription::setDescription); + } } /** @@ -671,12 +656,6 @@ private static void addRules(Digester digester, AstEditor editor, Class compo { digester.addRule("component/public-field-properties", new PublicFieldPropertiesRule()); } - // description text - { - String pattern = "component/description"; - digester.addCallMethod(pattern, "setDescription", 1); - digester.addCallParam(pattern, 0); - } // constructors { String pattern = "component/constructors/constructor"; diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/description/ComponentDescriptionHelperTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/description/ComponentDescriptionHelperTest.java index efdfab101..4581f5416 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/description/ComponentDescriptionHelperTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/description/ComponentDescriptionHelperTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2023 Google, Inc. + * Copyright (c) 2011, 2024 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -415,7 +415,7 @@ public void test_textualDescription_HTML() throws Exception { setFileContent("wbp-meta/test/MyPanel.wbp-component.xml", getSource("", "", - " My cool description", "")); + " My <b>cool</b> description", "")); waitForAutoBuild(); // parse ContainerInfo panel = parseContainer("// filler filler filler", "public class Test extends MyPanel {", From 40a9245f4431413d4ae2cabfd85404d441459355 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Fri, 12 Jan 2024 21:58:13 +0100 Subject: [PATCH 2/4] Process exposing rules via JAXB Note that there is no real distinction between inclusions and exclusions, hence why we work directly with the JAXBElement. See #638 --- .../helpers/ComponentDescriptionHelper.java | 18 ++++++++++----- .../description/rules/ExposingRulesRule.java | 23 +++++++++++-------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java index ab461859d..0f9e447fb 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java @@ -13,6 +13,8 @@ import org.eclipse.wb.core.databinding.xsd.component.Component; import org.eclipse.wb.core.databinding.xsd.component.ContextFactory; import org.eclipse.wb.core.databinding.xsd.component.Creation; +import org.eclipse.wb.core.databinding.xsd.component.ExposingRuleType; +import org.eclipse.wb.core.databinding.xsd.component.ExposingRulesType; import org.eclipse.wb.core.databinding.xsd.component.MorphingType; import org.eclipse.wb.core.databinding.xsd.component.TagType; import org.eclipse.wb.core.databinding.xsd.component.TypeParameterType; @@ -110,6 +112,7 @@ import java.util.List; import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBElement; import jakarta.xml.bind.Unmarshaller; /** @@ -629,6 +632,15 @@ private static void process(ComponentDescription componentDescription, Component { acceptSafe(componentDescription, component.getDescription(), ComponentDescription::setDescription); } + // exposed children + { + if (component.getExposingRules() != null) { + ExposingRulesType exposingRules = component.getExposingRules(); + for (JAXBElement exposingRule : exposingRules.getExcludeOrInclude()) { + acceptSafe(componentDescription, exposingRule, new ExposingRulesRule()); + } + } + } } /** @@ -680,12 +692,6 @@ private static void addRules(Digester digester, AstEditor editor, Class compo digester.addRule(pattern + "/methods", new MethodOrderMethodsRule()); digester.addRule(pattern + "/methods/s", new MethodOrderMethodsSignatureRule()); } - // exposed children - { - String pattern = "component/exposing-rules"; - digester.addRule(pattern + "/include", new ExposingRulesRule()); - digester.addRule(pattern + "/exclude", new ExposingRulesRule()); - } // methods-exclude, methods-include { digester.addRule("component/methods/methods-include", new MethodsOperationRule(true)); diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ExposingRulesRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ExposingRulesRule.java index 5f9da435d..c9e81fa32 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ExposingRulesRule.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ExposingRulesRule.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Google, Inc. + * Copyright (c) 2011, 2024 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,33 +10,36 @@ *******************************************************************************/ package org.eclipse.wb.internal.core.model.description.rules; +import org.eclipse.wb.core.databinding.xsd.component.ExposingRuleType; import org.eclipse.wb.internal.core.model.description.ComponentDescription; import org.eclipse.wb.internal.core.model.description.ExposingMethodRule; import org.eclipse.wb.internal.core.model.description.ExposingPackageRule; import org.eclipse.wb.internal.core.model.description.ExposingRule; +import org.eclipse.wb.internal.core.model.description.helpers.ComponentDescriptionHelper.FailableBiConsumer; -import org.apache.commons.digester3.Rule; -import org.xml.sax.Attributes; +import jakarta.xml.bind.JAXBElement; /** - * The {@link Rule} that adds include/exclude rules for exposed children. + * The {@link FailableBiConsumer} that adds include/exclude rules for exposed + * children. * * @author scheglov_ke * @coverage core.model.description */ -public final class ExposingRulesRule extends AbstractDesignerRule { +public final class ExposingRulesRule + implements FailableBiConsumer, Exception> { //////////////////////////////////////////////////////////////////////////// // // Rule // //////////////////////////////////////////////////////////////////////////// @Override - public void begin(String namespace, String name, Attributes attributes) throws Exception { - ComponentDescription componentDescription = (ComponentDescription) getDigester().peek(); + public void accept(ComponentDescription componentDescription, JAXBElement jaxb) throws Exception { // prepare attributes - boolean include = "include".equals(name); - String packageName = attributes.getValue("package"); - String methodName = attributes.getValue("method"); + ExposingRuleType exposingRule = jaxb.getValue(); + boolean include = "include".equals(jaxb.getName().getLocalPart()); + String packageName = exposingRule.getPackage(); + String methodName = exposingRule.getMethod(); // add expose rules if (packageName != null) { ExposingRule rule = new ExposingPackageRule(include, packageName); From e3bb96ecfbb5a71da3c3e1f5344baeeca89e4574 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Fri, 12 Jan 2024 22:12:18 +0100 Subject: [PATCH 3/4] Handle method order & ex/inclusions via JAXB See #638 --- .../helpers/ComponentDescriptionHelper.java | 40 ++++++++++------ .../rules/MethodOrderDefaultRule.java | 21 +++++---- .../rules/MethodOrderMethodRule.java | 20 ++++---- .../rules/MethodOrderMethodsRule.java | 46 ++++++------------- .../rules/MethodsOperationRule.java | 17 ++++--- 5 files changed, 69 insertions(+), 75 deletions(-) diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java index 0f9e447fb..1a8db5db3 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java @@ -15,6 +15,7 @@ import org.eclipse.wb.core.databinding.xsd.component.Creation; import org.eclipse.wb.core.databinding.xsd.component.ExposingRuleType; import org.eclipse.wb.core.databinding.xsd.component.ExposingRulesType; +import org.eclipse.wb.core.databinding.xsd.component.MethodsOrderType; import org.eclipse.wb.core.databinding.xsd.component.MorphingType; import org.eclipse.wb.core.databinding.xsd.component.TagType; import org.eclipse.wb.core.databinding.xsd.component.TypeParameterType; @@ -44,7 +45,6 @@ import org.eclipse.wb.internal.core.model.description.rules.MethodOrderDefaultRule; import org.eclipse.wb.internal.core.model.description.rules.MethodOrderMethodRule; import org.eclipse.wb.internal.core.model.description.rules.MethodOrderMethodsRule; -import org.eclipse.wb.internal.core.model.description.rules.MethodOrderMethodsSignatureRule; import org.eclipse.wb.internal.core.model.description.rules.MethodPropertyRule; import org.eclipse.wb.internal.core.model.description.rules.MethodRule; import org.eclipse.wb.internal.core.model.description.rules.MethodSinglePropertyRule; @@ -632,6 +632,19 @@ private static void process(ComponentDescription componentDescription, Component { acceptSafe(componentDescription, component.getDescription(), ComponentDescription::setDescription); } + // method order + { + MethodsOrderType methodsOrder = component.getMethodOrder(); + if (methodsOrder != null) { + acceptSafe(componentDescription, methodsOrder.getDefault(), new MethodOrderDefaultRule()); + for (MethodsOrderType.Method method : methodsOrder.getMethod()) { + acceptSafe(componentDescription, method, new MethodOrderMethodRule()); + } + for (MethodsOrderType.Methods methods : methodsOrder.getMethods()) { + acceptSafe(componentDescription, methods, new MethodOrderMethodsRule()); + } + } + } // exposed children { if (component.getExposingRules() != null) { @@ -641,6 +654,18 @@ private static void process(ComponentDescription componentDescription, Component } } } + // methods-exclude, methods-include + { + Component.Methods methods = component.getMethods(); + if (methods != null) { + for (Component.Methods.MethodsInclude methodsInclude : methods.getMethodsInclude()) { + acceptSafe(componentDescription, methodsInclude.getSignature(), new MethodsOperationRule(true)); + } + for (Component.Methods.MethodsExclude methodsExclude : methods.getMethodsExclude()) { + acceptSafe(componentDescription, methodsExclude.getSignature(), new MethodsOperationRule(false)); + } + } + } } /** @@ -684,19 +709,6 @@ private static void addRules(Digester digester, AstEditor editor, Class compo digester.addRule(pattern + "/tag", new MethodTagRule()); addParametersRules(digester, pattern + "/parameter", state); } - // method order - { - String pattern = "component/method-order"; - digester.addRule(pattern + "/default", new MethodOrderDefaultRule()); - digester.addRule(pattern + "/method", new MethodOrderMethodRule()); - digester.addRule(pattern + "/methods", new MethodOrderMethodsRule()); - digester.addRule(pattern + "/methods/s", new MethodOrderMethodsSignatureRule()); - } - // methods-exclude, methods-include - { - digester.addRule("component/methods/methods-include", new MethodsOperationRule(true)); - digester.addRule("component/methods/methods-exclude", new MethodsOperationRule(false)); - } // untyped parameters { String pattern = "component/parameters/parameter"; diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderDefaultRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderDefaultRule.java index 2c366b0ef..a4f9532d1 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderDefaultRule.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderDefaultRule.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Google, Inc. + * Copyright (c) 2011, 2024 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,28 +10,31 @@ *******************************************************************************/ package org.eclipse.wb.internal.core.model.description.rules; +import org.eclipse.wb.core.databinding.xsd.component.DefaultMethodOrderType; +import org.eclipse.wb.core.databinding.xsd.component.MethodsOrderType; import org.eclipse.wb.internal.core.model.description.ComponentDescription; +import org.eclipse.wb.internal.core.model.description.helpers.ComponentDescriptionHelper.FailableBiConsumer; import org.eclipse.wb.internal.core.model.order.MethodOrder; -import org.apache.commons.digester3.Rule; -import org.xml.sax.Attributes; - /** - * The {@link Rule} that sets {@link ComponentDescription#setDefaultMethodOrder(MethodOrder)}. + * The {@link FailableBiConsumer} that sets + * {@link ComponentDescription#setDefaultMethodOrder(MethodOrder)}. * * @author scheglov_ke * @coverage core.model.description */ -public final class MethodOrderDefaultRule extends AbstractDesignerRule { +public final class MethodOrderDefaultRule + implements FailableBiConsumer { //////////////////////////////////////////////////////////////////////////// // // Rule // //////////////////////////////////////////////////////////////////////////// @Override - public void begin(String namespace, String name, Attributes attributes) throws Exception { - ComponentDescription componentDescription = (ComponentDescription) getDigester().peek(); - String specification = getRequiredAttribute(name, attributes, "order"); + public void accept(ComponentDescription componentDescription, MethodsOrderType.Default defaultMethod) + throws Exception { + DefaultMethodOrderType order = defaultMethod.getOrder(); + String specification = order.value(); componentDescription.setDefaultMethodOrder(MethodOrder.parse(specification)); } } diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodRule.java index 3ccd42016..5d2d8a96c 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodRule.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodRule.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Google, Inc. + * Copyright (c) 2011, 2024 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,39 +10,39 @@ *******************************************************************************/ package org.eclipse.wb.internal.core.model.description.rules; +import org.eclipse.wb.core.databinding.xsd.component.MethodsOrderType; import org.eclipse.wb.internal.core.model.description.ComponentDescription; import org.eclipse.wb.internal.core.model.description.MethodDescription; +import org.eclipse.wb.internal.core.model.description.helpers.ComponentDescriptionHelper.FailableBiConsumer; import org.eclipse.wb.internal.core.model.order.MethodOrder; import org.eclipse.wb.internal.core.utils.check.Assert; -import org.apache.commons.digester3.Rule; -import org.xml.sax.Attributes; - /** - * The {@link Rule} that {@link MethodOrder} for single {@link MethodDescription}. + * The {@link FailableBiConsumer} that {@link MethodOrder} for single + * {@link MethodDescription}. * * @author scheglov_ke * @coverage core.model.description */ -public final class MethodOrderMethodRule extends AbstractDesignerRule { +public final class MethodOrderMethodRule + implements FailableBiConsumer { //////////////////////////////////////////////////////////////////////////// // // Rule // //////////////////////////////////////////////////////////////////////////// @Override - public void begin(String namespace, String name, Attributes attributes) throws Exception { + public void accept(ComponentDescription componentDescription, MethodsOrderType.Method method) throws Exception { // prepare order MethodOrder order; { - String specification = getRequiredAttribute(name, attributes, "order"); + String specification = method.getOrder(); order = MethodOrder.parse(specification); } // prepare method MethodDescription methodDescription; { - String signature = getRequiredAttribute(name, attributes, "signature"); - ComponentDescription componentDescription = (ComponentDescription) getDigester().peek(); + String signature = method.getSignature(); methodDescription = componentDescription.getMethod(signature); Assert.isNotNull( methodDescription, diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsRule.java index a729782a7..509d50784 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsRule.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsRule.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Google, Inc. + * Copyright (c) 2011, 2024 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,55 +10,38 @@ *******************************************************************************/ package org.eclipse.wb.internal.core.model.description.rules; +import org.eclipse.wb.core.databinding.xsd.component.MethodsOrderType; import org.eclipse.wb.internal.core.model.description.ComponentDescription; import org.eclipse.wb.internal.core.model.description.MethodDescription; +import org.eclipse.wb.internal.core.model.description.helpers.ComponentDescriptionHelper.FailableBiConsumer; import org.eclipse.wb.internal.core.model.order.MethodOrder; import org.eclipse.wb.internal.core.utils.check.Assert; -import org.apache.commons.digester3.Rule; -import org.xml.sax.Attributes; - -import java.util.ArrayList; -import java.util.List; - /** - * The {@link Rule} that {@link MethodOrder} for multiple {@link MethodDescription}s. + * The {@link FailableBiConsumer} that {@link MethodOrder} for multiple + * {@link MethodDescription}s. * * @author scheglov_ke * @coverage core.model.description */ -public final class MethodOrderMethodsRule extends AbstractDesignerRule { - private MethodOrder m_order; - private List m_signatures; - +public final class MethodOrderMethodsRule + implements FailableBiConsumer { //////////////////////////////////////////////////////////////////////////// // // Rule // //////////////////////////////////////////////////////////////////////////// @Override - public void begin(String namespace, String name, Attributes attributes) throws Exception { + public void accept(ComponentDescription componentDescription, MethodsOrderType.Methods methods) throws Exception { // prepare order - { - String specification = getRequiredAttribute(name, attributes, "order"); - m_order = MethodOrder.parse(specification); - } - // push List for signatures - { - m_signatures = new ArrayList<>(); - getDigester().push(m_signatures); - } - } - - @Override - public void end(String namespace, String name) throws Exception { - getDigester().pop(); - ComponentDescription componentDescription = (ComponentDescription) getDigester().peek(); - for (String signature : m_signatures) { + String specification = methods.getOrder(); + MethodOrder m_order = MethodOrder.parse(specification); + // + for (MethodsOrderType.Methods.S signature : methods.getS()) { // prepare method MethodDescription methodDescription; { - methodDescription = componentDescription.getMethod(signature); + methodDescription = componentDescription.getMethod(signature.getValue()); Assert.isNotNull( methodDescription, "Can not find method %s for %s.", @@ -68,8 +51,5 @@ public void end(String namespace, String name) throws Exception { // set order methodDescription.setOrder(m_order); } - // clean up - m_order = null; - m_signatures = null; } } diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodsOperationRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodsOperationRule.java index d197f5cb9..7a6714c81 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodsOperationRule.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodsOperationRule.java @@ -12,11 +12,11 @@ import org.eclipse.wb.internal.core.model.description.ComponentDescription; import org.eclipse.wb.internal.core.model.description.MethodDescription; +import org.eclipse.wb.internal.core.model.description.helpers.ComponentDescriptionHelper.FailableBiConsumer; import org.eclipse.wb.internal.core.utils.reflect.ReflectionUtils; import org.apache.commons.digester3.Rule; import org.apache.commons.lang.StringUtils; -import org.xml.sax.Attributes; import java.lang.reflect.Method; import java.util.Iterator; @@ -30,7 +30,7 @@ * @author scheglov_ke * @coverage core.model.description */ -public final class MethodsOperationRule extends AbstractDesignerRule { +public final class MethodsOperationRule implements FailableBiConsumer { private final boolean m_include; //////////////////////////////////////////////////////////////////////////// @@ -47,12 +47,11 @@ public MethodsOperationRule(boolean include) { // Rule // //////////////////////////////////////////////////////////////////////////// - private ComponentDescription componentDescription; + private ComponentDescription m_componentDescription; @Override - public void begin(String namespace, String name, Attributes attributes) throws Exception { - componentDescription = (ComponentDescription) getDigester().peek(); - String signature = getRequiredAttribute(name, attributes, "signature"); + public void accept(ComponentDescription componentDescription, String signature) throws Exception { + m_componentDescription = componentDescription; if (isRegexpSignature(signature)) { processRegexp(signature); } else { @@ -82,17 +81,17 @@ private void process(Predicate signaturePredicate) throws Exception { } private void processInclude(Predicate signaturePredicate) throws Exception { - Method[] methods = componentDescription.getComponentClass().getMethods(); + Method[] methods = m_componentDescription.getComponentClass().getMethods(); for (Method method : methods) { String methodSignature = ReflectionUtils.getMethodSignature(method); if (signaturePredicate.test(methodSignature)) { - componentDescription.addMethod(method); + m_componentDescription.addMethod(method); } } } private void processExclude(Predicate signaturePredicate) { - for (Iterator I = componentDescription.getMethods().iterator(); I.hasNext();) { + for (Iterator I = m_componentDescription.getMethods().iterator(); I.hasNext();) { MethodDescription methodDescription = I.next(); String methodSignature = methodDescription.getSignature(); if (signaturePredicate.test(methodSignature)) { From 12a1cbcaf616f465392d6dd66c87b23422d4c8fa Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Sat, 13 Jan 2024 12:06:01 +0100 Subject: [PATCH 4/4] Handle untyped parameters via JAXB See #638 --- .../helpers/ComponentDescriptionHelper.java | 16 +++++++++------- .../InvocationChainCreationSupportTest.java | 10 +++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java index 1a8db5db3..438fda4ee 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java @@ -666,6 +666,15 @@ private static void process(ComponentDescription componentDescription, Component } } } + // untyped parameters + { + Component.Parameters parameters = component.getParameters(); + if (parameters != null) { + for (Component.Parameters.Parameter parameter : parameters.getParameter()) { + componentDescription.addParameter(parameter.getName(), parameter.getValue()); + } + } + } } /** @@ -709,13 +718,6 @@ private static void addRules(Digester digester, AstEditor editor, Class compo digester.addRule(pattern + "/tag", new MethodTagRule()); addParametersRules(digester, pattern + "/parameter", state); } - // untyped parameters - { - String pattern = "component/parameters/parameter"; - digester.addCallMethod(pattern, "addParameter", 2); - digester.addCallParam(pattern, 0, "name"); - digester.addCallParam(pattern, 1); - } addPropertiesRules(digester, state); addConfigurablePropertiesRules(digester, state); } diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/creation/InvocationChainCreationSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/creation/InvocationChainCreationSupportTest.java index f19d468fd..2e81fbe4d 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/creation/InvocationChainCreationSupportTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/creation/InvocationChainCreationSupportTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Google, Inc. + * Copyright (c) 2011, 2024 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -72,12 +72,8 @@ public void test_0() throws Exception { "", "", " ", - " ", - " javax.swing.JButton", - " ", - " ", - " javax.swing.JButton", - " ", + " javax.swing.JButton", + " javax.swing.JButton", " ", " ", ""));