You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ph...@apache.org on 2013/01/15 18:27:38 UTC
svn commit: r1433539 - in /qpid/proton/branches/jni-binding:
design/api-reconciliation/
design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/
design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/p...
Author: philharveyonline
Date: Tue Jan 15 17:27:37 2013
New Revision: 1433539
URL: http://svn.apache.org/viewvc?rev=1433539&view=rev
Log:
PROTON-191: modified reconciliation tool to 1) use separate packages for API interfaces and implementating classes - the latter is where the annotations now live 2) tool to accept annotation classname as parameter 3) Resolve TODO in package searcher, restructure testdata
Added:
qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/packagesearcher/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcher.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessor.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/TestAnnotation.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcherTest.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl1.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl2.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/InterfaceWithManyImpls.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/noimpl/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/noimpl/InterfaceWithoutImpl.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/InterfaceInSubPackage.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/subpackage/InterfaceInSubPackage.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/impl/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/impl/ImplOfInterfaceInSubPackage.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/ImplAtTreeTop.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceA.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/InterfaceAtTreeTop.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/ImplAtLeaf.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/InterfaceAtLeaf.java
- copied, changed from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessorTest.java
Removed:
qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/PackageSearcher.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/PackageSearcherTest.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/ReconciliationTest.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceA.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/subpackage/InterfaceInSubPackage.java
Modified:
qpid/proton/branches/jni-binding/design/api-reconciliation/pom.xml
qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Joiner.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Main.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriter.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/JoinerTest.java
qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriterTest.java
qpid/proton/branches/jni-binding/proton-c/bindings/java/CMakeLists.txt
Modified: qpid/proton/branches/jni-binding/design/api-reconciliation/pom.xml
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/pom.xml?rev=1433539&r1=1433538&r2=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/pom.xml (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/pom.xml Tue Jan 15 17:27:37 2013
@@ -24,6 +24,11 @@
<groupId>org.apache.qpid</groupId>
<artifactId>proton-api-reconciliation</artifactId>
<version>1.0-SNAPSHOT</version>
+ <properties>
+ <proton-c-build-dir>${basedir}/../../proton-c/build</proton-c-build-dir>
+ <jni-jar>${proton-c-build-dir}/bindings/java/proton-jni.jar</jni-jar>
+ </properties>
+
<build>
<plugins>
<plugin>
@@ -39,12 +44,30 @@
</executions>
<configuration>
<mainClass>org.apache.qpid.proton.apireconciliation.Main</mainClass>
+ <includePluginDependencies>true</includePluginDependencies>
<arguments>
<argument>org.apache.qpid.proton</argument>
<argument>target/cfunctions.txt</argument>
+ <argument>org.apache.qpid.proton.ProtonCEquivalent</argument>
<argument>target/apireconciliation.csv</argument>
</arguments>
</configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.qpid</groupId>
+ <artifactId>proton-jni</artifactId>
+ <version>${project.version}</version>
+ <scope>system</scope>
+ <systemPath>${jni-jar}</systemPath>
+ </dependency>
+ <!--
+ <dependency>
+ <groupId>org.apache.qpid</groupId>
+ <artifactId>proton-j-impl</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ -->
+ </dependencies>
</plugin>
</plugins>
</build>
Modified: qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Joiner.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Joiner.java?rev=1433539&r1=1433538&r2=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Joiner.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Joiner.java Tue Jan 15 17:27:37 2013
@@ -25,13 +25,20 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.apache.qpid.proton.ProtonCEquivalent;
+import org.apache.qpid.proton.apireconciliation.reportwriter.AnnotationAccessor;
public class Joiner
{
+ private final AnnotationAccessor _annotationAccessor;
+
+ public Joiner(AnnotationAccessor annotationAccessor)
+ {
+ _annotationAccessor = annotationAccessor;
+ }
+
/**
* Does an outer join of the supplied C functions with those named by the
- * {@link ProtonCEquivalent} annotations on the Java methods.
+ * annotations on the Java methods.
*/
public ReconciliationReport join(List<String> protonCFunctions, Set<Method> javaMethods)
{
@@ -69,10 +76,9 @@ public class Joiner
for (Method method : javaMethods)
{
- ProtonCEquivalent protonCEquivalent = method.getAnnotation(ProtonCEquivalent.class);
- if (protonCEquivalent != null)
+ String functionName = _annotationAccessor.getAnnotationValue(method);
+ if (functionName != null)
{
- String functionName = protonCEquivalent.functionName();
if (annotatedNameToMethod.containsKey(functionName))
{
functionsWithDuplicateJavaMappings.add(functionName);
Modified: qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Main.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Main.java?rev=1433539&r1=1433538&r2=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Main.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Main.java Tue Jan 15 17:27:37 2013
@@ -21,6 +21,7 @@ package org.apache.qpid.proton.apireconc
import java.util.List;
+import org.apache.qpid.proton.apireconciliation.reportwriter.AnnotationAccessor;
import org.apache.qpid.proton.apireconciliation.reportwriter.ReconciliationReportWriter;
public class Main
@@ -28,7 +29,7 @@ public class Main
public static void main(String[] args) throws Exception
{
- if (args.length != 3)
+ if (args.length != 4)
{
System.err.println("Unexpected number of arguments");
Runtime.getRuntime().exit(-1);
@@ -36,16 +37,18 @@ public class Main
String packageRootName = args[0];
String cFunctionFile = args[1];
- String outputFile = args[2];
+ String annotationClassName = args[2];
+ String outputFile = args[3];
CFunctionNameListReader cFunctionNameListReader = new CFunctionNameListReader();
- Reconciliation reconciliation = new Reconciliation();
+ AnnotationAccessor annotationAccessor = new AnnotationAccessor(annotationClassName);
+ Reconciliation reconciliation = new Reconciliation(annotationAccessor);
List<String> cFunctionNames = cFunctionNameListReader.readCFunctionNames(cFunctionFile);
ReconciliationReport report = reconciliation.reconcile(cFunctionNames, packageRootName);
- ReconciliationReportWriter writer = new ReconciliationReportWriter();
+ ReconciliationReportWriter writer = new ReconciliationReportWriter(annotationAccessor);
writer.write(outputFile, report);
System.err.println("Written : " + outputFile);
}
Modified: qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java?rev=1433539&r1=1433538&r2=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java Tue Jan 15 17:27:37 2013
@@ -22,10 +22,18 @@ import java.lang.reflect.Method;
import java.util.List;
import java.util.Set;
+import org.apache.qpid.proton.apireconciliation.packagesearcher.PackageSearcher;
+import org.apache.qpid.proton.apireconciliation.reportwriter.AnnotationAccessor;
+
public class Reconciliation
{
- private PackageSearcher _packageSearcher = new PackageSearcher();
- private Joiner _joiner = new Joiner();
+ private final PackageSearcher _packageSearcher = new PackageSearcher();
+ private final Joiner _joiner;
+
+ public Reconciliation(AnnotationAccessor annotationAccessor)
+ {
+ _joiner = new Joiner(annotationAccessor);
+ }
public ReconciliationReport reconcile(List<String> protonCFunctions, String packageRootName)
{
Added: qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcher.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcher.java?rev=1433539&view=auto
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcher.java (added)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcher.java Tue Jan 15 17:27:37 2013
@@ -0,0 +1,105 @@
+/*
+ * 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.qpid.proton.apireconciliation.packagesearcher;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Logger;
+
+import org.reflections.Reflections;
+import org.reflections.scanners.SubTypesScanner;
+
+public class PackageSearcher
+{
+ private final static Logger LOGGER = Logger.getLogger(PackageSearcher.class.getName());
+
+ public Set<Method> findMethods(String packageName)
+ {
+ Reflections reflections = new Reflections(packageName, new SubTypesScanner(false));
+
+ Set<Class<?>> allInterfaces = getAllApiInterfaces(reflections);
+
+ Set<Method> allImplMethods = new HashSet<Method>();
+ for (Class<?> apiInterface : allInterfaces)
+ {
+ List<Method> apiMethodList = Arrays.asList(apiInterface.getMethods());
+ Set<?> impls = reflections.getSubTypesOf(apiInterface);
+ if (impls.size() == 0)
+ {
+ // In the case where there are no implementations of apiInterface, we add the methods of
+ // apiInterface so they appear on the final report.
+ for (Method apiMethod : apiMethodList)
+ {
+ allImplMethods.add(apiMethod);
+ }
+ }
+ else
+ {
+ for (Object implementingClassObj : impls)
+ {
+ Class implementingClass = (Class) implementingClassObj;
+ LOGGER.fine("Found implementation " + implementingClass.getName() + " for " + apiInterface.getName());
+
+ for (Method apiMethod : apiMethodList)
+ {
+ Method implMethod = findImplMethodOfApiMethod(apiMethod, implementingClass);
+ allImplMethods.add(implMethod);
+ }
+ }
+ }
+ }
+ return allImplMethods;
+ }
+
+ private Method findImplMethodOfApiMethod(Method apiMethod, Class<?> impl)
+ {
+ try
+ {
+ Method implMethod = impl.getMethod(apiMethod.getName(), apiMethod.getParameterTypes());
+ return implMethod;
+ }
+ catch (Exception e)
+ {
+ // Should not happen
+ throw new IllegalStateException("Could not find implementation of method " + apiMethod
+ + " on the impl. " + impl, e);
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ private Set<Class<?>> getAllApiInterfaces(Reflections reflections)
+ {
+ Set<Class<?>> classes = reflections.getSubTypesOf(Object.class);
+ Set<Class<?>> interfaces = new HashSet<Class<?>>();
+
+ for (Class clazz : classes)
+ {
+ if(clazz.isInterface())
+ {
+ interfaces.add(clazz);
+ }
+ }
+
+ return interfaces;
+ }
+
+}
Added: qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessor.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessor.java?rev=1433539&view=auto
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessor.java (added)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessor.java Tue Jan 15 17:27:37 2013
@@ -0,0 +1,90 @@
+/*
+ * 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.qpid.proton.apireconciliation.reportwriter;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class AnnotationAccessor
+{
+ private static final String VALUE_METHOD = "value";
+ private final Class<Annotation> _annotationClass;
+ private final Method _functionNameMethod;
+
+ @SuppressWarnings("unchecked")
+ public AnnotationAccessor(String annotationClassName)
+ {
+ try
+ {
+ _annotationClass = (Class<Annotation>) Class.forName(annotationClassName);
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new IllegalArgumentException("Couldn't find annotation class " + annotationClassName, e);
+ }
+
+ try
+ {
+ _functionNameMethod = _annotationClass.getMethod(VALUE_METHOD);
+ }
+ catch (SecurityException e)
+ {
+ throw new IllegalArgumentException("Couldn't find method " + VALUE_METHOD + " on annotation " + _annotationClass, e);
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new IllegalArgumentException("Couldn't find method " + VALUE_METHOD + " on annotation " + _annotationClass, e);
+ }
+ }
+
+ public String getAnnotationValue(Method javaMethod)
+ {
+ Annotation annotation = javaMethod.getAnnotation(_annotationClass);
+ if (javaMethod != null && annotation != null)
+ {
+ return getProtonCFunctionName(annotation);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ private String getProtonCFunctionName(Annotation annotation)
+ {
+ try
+ {
+ return String.valueOf(_functionNameMethod.invoke(annotation));
+ }
+ catch (IllegalArgumentException e)
+ {
+ throw new RuntimeException("Couldn't invoke method " + _functionNameMethod + " on annotation " + annotation, e);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new RuntimeException("Couldn't invoke method " + _functionNameMethod + " on annotation " + annotation, e);
+ }
+ catch (InvocationTargetException e)
+ {
+ throw new RuntimeException("Couldn't invoke method " + _functionNameMethod + " on annotation " + annotation, e);
+ }
+ }
+}
Modified: qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriter.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriter.java?rev=1433539&r1=1433538&r2=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriter.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriter.java Tue Jan 15 17:27:37 2013
@@ -20,6 +20,7 @@
package org.apache.qpid.proton.apireconciliation.reportwriter;
import static java.lang.String.format;
+import static org.apache.commons.lang.StringUtils.defaultString;
import java.io.File;
import java.io.IOException;
@@ -29,7 +30,6 @@ import java.util.Iterator;
import java.util.List;
import org.apache.commons.io.FileUtils;
-import org.apache.qpid.proton.ProtonCEquivalent;
import org.apache.qpid.proton.apireconciliation.ReconciliationReport;
import org.apache.qpid.proton.apireconciliation.ReportRow;
@@ -37,6 +37,12 @@ public class ReconciliationReportWriter
{
private static final String ROW_FORMAT="%s,%s,%s";
private static final String REPORT_TITLE = format(ROW_FORMAT, "C function","Java Method","Java Annotation");
+ private final AnnotationAccessor _annotationAccessor;
+
+ public ReconciliationReportWriter(AnnotationAccessor annotationAccessor)
+ {
+ _annotationAccessor = annotationAccessor;
+ }
public void write(String outputFile, ReconciliationReport report) throws IOException
{
@@ -50,38 +56,24 @@ public class ReconciliationReportWriter
{
ReportRow row = itr.next();
Method javaMethod = row.getJavaMethod();
- String cFunction = row.getCFunction() == null ? "" : row.getCFunction();
- String fullyQualifiedMethodName = createFullyQualifiedJavaMethodName(javaMethod);
- String annotationCFunction = extractCFunctionNameFromAnnotation(javaMethod);
+ String cFunction = defaultString(row.getCFunction());
+ String fullyQualifiedMethodName = "";
+ String annotationCFunction = "";
+ if (javaMethod != null)
+ {
+ fullyQualifiedMethodName = createFullyQualifiedJavaMethodName(javaMethod);
+ annotationCFunction = defaultString(_annotationAccessor.getAnnotationValue(javaMethod));
+ }
reportLines.add(format(ROW_FORMAT, cFunction, fullyQualifiedMethodName, annotationCFunction));
}
FileUtils.writeLines(output, reportLines);
}
- private String extractCFunctionNameFromAnnotation(Method javaMethod)
- {
- if (javaMethod != null && javaMethod.getAnnotation(ProtonCEquivalent.class) != null)
- {
- return javaMethod.getAnnotation(ProtonCEquivalent.class).functionName();
- }
- else
- {
- return "";
- }
- }
-
private String createFullyQualifiedJavaMethodName(Method javaMethod)
{
- if (javaMethod != null)
- {
- return javaMethod.getDeclaringClass().getName() + "#" + javaMethod.getName();
- }
- else
- {
- return "";
- }
+ return javaMethod.getDeclaringClass().getName() + "#" + javaMethod.getName();
}
}
Modified: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/JoinerTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/JoinerTest.java?rev=1433539&r1=1433538&r2=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/JoinerTest.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/JoinerTest.java Tue Jan 15 17:27:37 2013
@@ -18,19 +18,18 @@
*/
package org.apache.qpid.proton.apireconciliation;
-import static org.junit.Assert.*;
-
-import java.lang.reflect.Method;
import static java.util.Arrays.asList;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
-import java.util.Arrays;
+import java.lang.reflect.Method;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
-import org.apache.qpid.proton.ProtonCEquivalent;
+import org.apache.qpid.proton.apireconciliation.reportwriter.AnnotationAccessor;
import org.junit.Before;
import org.junit.Test;
@@ -38,7 +37,7 @@ public class JoinerTest
{
private static final String C_FUNCTION1 = "cFunction1";
private static final String C_FUNCTION2 = "cFunction2";
- private Joiner _joiner = new Joiner();
+ private Joiner _joiner;
private Method _method1 = null;
private Method _method2 = null;
private Method _methodSharingFunctionNameAnnotationWithMethod2 = null;
@@ -51,6 +50,10 @@ public class JoinerTest
_method2 = getClass().getMethod("javaMethodWithMapping2");
_methodSharingFunctionNameAnnotationWithMethod2 = getClass().getMethod("javaMethodSharingFunctionNameAnnotationWithMethod2");
_methodWithoutAnnotation = getClass().getMethod("javaMethodWithoutAnnotation");
+
+ AnnotationAccessor annotationAccessor = new AnnotationAccessor(TestAnnotation.class.getName());
+
+ _joiner = new Joiner(annotationAccessor);
}
@Test
@@ -142,17 +145,17 @@ public class JoinerTest
assertEquals(expectedMethod, row.getJavaMethod());
}
- @ProtonCEquivalent(functionName=C_FUNCTION1)
+ @TestAnnotation(C_FUNCTION1)
public void javaMethodWithMapping1()
{
}
- @ProtonCEquivalent(functionName=C_FUNCTION2)
+ @TestAnnotation(C_FUNCTION2)
public void javaMethodWithMapping2()
{
}
- @ProtonCEquivalent(functionName=C_FUNCTION2)
+ @TestAnnotation(C_FUNCTION2)
public void javaMethodSharingFunctionNameAnnotationWithMethod2()
{
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/TestAnnotation.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/TestAnnotation.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/TestAnnotation.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/TestAnnotation.java Tue Jan 15 17:27:37 2013
@@ -15,17 +15,18 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation;
-import org.apache.qpid.proton.apireconciliation.PackageSearcher;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
-/**
- * Methods on classes should be ignored by {@link PackageSearcher}
- */
-public class DummyClass
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface TestAnnotation
{
- public void dummyClassMethod()
- {
- };
-}
+ String value();
+}
\ No newline at end of file
Added: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcherTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcherTest.java?rev=1433539&view=auto
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcherTest.java (added)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/PackageSearcherTest.java Tue Jan 15 17:27:37 2013
@@ -0,0 +1,84 @@
+/*
+ * 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.qpid.proton.apireconciliation.packagesearcher;
+
+import static org.junit.Assert.assertEquals;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.manyimpls.Impl1;
+import org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.manyimpls.Impl2;
+import org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.manyimpls.InterfaceWithManyImpls;
+import org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.noimpl.InterfaceWithoutImpl;
+import org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.tree.ImplAtTreeTop;
+import org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.tree.InterfaceAtTreeTop;
+import org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.tree.leaf.ImplAtLeaf;
+import org.junit.Test;
+
+public class PackageSearcherTest
+{
+ private PackageSearcher _packageSearcher = new PackageSearcher();
+
+ @Test
+ public void testFindDescendsPackageTree() throws Exception
+ {
+ String testDataPackage = InterfaceAtTreeTop.class.getPackage().getName();
+ Set<Method> actualMethods = _packageSearcher.findMethods(testDataPackage);
+ assertEquals(2, actualMethods.size());
+
+ Set<Method> expectedMethods = new HashSet<Method>(Arrays.asList(
+ ImplAtTreeTop.class.getMethod("method"),
+ ImplAtLeaf.class.getMethod("method")));
+
+ assertEquals(expectedMethods, actualMethods);
+ }
+
+ @Test
+ public void testZeroImplenentationsOfInterface() throws Exception
+ {
+ String testDataPackage = InterfaceWithoutImpl.class.getPackage().getName();
+
+ Method expectedMethod = InterfaceWithoutImpl.class.getMethod("method");
+
+ Set<Method> actualMethods = _packageSearcher.findMethods(testDataPackage);
+ assertEquals(1, actualMethods.size());
+
+ Method actualMethod = actualMethods.iterator().next();
+ assertEquals(expectedMethod, actualMethod);
+ }
+
+ @Test
+ public void testManyImplenentationsOfInterface() throws Exception
+ {
+ String testDataPackage = InterfaceWithManyImpls.class.getPackage().getName();
+
+ Set<Method> actualMethods = _packageSearcher.findMethods(testDataPackage);
+ assertEquals(2, actualMethods.size());
+
+ String methodName = "method";
+ Set<Method> expectedMethods = new HashSet<Method>(Arrays.asList(
+ Impl1.class.getMethod(methodName),
+ Impl2.class.getMethod(methodName)));
+
+ assertEquals(expectedMethods, actualMethods);
+ }
+}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl1.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl1.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl1.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl1.java Tue Jan 15 17:27:37 2013
@@ -15,13 +15,15 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.manyimpls;
-
-public interface InterfaceB
+public class Impl1 implements InterfaceWithManyImpls
{
- String methodWithoutAnnotation = "methodWithoutAnnotation";
- void methodWithoutAnnotation();
+ public void method()
+ {
+ }
+
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl2.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl2.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl2.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/DummyClass.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/Impl2.java Tue Jan 15 17:27:37 2013
@@ -15,17 +15,15 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.manyimpls;
-import org.apache.qpid.proton.apireconciliation.PackageSearcher;
-
-/**
- * Methods on classes should be ignored by {@link PackageSearcher}
- */
-public class DummyClass
+public class Impl2 implements InterfaceWithManyImpls
{
- public void dummyClassMethod()
+
+ public void method()
{
- };
+ }
+
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/InterfaceWithManyImpls.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/InterfaceWithManyImpls.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/InterfaceWithManyImpls.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/manyimpls/InterfaceWithManyImpls.java Tue Jan 15 17:27:37 2013
@@ -15,13 +15,12 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.manyimpls;
-
-public interface InterfaceB
+public interface InterfaceWithManyImpls
{
- String methodWithoutAnnotation = "methodWithoutAnnotation";
+ void method();
- void methodWithoutAnnotation();
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/noimpl/InterfaceWithoutImpl.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/noimpl/InterfaceWithoutImpl.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/noimpl/InterfaceWithoutImpl.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/noimpl/InterfaceWithoutImpl.java Tue Jan 15 17:27:37 2013
@@ -15,13 +15,11 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.noimpl;
-
-public interface InterfaceB
+public interface InterfaceWithoutImpl
{
- String methodWithoutAnnotation = "methodWithoutAnnotation";
-
- void methodWithoutAnnotation();
+ void method();
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/InterfaceInSubPackage.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/subpackage/InterfaceInSubPackage.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/InterfaceInSubPackage.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/InterfaceInSubPackage.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/subpackage/InterfaceInSubPackage.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/subpackage/InterfaceInSubPackage.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/InterfaceInSubPackage.java Tue Jan 15 17:27:37 2013
@@ -16,15 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.qpid.proton.apireconciliation.testdata.subpackage;
-
-import org.apache.qpid.proton.ProtonCEquivalent;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.subpackage;
public interface InterfaceInSubPackage
{
- String cFunction = "subpackageFunction";
- String methodWithinSubpackage = "methodWithinSubpackage";
-
- @ProtonCEquivalent(functionName = cFunction)
void methodWithinSubpackage();
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/impl/ImplOfInterfaceInSubPackage.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/impl/ImplOfInterfaceInSubPackage.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/impl/ImplOfInterfaceInSubPackage.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/main/java/org/apache/qpid/proton/apireconciliation/Reconciliation.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/subpackage/impl/ImplOfInterfaceInSubPackage.java Tue Jan 15 17:27:37 2013
@@ -15,23 +15,22 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.subpackage.impl;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Set;
+import org.apache.qpid.proton.apireconciliation.TestAnnotation;
+import org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.subpackage.InterfaceInSubPackage;
-public class Reconciliation
+public class ImplOfInterfaceInSubPackage implements InterfaceInSubPackage
{
- private PackageSearcher _packageSearcher = new PackageSearcher();
- private Joiner _joiner = new Joiner();
- public ReconciliationReport reconcile(List<String> protonCFunctions, String packageRootName)
+ public static final String VALUE_WITHIN_SUBPACKAGE = "subpackageFunction";
+ public static final String METHOD_WITHIN_SUBPACKAGE = "methodWithinSubpackage";
+
+ @TestAnnotation(VALUE_WITHIN_SUBPACKAGE)
+ public void methodWithinSubpackage()
{
- Set<Method> javaMethods = _packageSearcher.findMethods(packageRootName);
- ReconciliationReport report = _joiner.join(protonCFunctions, javaMethods);
- return report;
}
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/ImplAtTreeTop.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceA.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/ImplAtTreeTop.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/ImplAtTreeTop.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceA.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceA.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/ImplAtTreeTop.java Tue Jan 15 17:27:37 2013
@@ -15,16 +15,15 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.tree;
-import org.apache.qpid.proton.ProtonCEquivalent;
-
-public interface InterfaceA
+public class ImplAtTreeTop implements InterfaceAtTreeTop
{
- String cFunction1 = "function1";
- String methodA1 = "methodA1";
- @ProtonCEquivalent(functionName=cFunction1)
- void methodA1();
+ public void method()
+ {
+ }
+
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/InterfaceAtTreeTop.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/InterfaceAtTreeTop.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/InterfaceAtTreeTop.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/InterfaceAtTreeTop.java Tue Jan 15 17:27:37 2013
@@ -15,13 +15,12 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.tree;
-
-public interface InterfaceB
+public interface InterfaceAtTreeTop
{
- String methodWithoutAnnotation = "methodWithoutAnnotation";
+ void method();
- void methodWithoutAnnotation();
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/ImplAtLeaf.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/ImplAtLeaf.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/ImplAtLeaf.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/ImplAtLeaf.java Tue Jan 15 17:27:37 2013
@@ -15,13 +15,15 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.tree.leaf;
-
-public interface InterfaceB
+public class ImplAtLeaf implements InterfaceAtLeaf
{
- String methodWithoutAnnotation = "methodWithoutAnnotation";
- void methodWithoutAnnotation();
+ public void method()
+ {
+ }
+
}
Copied: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/InterfaceAtLeaf.java (from r1431947, qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java)
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/InterfaceAtLeaf.java?p2=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/InterfaceAtLeaf.java&p1=qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java&r1=1431947&r2=1433539&rev=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/testdata/InterfaceB.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/packagesearcher/testdata/tree/leaf/InterfaceAtLeaf.java Tue Jan 15 17:27:37 2013
@@ -15,13 +15,11 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
+ *
*/
-package org.apache.qpid.proton.apireconciliation.testdata;
+package org.apache.qpid.proton.apireconciliation.packagesearcher.testdata.tree.leaf;
-
-public interface InterfaceB
+public interface InterfaceAtLeaf
{
- String methodWithoutAnnotation = "methodWithoutAnnotation";
-
- void methodWithoutAnnotation();
+ void method();
}
Added: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessorTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessorTest.java?rev=1433539&view=auto
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessorTest.java (added)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/AnnotationAccessorTest.java Tue Jan 15 17:27:37 2013
@@ -0,0 +1,72 @@
+/*
+ * 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.qpid.proton.apireconciliation.reportwriter;
+
+import static org.junit.Assert.*;
+
+import java.lang.reflect.Method;
+
+import org.apache.qpid.proton.apireconciliation.TestAnnotation;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AnnotationAccessorTest
+{
+ private static final String ANNOTATION_VALUE_1 = "value1";
+ private static final String ANNOTATED_METHOD_NAME = "annotatedMethod";
+ private static final String UNANNOTATED_METHOD_NAME = "unannotatedMethod";
+
+ private Method _annotatedMethod;
+ private Method _unannotatedMethod;
+
+ private String _annotationClassName;
+
+ private AnnotationAccessor _annotationAccessor;
+
+ @Before
+ public void setUp() throws Exception
+ {
+ _annotatedMethod = getClass().getMethod(ANNOTATED_METHOD_NAME);
+ _unannotatedMethod = getClass().getMethod(UNANNOTATED_METHOD_NAME);
+ _annotationClassName = TestAnnotation.class.getName();
+ _annotationAccessor = new AnnotationAccessor(_annotationClassName);
+ }
+
+ @Test
+ public void testGetAnnotationValue()
+ {
+ assertEquals(ANNOTATION_VALUE_1, _annotationAccessor.getAnnotationValue(_annotatedMethod));
+ }
+
+ @Test
+ public void testGetAnnotationValueWithoutAnnotationReturnsNull()
+ {
+ assertNull(_annotationAccessor.getAnnotationValue(_unannotatedMethod));
+ }
+
+ @TestAnnotation(ANNOTATION_VALUE_1)
+ public void annotatedMethod()
+ {
+ }
+
+ public void unannotatedMethod()
+ {
+ }
+}
Modified: qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriterTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriterTest.java?rev=1433539&r1=1433538&r2=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriterTest.java (original)
+++ qpid/proton/branches/jni-binding/design/api-reconciliation/src/test/java/org/apache/qpid/proton/apireconciliation/reportwriter/ReconciliationReportWriterTest.java Tue Jan 15 17:27:37 2013
@@ -27,16 +27,23 @@ import java.net.URISyntaxException;
import java.net.URL;
import org.apache.commons.io.FileUtils;
-import org.apache.qpid.proton.ProtonCEquivalent;
import org.apache.qpid.proton.apireconciliation.ReconciliationReport;
+import org.apache.qpid.proton.apireconciliation.TestAnnotation;
+import org.junit.Before;
import org.junit.Test;
public class ReconciliationReportWriterTest
{
- private ReconciliationReportWriter _writer = new ReconciliationReportWriter();
+ private ReconciliationReportWriter _writer;
private ReconciliationReport _report = new ReconciliationReport();
+ @Before
+ public void setUp()
+ {
+ _writer = new ReconciliationReportWriter(new AnnotationAccessor(TestAnnotation.class.getName()));
+ }
+
@Test
public void testReportWithSingleFullyMappedRow() throws Exception
{
@@ -87,12 +94,12 @@ public class ReconciliationReportWriterT
FileUtils.readFileToString(actualReport));
}
- @ProtonCEquivalent(functionName="function1")
+ @TestAnnotation("function1")
public void methodWithMapping()
{
}
- @ProtonCEquivalent(functionName="function2")
+ @TestAnnotation("function2")
public void anotherMethodWithMapping()
{
}
Modified: qpid/proton/branches/jni-binding/proton-c/bindings/java/CMakeLists.txt
URL: http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-c/bindings/java/CMakeLists.txt?rev=1433539&r1=1433538&r2=1433539&view=diff
==============================================================================
--- qpid/proton/branches/jni-binding/proton-c/bindings/java/CMakeLists.txt (original)
+++ qpid/proton/branches/jni-binding/proton-c/bindings/java/CMakeLists.txt Tue Jan 15 17:27:37 2013
@@ -54,6 +54,15 @@ set(CMAKE_JAVA_INCLUDE_PATH ${CMAKE_CURR
# TODO: We are relying on shell expansion to find the swig generated sources. Surely there is a better way?
add_jar(proton-jni ${CMAKE_SWIG_OUTDIR}/*.java ${THUNKING_SOURCES_ABS})
-add_custom_command(TARGET proton-jni POST_BUILD COMMAND ${Java_JAR_EXECUTABLE} uvf proton-jni-${PN_VERSION}.jar -C ${PROJECT_SOURCE_DIR}/jni/src/main/resources META-INF)
+message("CMAKE_CURRENT_BINARY_DIR " ${CMAKE_CURRENT_BINARY_DIR})
+message("CMAKE_JAVA_CLASS_OUTPUT_PATH" ${CMAKE_JAVA_CLASS_OUTPUT_PATH})
+
+# We need to rebuild the JAR to a) include the resources b) include the 'structural' directory entries that are
+# excluded by Cmake's add_jar command. The latter is required by Google Reflections.
+add_custom_command(TARGET proton-jni POST_BUILD
+ COMMAND ${Java_JAR_EXECUTABLE} cf proton-jni-${PN_VERSION}.jar
+ -C ${PROJECT_SOURCE_DIR}/jni/src/main/resources META-INF
+ -C ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/proton-jni.dir/ org
+ COMMENT "Rebuilding JAR to include missing resources")
add_dependencies(proton-jni proton-api proton-swig)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org