You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2021/11/29 21:04:11 UTC
[ws-axiom] branch master updated: Remove shared-mixins
This is an automated email from the ASF dual-hosted git repository.
veithen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ws-axiom.git
The following commit(s) were added to refs/heads/master by this push:
new edcf3aa Remove shared-mixins
edcf3aa is described below
commit edcf3aac045933bfde69550b76ab29f804516cc8
Author: Andreas Veithen <an...@gmail.com>
AuthorDate: Mon Nov 29 21:04:00 2021 +0000
Remove shared-mixins
Instead allow two mixins to define the same method if their
implementations are exactly the same.
---
.../weaver/ImplementationClassDefinition.java | 30 ++++++++++++-
.../axiom/weaver/mixin/LineNumberFilter.java | 17 +++++---
.../org/apache/axiom/weaver/mixin/MethodBody.java | 13 ++++++
implementations/axiom-dom/pom.xml | 2 -
implementations/axiom-impl/pom.xml | 2 -
.../axiom/dom/impl/mixin/DOMDocumentTypeMixin.java | 15 +++++++
.../dom/impl/mixin/DOMNSAwareNamedNodeMixin.java | 17 ++++++++
.../impl/mixin/DOMProcessingInstructionMixin.java | 5 +++
.../axiom/om/impl/mixin/AxiomDocTypeMixin.java | 15 +++++++
.../impl/mixin/AxiomNamedInformationItemMixin.java | 17 ++++++++
.../mixin/AxiomProcessingInstructionMixin.java | 5 +++
mixins/pom.xml | 1 -
mixins/shared-mixins/BUILD | 32 --------------
mixins/shared-mixins/pom.xml | 50 ----------------------
.../axiom/shared/DocumentTypeDeclarationMixin.java | 37 ----------------
.../apache/axiom/shared/NSAwareNamedNodeMixin.java | 39 -----------------
.../java/org/apache/axiom/shared/package-info.java | 24 -----------
17 files changed, 126 insertions(+), 195 deletions(-)
diff --git a/axiom-weaver/src/main/java/org/apache/axiom/weaver/ImplementationClassDefinition.java b/axiom-weaver/src/main/java/org/apache/axiom/weaver/ImplementationClassDefinition.java
index c693821..663947b 100644
--- a/axiom-weaver/src/main/java/org/apache/axiom/weaver/ImplementationClassDefinition.java
+++ b/axiom-weaver/src/main/java/org/apache/axiom/weaver/ImplementationClassDefinition.java
@@ -29,12 +29,16 @@ import org.apache.axiom.weaver.mixin.Mixin;
import org.apache.axiom.weaver.mixin.MixinMethod;
import org.apache.axiom.weaver.mixin.StaticInitializerMethod;
import org.apache.axiom.weaver.mixin.TargetContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
final class ImplementationClassDefinition extends ClassDefinition {
+ private static final Log log = LogFactory.getLog(ImplementationClassDefinition.class);
+
private final TargetContext targetContext;
private final int version;
private final int access;
@@ -75,7 +79,31 @@ final class ImplementationClassDefinition extends ClassDefinition {
// Keep the existing method.
continue;
} else {
- throw new WeaverException("Method collision");
+ String body1 = existingMethod.getBody().toString(targetContext);
+ String body2 = method.getBody().toString(targetContext);
+ // Allow two mixins to define identical methods. This is useful for DOOM
+ // because some methods are defined in the same way by DOM and Axiom.
+ if (body1.equals(body2)) {
+ log.info(
+ "Ignoring identical mixin method for "
+ + signature
+ + " in "
+ + targetContext.getTargetClassName());
+ continue;
+ }
+ throw new WeaverException(
+ "Method collision for "
+ + signature
+ + " in "
+ + targetContext.getTargetClassName()
+ + "\n--- Method defined by "
+ + existingMethod.getMixin().getName()
+ + ":\n"
+ + body1
+ + "\n--- Method defined by "
+ + method.getMixin().getName()
+ + ":\n"
+ + body2);
}
}
methodMap.put(signature, method);
diff --git a/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/ProcessingInstructionMixin.java b/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/LineNumberFilter.java
similarity index 68%
rename from mixins/shared-mixins/src/main/java/org/apache/axiom/shared/ProcessingInstructionMixin.java
rename to axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/LineNumberFilter.java
index cf0f732..820bfde 100644
--- a/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/ProcessingInstructionMixin.java
+++ b/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/LineNumberFilter.java
@@ -16,14 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.axiom.shared;
+package org.apache.axiom.weaver.mixin;
-import org.apache.axiom.core.CoreProcessingInstruction;
-import org.apache.axiom.weaver.annotation.Mixin;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
-@Mixin
-public abstract class ProcessingInstructionMixin implements CoreProcessingInstruction {
- public final String getTarget() {
- return coreGetTarget();
+final class LineNumberFilter extends MethodVisitor {
+ LineNumberFilter(MethodVisitor methodVisitor) {
+ super(Opcodes.ASM9, methodVisitor);
}
+
+ @Override
+ public void visitLineNumber(int line, Label start) {}
}
diff --git a/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/MethodBody.java b/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/MethodBody.java
index 5f23c0d..0608aa1 100644
--- a/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/MethodBody.java
+++ b/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/MethodBody.java
@@ -18,7 +18,12 @@
*/
package org.apache.axiom.weaver.mixin;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.util.Textifier;
+import org.objectweb.asm.util.TraceMethodVisitor;
public abstract class MethodBody {
public abstract void apply(TargetContext context, MethodVisitor mv);
@@ -28,4 +33,12 @@ public abstract class MethodBody {
apply(DummyTargetContext.INSTANCE, new WeighingMethodVisitor(counter));
return counter.get();
}
+
+ public final String toString(TargetContext targetContext) {
+ Textifier textifier = new Textifier();
+ apply(targetContext, new LineNumberFilter(new TraceMethodVisitor(textifier)));
+ StringWriter sw = new StringWriter();
+ textifier.print(new PrintWriter(sw));
+ return sw.toString();
+ }
}
diff --git a/implementations/axiom-dom/pom.xml b/implementations/axiom-dom/pom.xml
index 8502aea..7aca284 100644
--- a/implementations/axiom-dom/pom.xml
+++ b/implementations/axiom-dom/pom.xml
@@ -108,7 +108,6 @@
<configuration>
<weavablePackages>
<weavablePackage>org.apache.axiom.core.impl.mixin</weavablePackage>
- <weavablePackage>org.apache.axiom.shared</weavablePackage>
<weavablePackage>org.apache.axiom.om.impl.mixin</weavablePackage>
<weavablePackage>org.apache.axiom.soap.impl.mixin</weavablePackage>
<weavablePackage>org.apache.axiom.dom.impl.mixin</weavablePackage>
@@ -234,7 +233,6 @@
org.apache.axiom.om.impl.*,
org.apache.axiom.soap.impl.*,
org.apache.axiom.dom.*,
- org.apache.axiom.shared.*,
org.apache.axiom.util.xml.*
</Private-Package>
</instructions>
diff --git a/implementations/axiom-impl/pom.xml b/implementations/axiom-impl/pom.xml
index 044a492..1d5dd7a 100644
--- a/implementations/axiom-impl/pom.xml
+++ b/implementations/axiom-impl/pom.xml
@@ -96,7 +96,6 @@
<configuration>
<weavablePackages>
<weavablePackage>org.apache.axiom.core.impl.mixin</weavablePackage>
- <weavablePackage>org.apache.axiom.shared</weavablePackage>
<weavablePackage>org.apache.axiom.om.impl.mixin</weavablePackage>
<weavablePackage>org.apache.axiom.soap.impl.mixin</weavablePackage>
<weavablePackage>org.apache.axiom.om.impl.llom.mixin</weavablePackage>
@@ -192,7 +191,6 @@
!org.apache.axiom.om.impl,
org.apache.axiom.om.impl.*,
org.apache.axiom.soap.impl.*,
- org.apache.axiom.shared.*,
org.apache.axiom.util.xml.*
</Private-Package>
</instructions>
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentTypeMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentTypeMixin.java
index 31c6de8..6aaab4f 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentTypeMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentTypeMixin.java
@@ -49,6 +49,21 @@ public abstract class DOMDocumentTypeMixin implements DOMDocumentType {
}
@Override
+ public final String getPublicId() {
+ return coreGetPublicId();
+ }
+
+ @Override
+ public final String getSystemId() {
+ return coreGetSystemId();
+ }
+
+ @Override
+ public final String getInternalSubset() {
+ return coreGetInternalSubset();
+ }
+
+ @Override
public final NamedNodeMap getEntities() {
throw new UnsupportedOperationException();
}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareNamedNodeMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareNamedNodeMixin.java
index 2dc7637..91b11fa 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareNamedNodeMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareNamedNodeMixin.java
@@ -27,6 +27,23 @@ import org.w3c.dom.DOMException;
@Mixin
public abstract class DOMNSAwareNamedNodeMixin implements DOMNSAwareNamedNode {
@Override
+ public final String getLocalName() {
+ return coreGetLocalName();
+ }
+
+ @Override
+ public final String getNamespaceURI() {
+ String namespaceURI = coreGetNamespaceURI();
+ return namespaceURI.length() == 0 ? null : namespaceURI;
+ }
+
+ @Override
+ public final String getPrefix() {
+ String prefix = coreGetPrefix();
+ return prefix.length() == 0 ? null : prefix;
+ }
+
+ @Override
public final void setPrefix(String prefix) throws DOMException {
if (prefix == null) {
prefix = "";
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMProcessingInstructionMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMProcessingInstructionMixin.java
index c826287..6c8f8f5 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMProcessingInstructionMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMProcessingInstructionMixin.java
@@ -33,6 +33,11 @@ public abstract class DOMProcessingInstructionMixin implements DOMProcessingInst
}
@Override
+ public final String getTarget() {
+ return coreGetTarget();
+ }
+
+ @Override
public final String getData() {
try {
return coreGetCharacterData().toString();
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocTypeMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocTypeMixin.java
index 8fc359f..e1b0a3f 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocTypeMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocTypeMixin.java
@@ -41,6 +41,21 @@ public abstract class AxiomDocTypeMixin implements AxiomDocType {
}
@Override
+ public final String getPublicId() {
+ return coreGetPublicId();
+ }
+
+ @Override
+ public final String getSystemId() {
+ return coreGetSystemId();
+ }
+
+ @Override
+ public final String getInternalSubset() {
+ return coreGetInternalSubset();
+ }
+
+ @Override
public final void serialize(XMLStreamWriter writer, boolean cache) throws XMLStreamException {
try {
internalSerialize(new XMLStreamWriterHandler(writer), cache);
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNamedInformationItemMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNamedInformationItemMixin.java
index 715c95a..8db82b2 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNamedInformationItemMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNamedInformationItemMixin.java
@@ -83,6 +83,23 @@ public abstract class AxiomNamedInformationItemMixin implements AxiomNamedInform
}
@Override
+ public final String getLocalName() {
+ return coreGetLocalName();
+ }
+
+ @Override
+ public final String getNamespaceURI() {
+ String namespaceURI = coreGetNamespaceURI();
+ return namespaceURI.length() == 0 ? null : namespaceURI;
+ }
+
+ @Override
+ public final String getPrefix() {
+ String prefix = coreGetPrefix();
+ return prefix.length() == 0 ? null : prefix;
+ }
+
+ @Override
public final OMNamespace defaultGetNamespace() {
return namespace;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomProcessingInstructionMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomProcessingInstructionMixin.java
index d32ed00..20f0b32 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomProcessingInstructionMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomProcessingInstructionMixin.java
@@ -35,6 +35,11 @@ public abstract class AxiomProcessingInstructionMixin implements AxiomProcessing
}
@Override
+ public final String getTarget() {
+ return coreGetTarget();
+ }
+
+ @Override
public final void setTarget(String target) {
coreSetTarget(target);
}
diff --git a/mixins/pom.xml b/mixins/pom.xml
index 1899306..3c5aa16 100644
--- a/mixins/pom.xml
+++ b/mixins/pom.xml
@@ -36,7 +36,6 @@
<module>core-mixins</module>
<module>dom-mixins</module>
<module>om-mixins</module>
- <module>shared-mixins</module>
</modules>
<build>
diff --git a/mixins/shared-mixins/BUILD b/mixins/shared-mixins/BUILD
deleted file mode 100644
index 61bfde4..0000000
--- a/mixins/shared-mixins/BUILD
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# 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.
-#
-
-load('//buildutils:aspectj.bzl', 'aj_library')
-
-aj_library(
- name = "shared-aspects",
- srcs = glob([
- "src/main/java/**/*.java",
- "src/main/java/**/*.aj",
- ]),
- deps = [
- "//aspects/core-aspects:interface",
- ],
- visibility = ["//visibility:public"],
-)
diff --git a/mixins/shared-mixins/pom.xml b/mixins/shared-mixins/pom.xml
deleted file mode 100644
index 34430c8..0000000
--- a/mixins/shared-mixins/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.ws.commons.axiom</groupId>
- <artifactId>mixins</artifactId>
- <version>1.3.1-SNAPSHOT</version>
- </parent>
-
- <artifactId>shared-mixins</artifactId>
-
- <name>Shared Mixins</name>
- <description>
- Contains mixins for methods that are shared between DOM and Axiom.
- </description>
- <url>http://ws.apache.org/axiom/</url>
-
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>core-mixins</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>axiom-weaver-annotations</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-</project>
diff --git a/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/DocumentTypeDeclarationMixin.java b/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/DocumentTypeDeclarationMixin.java
deleted file mode 100644
index 1724ca0..0000000
--- a/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/DocumentTypeDeclarationMixin.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.apache.axiom.shared;
-
-import org.apache.axiom.core.CoreDocumentTypeDeclaration;
-import org.apache.axiom.weaver.annotation.Mixin;
-
-@Mixin
-public abstract class DocumentTypeDeclarationMixin implements CoreDocumentTypeDeclaration {
- public final String getPublicId() {
- return coreGetPublicId();
- }
-
- public final String getSystemId() {
- return coreGetSystemId();
- }
-
- public final String getInternalSubset() {
- return coreGetInternalSubset();
- }
-}
diff --git a/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/NSAwareNamedNodeMixin.java b/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/NSAwareNamedNodeMixin.java
deleted file mode 100644
index 61af043..0000000
--- a/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/NSAwareNamedNodeMixin.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.apache.axiom.shared;
-
-import org.apache.axiom.core.CoreNSAwareNamedNode;
-import org.apache.axiom.weaver.annotation.Mixin;
-
-@Mixin
-public abstract class NSAwareNamedNodeMixin implements CoreNSAwareNamedNode {
- public final String getLocalName() {
- return coreGetLocalName();
- }
-
- public final String getNamespaceURI() {
- String namespaceURI = coreGetNamespaceURI();
- return namespaceURI.length() == 0 ? null : namespaceURI;
- }
-
- public final String getPrefix() {
- String prefix = coreGetPrefix();
- return prefix.length() == 0 ? null : prefix;
- }
-}
diff --git a/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/package-info.java b/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/package-info.java
deleted file mode 100644
index 5f92d29..0000000
--- a/mixins/shared-mixins/src/main/java/org/apache/axiom/shared/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.
- */
-@org.apache.axiom.weaver.annotation.WeavablePackage(mixins={
- DocumentTypeDeclarationMixin.class,
- NSAwareNamedNodeMixin.class,
- ProcessingInstructionMixin.class,
-})
-package org.apache.axiom.shared;