You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by mm...@apache.org on 2004/09/08 05:17:28 UTC
svn commit: rev 43491 - in incubator/beehive/trunk/wsm: drt drt/tests/org/apache/beehive/wsm/jsr181/processor/apt src/runtime/org/apache/beehive/wsm/jsr181/processor/apt
Author: mmerz
Date: Tue Sep 7 20:17:27 2004
New Revision: 43491
Added:
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java
Modified:
incubator/beehive/trunk/wsm/drt/build.xml
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java
Log:
Bug fixes and rudimentary test case for source file annotation processing into object model.
Modified: incubator/beehive/trunk/wsm/drt/build.xml
==============================================================================
--- incubator/beehive/trunk/wsm/drt/build.xml (original)
+++ incubator/beehive/trunk/wsm/drt/build.xml Tue Sep 7 20:17:27 2004
@@ -77,8 +77,9 @@
<target name="run-drt">
<echo message="** junit logfiles written to ${drt.logs} **" />
- <junit haltonerror="off" printsummary="on" tempdir="${build.dir}" >
+ <junit haltonerror="off" printsummary="on" tempdir="${build.dir}" fork="yes">
<classpath>
+ <pathelement location="${tools.jar}" />
<pathelement location="${build.tests}" />
<pathelement path="${xbean.jar}" />
<pathelement path="${jsr173.jar}" />
@@ -86,7 +87,7 @@
<pathelement path="../build/jars/wsm.jar"/>
</classpath>
<formatter type="plain" />
- <batchtest fork="off" filtertrace="off" todir="${drt.logs}" >
+ <batchtest filtertrace="off" todir="${drt.logs}" >
<fileset dir="tests">
<include name="**/*Test.java" />
<!-- exclude name="**/util/**.class" / -->
Added: incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorTest.java Tue Sep 7 20:17:27 2004
@@ -0,0 +1,78 @@
+package org.apache.beehive.wsm.jsr181.processor.apt;
+
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+
+import com.sun.tools.apt.Main;
+
+import junit.framework.TestCase;
+
+import org.apache.beehive.wsm.jsr181.model.AnnotationModel;
+
+import org.apache.beehive.wsm.jsr181.processor.apt.WsmAnnotationProcessor;
+
+
+/**
+ * Test case verifies that a source file can be read and interpreted by the
+ * annotation processor.
+ * Data validation is not implemented here, but will be part of other test
+ * cases.
+ */
+public class WsmAnnotationProcessorTest extends TestCase {
+
+ private static final String CLASSNAME = "Foo";
+ private static final String SRCFILENAME = "Foo.java";
+ private static final String BEEHIVE_HOME = System.getenv( "BEEHIVE_HOME" );
+ private static final String TESTDIR = BEEHIVE_HOME + "/wsm/drt/tests/";
+ private static final String CLASSTESTDIR = BEEHIVE_HOME + "/wsm/drt/build/classes/tests/";
+ private static final String WSMJAR = BEEHIVE_HOME + "/wsm/build/jars/wsm.jar";
+ private static final String TOOLSJAR = "D:\\tmp\\tools.jar";
+
+ private Main apt;
+
+ public void setUp()
+ {
+ apt = new Main();
+ }
+
+ public void tearDown()
+ {
+ // todo
+ }
+
+ public void testAnnotationProcessor() throws Exception
+ {
+ String[] _args = {
+ "-classpath", TOOLSJAR + ";" + WSMJAR,
+ "-factory", "org.apache.beehive.wsm.jsr181.processor.apt.WsmAnnotationProcessorFactory",
+ new java.io.File(TESTDIR, SRCFILENAME).getCanonicalPath()
+ };
+
+ // compile source file
+ int status = apt.compile(_args);
+ if (0 != status)
+ {
+ throw new Exception("** Error compiling: " + SRCFILENAME);
+ }
+
+ // get object model
+ AnnotationModel objectModel =
+ WsmAnnotationProcessor.getObjectModel(CLASSNAME);
+ assertNotNull(objectModel);
+ }
+}
Modified: incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java
==============================================================================
--- incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java (original)
+++ incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java Tue Sep 7 20:17:27 2004
@@ -18,6 +18,8 @@
* $Header:$
*/
+import java.lang.annotation.Annotation;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -27,14 +29,20 @@
import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationMirror;
import com.sun.mirror.declaration.AnnotationTypeDeclaration;
import com.sun.mirror.declaration.ClassDeclaration;
import com.sun.mirror.declaration.Declaration;
import com.sun.mirror.declaration.MethodDeclaration;
import com.sun.mirror.declaration.ParameterDeclaration;
+import com.sun.mirror.type.AnnotationType;
+
import org.apache.beehive.wsm.jsr181.model.*;
+
+import java.io.*;
+
public class WsmAnnotationProcessor extends TwoPhaseAnnotationProcessor
{
/**
@@ -63,11 +71,12 @@
return;
// todo: log warning/error "@WebService" not defined (should never happen)
}
-
+
// create & store object model
+ AnnotationModel objectModel =
+ getWebServiceTYPEMetadata((ClassDeclaration) decl);
objectModels.put(
- ((ClassDeclaration) decl).getQualifiedName(),
- getWebServiceTYPEMetadata((ClassDeclaration) decl));
+ ((ClassDeclaration) decl).getQualifiedName(), objectModel);
}
@Override
@@ -78,19 +87,17 @@
// todo: do something useful with the object model
}
- public static AnnotationModel getObjectModel(String fqClassName)
+ public static AnnotationModel getObjectModel(String name)
{
- return objectModels.get(fqClassName);
+ return objectModels.get(name);
}
-
public static Set<String> getObjectModelNames()
{
return objectModels.keySet();
}
-
- private WebServiceTYPEMetadata getWebServiceTYPEMetadata(
+ protected WebServiceTYPEMetadata getWebServiceTYPEMetadata(
ClassDeclaration decl)
{
// get webService's webMethods
@@ -105,14 +112,22 @@
}
// create & return webService
- return new WebServiceTYPEMetadata(
- java.util.Arrays.asList(decl.getClass().getAnnotations()),
- ((ClassDeclaration)decl).getClass().getName(),
- webMethods
- );
+ WebServiceTYPEMetadata wstm = null;
+ try {
+ wstm = new WebServiceTYPEMetadata(
+ getAnnotations(decl),
+ decl.getQualifiedName(),
+ webMethods
+ );
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(); // todo: proper error handling
+ }
+ return wstm;
}
- private WebServiceMETHODMetadata getWebServiceMETHODMetadata(
+ protected WebServiceMETHODMetadata getWebServiceMETHODMetadata(
MethodDeclaration decl)
{
// get webMethod's webParams
@@ -127,23 +142,102 @@
}
// create & return webMethod
- return new WebServiceMETHODMetadata(
- java.util.Arrays.asList(decl.getClass().getAnnotations()),
- decl.getSimpleName(),
- ((MethodDeclaration)decl).getReturnType().getClass(),
- webParams
- );
+ WebServiceMETHODMetadata wsmm = null;
+ try {
+ wsmm = new WebServiceMETHODMetadata(
+ getAnnotations(decl),
+ decl.getSimpleName(),
+ classForName(decl.getReturnType().toString()),
+ webParams
+ );
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(); // todo: proper error handling
+ }
+ return wsmm;
}
- private WebServicePARAMETERMetadata getWebServicePARAMETERMetadata(
+ protected WebServicePARAMETERMetadata getWebServicePARAMETERMetadata(
ParameterDeclaration decl)
{
// create & return webParam
- return new WebServicePARAMETERMetadata(
- java.util.Arrays.asList(decl.getClass().getAnnotations()),
- decl.getClass(),
- decl.getSimpleName()
- );
+ WebServicePARAMETERMetadata wspm = null;
+ try {
+ wspm = new WebServicePARAMETERMetadata(
+ getAnnotations(decl),
+ classForName(decl.getType().toString()),
+ decl.getSimpleName()
+ );
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(); // todo: proper error handling
+ }
+ return wspm;
+ }
+
+ private Collection<Annotation> getAnnotations(Declaration decl)
+ {
+ Collection<Annotation> annotations = new ArrayList<Annotation>();
+ for ( AnnotationMirror am : decl.getAnnotationMirrors() )
+ {
+ AnnotationType at = am.getAnnotationType();
+ try {
+ Class clazz = Class.forName(at.getDeclaration().getQualifiedName());
+ Annotation a = decl.getAnnotation(clazz);
+ if (null != a)
+ {
+ annotations.add(a);
+ }
+ }
+ catch (ClassNotFoundException e) { }
+ }
+ return annotations;
+ }
+
+ private Class classForName(String name) throws ClassNotFoundException
+ {
+ if ((null == name) || (0 == name.length()))
+ {
+ throw new IllegalArgumentException("class name must not be null");
+ }
+ else if (name.equals("boolean"))
+ {
+ return boolean.class;
+ }
+ else if (name.equals("byte"))
+ {
+ return byte.class;
+ }
+ else if (name.equals("char"))
+ {
+ return char.class;
+ }
+ else if (name.equals("double"))
+ {
+ return double.class;
+ }
+ else if (name.equals("float"))
+ {
+ return float.class;
+ }
+ else if (name.equals("int"))
+ {
+ return int.class;
+ }
+ else if (name.equals("long"))
+ {
+ return long.class;
+ }
+ else if (name.equals("short"))
+ {
+ return short.class;
+ }
+ else
+ {
+ return Class.forName(name);
+ }
}
private static Map<String, AnnotationModel> objectModels =
Modified: incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java
==============================================================================
--- incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java (original)
+++ incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessorFactory.java Tue Sep 7 20:17:27 2004
@@ -19,7 +19,6 @@
*/
import static java.util.Arrays.*;
-import java.util.ArrayList;
import java.util.Collection;
import static java.util.Collections.*;
import java.util.Set;
@@ -27,13 +26,14 @@
import com.sun.mirror.apt.AnnotationProcessor;
import com.sun.mirror.apt.AnnotationProcessorFactory;
import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+
import com.sun.mirror.declaration.AnnotationTypeDeclaration;
public class WsmAnnotationProcessorFactory implements AnnotationProcessorFactory
{
private static final Collection<String> supportedAnnotations =
- unmodifiableCollection(
- asList(new String[] { "javax.jws.WebService" }));
+ unmodifiableCollection(
+ asList(new String[] { "javax.jws.WebService" }));
private static final Collection<String> supportedOptions = emptySet();
@@ -47,8 +47,8 @@
return supportedOptions;
}
- public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> atds,
- AnnotationProcessorEnvironment env)
+ public AnnotationProcessor getProcessorFor(
+ Set<AnnotationTypeDeclaration> atds, AnnotationProcessorEnvironment env)
{
return new WsmAnnotationProcessor(atds, env);
}