[325364] Annotation Properties view should resolve annotation classes from project classpath
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.annotations.core/META-INF/MANIFEST.MF
index 1ed17f9..4cba698 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.annotations.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jst.ws.annotations.core;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.1.0.qualifier
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-Vendor: %pluginProvider
@@ -18,6 +18,7 @@
Export-Package: org.eclipse.jst.ws.annotations.core,
org.eclipse.jst.ws.annotations.core.initialization,
org.eclipse.jst.ws.annotations.core.processor,
- org.eclipse.jst.ws.annotations.core.utils
+ org.eclipse.jst.ws.annotations.core.utils,
+ org.eclipse.jst.ws.internal.annotations.core.utils;x-friends:="org.eclipse.jst.ws.jaxws.ui"
Bundle-Activator: org.eclipse.jst.ws.annotations.core.AnnotationsCorePlugin
Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationDefinition.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationDefinition.java
index 9b2818f..6f714ba 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationDefinition.java
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationDefinition.java
@@ -19,6 +19,11 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.jdt.core.IAnnotation;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMemberValuePair;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer;
/**
@@ -46,8 +51,8 @@
private static final String RESTRICTED_TO_INTERFACE_ONLY = "INTERFACE_ONLY";
private static final String RESTRICTED_TO_ENUM_ONLY = "ENUM_ONLY";
- private static final String ELEM_TARGET_FILTER = "targetFilter"; //$NON-NLS-1$
- private static final String ATT_TARGET = "target"; //$NON-NLS-1$
+ private static final String ELEM_TARGET_FILTER = "targetFilter"; //$NON-NLS-1$
+ private static final String ATT_TARGET = "target"; //$NON-NLS-1$
private IConfigurationElement configurationElement;
private String category;
@@ -61,6 +66,11 @@
private boolean classOnly;
private boolean enumOnly;
+ private IType annotationType;
+ private List<ElementType> annotationTypeTargets;
+ private IJavaProject javaProject;
+ private Boolean deprecated;
+
/**
* Constructs an <code>AnnotationDefinition</code> using information from the
* <code>org.eclipse.jst.ws.annotations.core.annotationDefinition</code> extension point and category name.
@@ -133,16 +143,17 @@
* <code>annotation<annotation> element in the <code>org.eclipse.jst.ws.annotations.core.annotationDefinition</code>
* extension point.
*
- * @return the annotation class
+ * @return the annotation class or null if not found.
+ * @deprecated As of 1.1 replaced by {@link #getAnnotationType()}
*/
@SuppressWarnings("unchecked")
+ @Deprecated
public Class<? extends java.lang.annotation.Annotation> getAnnotationClass() {
if (annotationClass == null) {
try {
Class<?> aClass = Class.forName(annotationClassName);
if (aClass.isAnnotation()) {
- annotationClass = (Class<java.lang.annotation.Annotation>)Class.forName(
- annotationClassName);
+ annotationClass = (Class<java.lang.annotation.Annotation>) Class.forName(annotationClassName);
}
} catch(ClassNotFoundException cnfe) {
AnnotationsCorePlugin.log(cnfe);
@@ -152,6 +163,33 @@
}
/**
+ * Returns the annotation type as specified by the <code>class</code> attribute of the
+ * <code>annotation<annotation> element in the <code>org.eclipse.jst.ws.annotations.core.annotationDefinition</code>
+ * extension point.
+ *
+ * @return the <code>org.eclipse.jdt.core.IType</code> which represents an annotation type or null if the java project
+ * has not been set, if the type cannot be found or if the type does not represent an annotation type.
+ *
+ * @see #setJavaProject(IJavaProject)
+ * @since 1.1
+ */
+ public IType getAnnotationType() {
+ if (annotationType == null) {
+ try {
+ if (javaProject != null) {
+ IType type = javaProject.findType(annotationClassName);
+ if (type != null && type.isAnnotation()) {
+ annotationType = type;
+ }
+ }
+ } catch (JavaModelException jme) {
+ AnnotationsCorePlugin.log(jme.getStatus());
+ }
+ }
+ return annotationType;
+ }
+
+ /**
* Returns a list of {@link ElementType} that specify the Java elements to which the annotation
* can be applied.
* <p>
@@ -162,28 +200,80 @@
* the annotation.
* </p>
* @return a list of element types.
+ * @deprecated as of 1.1 replaced by {@link #getAnnotationTypeTargets()}
*/
+ @Deprecated
public List<ElementType> getTargets() {
if (targets == null) {
- targets = new LinkedList<ElementType>();
+ targets = new LinkedList<ElementType>();
Class<? extends java.lang.annotation.Annotation> annotation = getAnnotationClass();
if (annotation != null) {
- Target target = annotation.getAnnotation(Target.class);
- if (target != null) {
- targets.addAll(Arrays.asList(target.value()));
+ Target target = annotation.getAnnotation(Target.class);
+ if (target != null) {
+ targets.addAll(Arrays.asList(target.value()));
List<ElementType> filteredTargets = getFilteredTargets(configurationElement);
if (targets.containsAll(filteredTargets) && filteredTargets.size() < targets.size()) {
targets.removeAll(filteredTargets);
}
- }
+ }
}
}
return targets;
}
/**
+ * Returns a list of {@link ElementType} that specify the Java elements to which the annotation can be applied.
+ * <p>
+ * The element types are retrieved from the annotations
+ * {@link java.lang.annotation.Target} meta-annotation type. This list can
+ * be filtered using the <code>targetFilter</code> element on the
+ * <code>org.eclipse.jst.ws.annotations.core.annotationDefinition</code>
+ * extension point when defining the annotation.
+ * </p>
+ * @return a list of element types or null if the java project has not been set or if the annotation type cannot be
+ * found.
+ * @see #setJavaProject(IJavaProject)
+ * @since 1.1
+ */
+ public List<ElementType> getAnnotationTypeTargets() {
+ if (annotationTypeTargets == null) {
+ annotationTypeTargets = new LinkedList<ElementType>();
+ try {
+ IType type = getAnnotationType();
+ if (type != null) {
+ IAnnotation target = type.getAnnotation(Target.class.getCanonicalName());
+ if (!target.exists()) {
+ target = type.getAnnotation(Target.class.getSimpleName());
+ }
+ if (target.exists()) {
+ IMemberValuePair[] memberValuePairs = target.getMemberValuePairs();
+ for (IMemberValuePair memberValuePair : memberValuePairs) {
+ Object value = memberValuePair.getValue();
+ if (value.getClass().isArray() && value.getClass().getComponentType().equals(String.class)) {
+ String[] objs = (String[]) value;
+ for (String obj : objs) {
+ annotationTypeTargets.add(ElementType.valueOf(obj.substring(obj.lastIndexOf('.') + 1)));
+ }
+ } else {
+ annotationTypeTargets.add(ElementType.valueOf(value.toString().substring(value.toString().lastIndexOf('.') + 1)));
+ }
+ }
+ }
+ List<ElementType> filteredTargets = getFilteredTargets(configurationElement);
+ if (annotationTypeTargets.containsAll(filteredTargets) && filteredTargets.size() < annotationTypeTargets.size()) {
+ annotationTypeTargets.removeAll(filteredTargets);
+ }
+ }
+ } catch (JavaModelException jme) {
+ AnnotationsCorePlugin.log(jme.getStatus());
+ }
+ }
+ return annotationTypeTargets;
+ }
+
+ /**
* Returns the annotations attribute initializer as specified in the
* <code>org.eclipse.jst.ws.annotations.core.annotationInitializer</code> extension point or null if no
* initializer can be found.
@@ -196,8 +286,7 @@
IConfigurationElement configurationElement =
AnnotationsManager.getAnnotationInitializerCache().get(getAnnotationClassName());
if (configurationElement != null) {
- annotationInitializer = (IAnnotationAttributeInitializer)configurationElement
- .createExecutableExtension(ATT_CLASS);
+ annotationInitializer = (IAnnotationAttributeInitializer) configurationElement.createExecutableExtension(ATT_CLASS);
}
} catch (CoreException ce) {
AnnotationsCorePlugin.log(ce.getStatus());
@@ -206,17 +295,50 @@
return annotationInitializer;
}
- private List<ElementType> getFilteredTargets(IConfigurationElement configurationElement) {
- List<ElementType> targets = new ArrayList<ElementType>(7);
- try {
- IConfigurationElement[] deprecatedTargets = configurationElement.getChildren(ELEM_TARGET_FILTER);
- for (IConfigurationElement deprecatedTargetElement : deprecatedTargets) {
- String target = AnnotationsManager.getAttributeValue(deprecatedTargetElement, ATT_TARGET);
- targets.add(ElementType.valueOf(target));
- }
- } catch (IllegalArgumentException iae) {
- AnnotationsCorePlugin.log(iae);
- }
- return targets;
- }
+ private List<ElementType> getFilteredTargets(IConfigurationElement configurationElement) {
+ List<ElementType> targets = new ArrayList<ElementType>(7);
+ try {
+ IConfigurationElement[] deprecatedTargets = configurationElement.getChildren(ELEM_TARGET_FILTER);
+ for (IConfigurationElement deprecatedTargetElement : deprecatedTargets) {
+ String target = AnnotationsManager.getAttributeValue(deprecatedTargetElement, ATT_TARGET);
+ targets.add(ElementType.valueOf(target));
+ }
+ } catch (IllegalArgumentException iae) {
+ AnnotationsCorePlugin.log(iae);
+ }
+ return targets;
+ }
+
+ boolean isDeprecated() {
+ if (deprecated == null) {
+ IType type = getAnnotationType();
+ if (type != null) {
+ IAnnotation annotation = type.getAnnotation(Deprecated.class.getCanonicalName());
+ if (!annotation.exists()) {
+ annotation = type.getAnnotation(Deprecated.class.getSimpleName());
+ }
+ deprecated = annotation.exists();
+ } else {
+ deprecated = false;
+ }
+ }
+ return deprecated;
+ }
+
+ /**
+ * Sets the <code>org.eclipse.jdt.core.IJavaProject</code> which is used to find the
+ * annotation type.
+ *
+ * @see {@link #getAnnotationType()}
+ * @see {@link #getAnnotationTypeTargets()}
+ * @since 1.1
+ */
+ public void setJavaProject(IJavaProject javaProject) {
+ if (this.javaProject == null || !this.javaProject.equals(javaProject)) {
+ this.javaProject = javaProject;
+ this.annotationType = null;
+ this.annotationTypeTargets = null;
+ this.deprecated = null;
+ }
+ }
}
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsCore.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsCore.java
index ec82089..26fcaad 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsCore.java
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsCore.java
@@ -12,6 +12,8 @@
import java.util.List;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ArrayInitializer;
import org.eclipse.jdt.core.dom.BooleanLiteral;
@@ -174,8 +176,10 @@
* @param value an object representing the <code>enum</code> value.
* @return a new member value pair with the given name and value.
*/
- public static MemberValuePair createEnumMemberValuePair(AST ast, String className, String name,
- Object value) {
+ public static MemberValuePair createEnumMemberValuePair(AST ast, String className, String name, Object value) {
+ if (value instanceof IField) {
+ return AnnotationsCore.createMemberValuePair(ast, name, createEnumLiteral(ast, className, (IField) value));
+ }
return AnnotationsCore.createMemberValuePair(ast, name, createEnumLiteral(ast, className, value));
}
@@ -241,7 +245,7 @@
*
* @param ast the {@link AST} that will be used to create the qualified name.
* @param className the fully qualified name of the enclosing class.
- * @param value sn object representing the <code>enum</code> value.
+ * @param value an object representing the <code>enum</code> value.
* @return a new qualified name.
*/
public static QualifiedName createEnumLiteral(AST ast, String className, Object value) {
@@ -267,6 +271,41 @@
}
/**
+ * Creates a new {@link QualifiedName} to represent an <code>enum</code> literal value.
+ *
+ * @param ast the {@link AST} that will be used to create the qualified name.
+ * @param className the fully qualified name of the enclosing class.
+ * @param value a {@link org.eclipse.jdt.core.IField} where <code>isEnumConstant()</code> is <code>true</code>.
+ * @return a new qualified name.
+ * @throws JavaModelException
+ * @since 1.1
+ */
+ public static QualifiedName createEnumLiteral(AST ast, String className, IField enumConstant) {
+ QualifiedName enumName = null;
+ SimpleName enumClassName = ast.newSimpleName(enumConstant.getDeclaringType().getElementName());
+ SimpleName enumLiteral = ast.newSimpleName(enumConstant.getElementName());
+ try {
+ if (enumConstant.getDeclaringType().isMember()) {
+ Name enumEnclosingClassName = null;
+ String enclosingClassName = enumConstant.getDeclaringType().getDeclaringType().getFullyQualifiedName();
+ if (enclosingClassName.equals(className)) {
+ enumEnclosingClassName = ast.newSimpleName(enumConstant.getDeclaringType().getDeclaringType().getElementName());
+ } else {
+ enumEnclosingClassName = ast.newName(enclosingClassName);
+ }
+ QualifiedName qualifiedName = ast.newQualifiedName(enumEnclosingClassName, enumClassName);
+ enumName = ast.newQualifiedName(qualifiedName, enumLiteral);
+ } else {
+ Name qualifiedName = ast.newName(enumConstant.getDeclaringType().getFullyQualifiedName());
+ enumName = ast.newQualifiedName(qualifiedName, enumLiteral);
+ }
+ } catch (JavaModelException jme) {
+ AnnotationsCorePlugin.log(jme.getStatus());
+ }
+ return enumName;
+ }
+
+ /**
* Creates a new {@link TypeLiteral}.
*
* @param ast the {@link AST} that will be used to create the {@link TypeLiteral}.
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsManager.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsManager.java
index ba93d16..da1eda5 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsManager.java
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsManager.java
@@ -68,9 +68,6 @@
private static final String ATT_NAME = "name"; //$NON-NLS-1$
private static final String ATT_CATEGORY = "category"; //$NON-NLS-1$
- // private static final String ELEM_TARGET_FILTER = "targetFilter"; //$NON-NLS-1$
- // private static final String ATT_TARGET = "target"; //$NON-NLS-1$
-
private AnnotationsManager() {
}
@@ -102,6 +99,39 @@
}
/**
+ * Returns a list of all the contributed annotations that target the given {@link org.eclipse.jdt.core.IJavaElement}.
+ *
+ * @param element one of
+ * <li>org.eclipse.jdt.core.IPackageDeclaration</li>
+ * <li>org.eclipse.jdt.core.IType</li>
+ * <li>org.eclipse.jdt.core.IField</li>
+ * <li>org.eclipse.jdt.core.IMethod</li>
+ * <li>org.eclipse.jdt.core.ILocalVariable</li>
+ *
+ * @return a list of types which represent annotation types.
+ * @since 1.1
+ */
+ public static List<IType> getAnnotationTypes(IJavaElement javaElement) {
+ List<IType> annotations = new ArrayList<IType>();
+
+ try {
+ List<AnnotationDefinition> annotationDefinitions = getAllAnnotationsForElement(javaElement);
+
+ filterAnnotationsList(javaElement, annotationDefinitions);
+
+ for (AnnotationDefinition annotationDefinition : annotationDefinitions) {
+ IType type = annotationDefinition.getAnnotationType();
+ if (type != null) {
+ annotations.add(type);
+ }
+ }
+ } catch (JavaModelException jme) {
+ AnnotationsCorePlugin.log(jme.getStatus());
+ }
+ return annotations;
+ }
+
+ /**
* Returns a list of all the contributed {@link java.lang.annotation.Annotation} that target the given java element type.
*
* @param element one of
@@ -112,7 +142,9 @@
* <li>org.eclipse.jdt.core.ILocalVariable</li>
*
* @return a list of annotations.
+ * @deprecated As of 1.1 replaced by {@link #getAnnotationTypes(IJavaElement)}}
*/
+ @Deprecated
public static List<Class<? extends Annotation>> getAnnotations(IJavaElement javaElement) {
List<Class<? extends Annotation>> annotations = new ArrayList<Class<? extends Annotation>>();
@@ -131,17 +163,15 @@
}
private static synchronized Map<String, AnnotationDefinition> getAnnotationToClassNameDefinitionMap() {
-
if (annotationClassNameToDefinitionMap == null) {
List<AnnotationDefinition> annotationDefinitions = getAnnotations();
annotationClassNameToDefinitionMap = new HashMap<String, AnnotationDefinition>();
for (AnnotationDefinition annotationDefinition : annotationDefinitions) {
- if (annotationDefinition.getAnnotationClass() != null) {
- annotationClassNameToDefinitionMap.put(annotationDefinition.getAnnotationClass()
- .getCanonicalName(), annotationDefinition);
- }
+ if (annotationDefinition.getAnnotationClassName() != null) {
+ annotationClassNameToDefinitionMap.put(annotationDefinition.getAnnotationClassName(), annotationDefinition);
+ }
}
}
return annotationClassNameToDefinitionMap;
@@ -195,6 +225,18 @@
}
/**
+ * Returns the {@link AnnotationDefinition} for the given {@link org.eclipse.jdt.core.IType}
+ * or null if no annotation definition can be found.
+ *
+ * @param annotationType an <code>org.eclipse.jdt.core.IType</code> which represents an annotation type.
+ * @return the annotation definition for the <code>org.eclipse.jdt.core.IType</code>.
+ * @since 1.1
+ */
+ public static AnnotationDefinition getAnnotationDefinitionForType(IType annotationType) {
+ return getAnnotationToClassNameDefinitionMap().get(annotationType.getFullyQualifiedName());
+ }
+
+ /**
* Returns the {@link IAnnotationAttributeInitializer} for the given {@link org.eclipse.jdt.core.dom.Name}
* or null if none can be found.
* @param name a {@link SimpleName} or {@link QualifiedName} for the annotation to search for.
@@ -254,7 +296,6 @@
if (annotationCategoryCache != null) {
return annotationCategoryCache;
}
-
annotationCategoryCache = new HashMap<String, String>();
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(
@@ -274,7 +315,6 @@
if (annotationInitializerCache != null) {
return annotationInitializerCache;
}
-
annotationInitializerCache = new HashMap<String, IConfigurationElement>();
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(
@@ -326,41 +366,39 @@
return ""; //$NON-NLS-1$
}
- private static List<AnnotationDefinition> getAllAnnotationsForElement(IJavaElement javaElement)
- throws JavaModelException {
-
+ private static List<AnnotationDefinition> getAllAnnotationsForElement(IJavaElement javaElement) throws JavaModelException {
if (javaElement instanceof IPackageDeclaration) {
- return getAnnotationsForElementType(ElementType.PACKAGE);
+ return getAnnotationsForElementType(javaElement, ElementType.PACKAGE);
}
if (javaElement instanceof IType) {
IType type = (IType) javaElement;
if (type.isAnnotation()) {
- return getAnnotationsForElementType(ElementType.ANNOTATION_TYPE);
+ return getAnnotationsForElementType(javaElement, ElementType.ANNOTATION_TYPE);
}
- return getAnnotationsForElementType(ElementType.TYPE);
+ return getAnnotationsForElementType(javaElement, ElementType.TYPE);
}
if (javaElement instanceof IField) {
- return getAnnotationsForElementType(ElementType.FIELD);
+ return getAnnotationsForElementType(javaElement, ElementType.FIELD);
}
if (javaElement instanceof IMethod) {
- return getAnnotationsForElementType(ElementType.METHOD);
+ return getAnnotationsForElementType(javaElement, ElementType.METHOD);
}
if (javaElement instanceof ILocalVariable) {
- return getAnnotationsForElementType(ElementType.PARAMETER);
+ return getAnnotationsForElementType(javaElement, ElementType.PARAMETER);
}
if (javaElement instanceof IAnnotation) {
- return getAnnotationsForElementType(ElementType.ANNOTATION_TYPE);
+ return getAnnotationsForElementType(javaElement, ElementType.ANNOTATION_TYPE);
}
return Collections.emptyList();
}
- private static List<AnnotationDefinition> getAnnotationsForElementType(ElementType elementType) {
+ private static List<AnnotationDefinition> getAnnotationsForElementType(IJavaElement javaElement, ElementType elementType) {
List<AnnotationDefinition> annotationDefinitions = new ArrayList<AnnotationDefinition>();
if (annotationCache == null) {
@@ -368,8 +406,10 @@
}
for (AnnotationDefinition annotationDefinition : annotationCache) {
- if (annotationDefinition.getTargets().contains(elementType) &&
- !isDeprecated(annotationDefinition)) {
+ annotationDefinition.setJavaProject(javaElement.getJavaProject());
+
+ if (annotationDefinition.getAnnotationTypeTargets().contains(elementType) &&
+ !annotationDefinition.isDeprecated()) {
annotationDefinitions.add(annotationDefinition);
}
}
@@ -396,7 +436,7 @@
annotationIter.remove();
}
if (method.isConstructor()
- && !annotationDefinition.getTargets().contains(ElementType.CONSTRUCTOR)) {
+ && !annotationDefinition.getAnnotationTypeTargets().contains(ElementType.CONSTRUCTOR)) {
annotationIter.remove();
}
@@ -464,10 +504,4 @@
}
return false;
}
-
- //TODO Move the Deprecated option to preferences
- private static boolean isDeprecated(AnnotationDefinition annotationDefinition) {
- Class<?> annotationClass = annotationDefinition.getAnnotationClass();
- return annotationClass.getAnnotation(java.lang.Deprecated.class) != null;
- }
}
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/AnnotationAttributeInitializer.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/AnnotationAttributeInitializer.java
index e4c5d27..a34e14f 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/AnnotationAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/AnnotationAttributeInitializer.java
@@ -15,6 +15,7 @@
import java.util.List;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.MemberValuePair;
@@ -40,59 +41,65 @@
*/
public abstract class AnnotationAttributeInitializer implements IAnnotationAttributeInitializer {
- protected static final String MISSING_IDENTIFER = "$missing$";
+ protected static final String MISSING_IDENTIFER = "$missing$";
- protected AnnotationAttributeInitializer() {
+ protected AnnotationAttributeInitializer() {
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer#getMemberValuePairs(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.AST, java.lang.Class)
+ */
+ @Deprecated
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, Class<? extends Annotation> annotationClass) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @see org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer#getMemberValuePairs(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.AST, java.lang.Class)
+ * @since 1.1
+ */
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType type) {
+ return Collections.emptyList();
}
- /* (non-Javadoc)
- * @see org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer#getMemberValuePairs(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.AST, java.lang.Class)
- */
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
- Class<? extends Annotation> annotationClass) {
- return Collections.emptyList();
- }
+ /* (non-Javadoc)
+ * @see org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer#getCompletionProposalsForMemberValuePair(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.MemberValuePair)
+ */
+ public List<ICompletionProposal> getCompletionProposalsForMemberValuePair(IJavaElement javaElement,
+ MemberValuePair memberValuePair) {
+ return Collections.emptyList();
+ }
- /* (non-Javadoc)
- * @see org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer#getCompletionProposalsForMemberValuePair(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.MemberValuePair)
- */
- public List<ICompletionProposal> getCompletionProposalsForMemberValuePair(IJavaElement javaElement,
- MemberValuePair memberValuePair) {
- return Collections.emptyList();
- }
+ /* (non-Javadoc)
+ * @see org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer#getCompletionProposalsForSingleMemberAnnotation(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.SingleMemberAnnotation)
+ */
+ public List<ICompletionProposal> getCompletionProposalsForSingleMemberAnnotation(IJavaElement javaElement,
+ SingleMemberAnnotation singleMemberAnnotation) {
+ return Collections.emptyList();
+ }
- /* (non-Javadoc)
- * @see org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer#getCompletionProposalsForSingleMemberAnnotation(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.SingleMemberAnnotation)
- */
- public List<ICompletionProposal> getCompletionProposalsForSingleMemberAnnotation(IJavaElement javaElement,
- SingleMemberAnnotation singleMemberAnnotation) {
- return Collections.emptyList();
- }
+ protected CompletionProposal createCompletionProposal(String proposal, Expression value) {
+ Image image = PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ISharedImages.IMG_OBJ_FILE);
+ return createCompletionProposal(proposal, value, image, proposal);
+ }
- protected CompletionProposal createCompletionProposal(String proposal, Expression value) {
- Image image = PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ISharedImages.IMG_OBJ_FILE);
- return createCompletionProposal(proposal, value, image, proposal);
- }
+ protected CompletionProposal createCompletionProposal(String proposal, Expression value, Image image, String displayString) {
+ int replacementOffset = value.getStartPosition();
+ int replacementLength = 0;
+ if (value.toString().equals(MISSING_IDENTIFER)) {
+ if (proposal.charAt(0) != '\"') {
+ proposal = "\"" + proposal;
+ }
+ if (proposal.charAt(proposal.length() - 1) != '\"') {
+ proposal = proposal + "\"";
+ }
+ } else {
+ replacementOffset += 1;
+ replacementLength = value.getLength() - 2;
+ }
- protected CompletionProposal createCompletionProposal(String proposal, Expression value, Image image,
- String displayString) {
- int replacementOffset = value.getStartPosition();
- int replacementLength = 0;
- if (value.toString().equals(MISSING_IDENTIFER)) {
- if (proposal.charAt(0) != '\"') {
- proposal = "\"" + proposal;
- }
- if (proposal.charAt(proposal.length() - 1) != '\"') {
- proposal = proposal + "\"";
- }
- } else {
- replacementOffset += 1;
- replacementLength = value.getLength() - 2;
- }
-
- return new CompletionProposal(proposal, replacementOffset, replacementLength, proposal.length(),
- image, displayString, null, null);
- }
+ return new CompletionProposal(proposal, replacementOffset, replacementLength, proposal.length(),
+ image, displayString, null, null);
+ }
}
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/DefaultsAnnotationAttributeInitializer.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/DefaultsAnnotationAttributeInitializer.java
index 0fb5bae..32dd540 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/DefaultsAnnotationAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/DefaultsAnnotationAttributeInitializer.java
@@ -15,10 +15,18 @@
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMemberValuePair;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.MemberValuePair;
import org.eclipse.jst.ws.annotations.core.AnnotationsCore;
+import org.eclipse.jst.ws.annotations.core.AnnotationsCorePlugin;
+import org.eclipse.jst.ws.internal.annotations.core.utils.SignatureUtils;
/**
* Constructs {@link MemberValuePair} from the defaults found in the given {@link java.lang.annotation.Annotation}.
@@ -40,13 +48,85 @@
* @see org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer#getMemberValuePairs(org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.dom.AST, java.lang.Class)
*/
@Override
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
- Class<? extends Annotation> annotationClass) {
+ @Deprecated
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, Class<? extends Annotation> annotationClass) {
return getMemberValuePairs(ast, annotationClass);
}
- private List<MemberValuePair> getMemberValuePairs(AST ast,
- Class<? extends Annotation> annotationClass) {
+ @Override
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType type) {
+ return interalGetMemberValuePairs(javaElement, ast, type);
+ }
+
+ private List<MemberValuePair> interalGetMemberValuePairs(IJavaElement javaElement, AST ast, IType type) {
+ List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
+
+ try {
+ IMethod[] methods = type.getMethods();
+ for (IMethod method : methods) {
+ String name = method.getElementName();
+ String returnType = method.getReturnType();
+ IMemberValuePair defaultValue = method.getDefaultValue();
+ if (defaultValue != null) {
+ if (SignatureUtils.isString(returnType)) {
+ memberValuePairs.add(AnnotationsCore.createStringMemberValuePair(ast,
+ name, defaultValue.getValue().toString()));
+ }
+
+ if (SignatureUtils.isBoolean(returnType)) {
+ memberValuePairs.add(AnnotationsCore.createBooleanMemberValuePair(ast,
+ name, Boolean.parseBoolean(defaultValue.getValue().toString())));
+ }
+
+ int signatureKind = Signature.getTypeSignatureKind(returnType);
+ if (signatureKind == Signature.BASE_TYPE_SIGNATURE) {
+ if (returnType.charAt(0) == Signature.C_BYTE
+ || returnType.charAt(0) == Signature.C_SHORT
+ || returnType.charAt(0) == Signature.C_INT
+ || returnType.charAt(0) == Signature.C_LONG
+ || returnType.charAt(0) == Signature.C_FLOAT
+ || returnType.charAt(0) == Signature.C_DOUBLE) {
+ memberValuePairs.add(AnnotationsCore.createNumberMemberValuePair(ast, name, defaultValue.getValue().toString()));
+ }
+ }
+
+ if (SignatureUtils.isArray(returnType)) {
+ memberValuePairs.add(AnnotationsCore.createArrayMemberValuePair(ast, method.getElementName(),
+ (Object[]) defaultValue.getValue()));
+ }
+
+ if (SignatureUtils.isEnum(method)) {
+ if (defaultValue.getValueKind() == IMemberValuePair.K_QUALIFIED_NAME) {
+ String value = defaultValue.getValue().toString();
+ String enumName = value.substring(0, value.lastIndexOf("."));
+ String constant = value.substring(value.lastIndexOf(".") + 1, value.length());
+ IType enumType = javaElement.getJavaProject().findType(enumName);
+ if (enumType != null && enumType.isEnum()) {
+ IField[] fields = enumType.getFields();
+ for (IField field : fields) {
+ if (field.isEnumConstant() && field.getElementName().equals(constant)) {
+ memberValuePairs.add(AnnotationsCore.createEnumMemberValuePair(ast,
+ method.getDeclaringType().getFullyQualifiedName(), name, field));
+ }
+ }
+ }
+ }
+ }
+
+ if (SignatureUtils.isClass(returnType)) {
+ memberValuePairs.add(AnnotationsCore.createTypeMemberValuePair(ast, name,
+ defaultValue.getValue()));
+ }
+ }
+ }
+ } catch (JavaModelException jme) {
+ AnnotationsCorePlugin.log(jme.getStatus());
+ }
+
+ return memberValuePairs;
+ }
+
+ private List<MemberValuePair> getMemberValuePairs(AST ast, Class<? extends Annotation> annotationClass) {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
Method[] declaredMethods = annotationClass.getDeclaredMethods();
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/IAnnotationAttributeInitializer.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/IAnnotationAttributeInitializer.java
index cabef2a..9878c02 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/IAnnotationAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/initialization/IAnnotationAttributeInitializer.java
@@ -13,6 +13,7 @@
import java.util.List;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.MemberValuePair;
import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
@@ -38,11 +39,23 @@
* @param annotationClass the {@link java.lang.annotation.Annotation} class which may be
* used to query the declared members of the annotation type and the members default values.
* @return a list of member value pairs.
+ * @deprecated as of 1.1 replaced by {@link IAnnotationAttributeInitializer2#getMemberValuePairs(IJavaElement, AST, IType)}
*/
+ @Deprecated
public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
Class<? extends java.lang.annotation.Annotation> annotationClass);
/**
+ * Returns a list of {@link MemberValuePair} that may be added to a {@link NormalAnnotation}.
+ * @param javaElement the java element on which the annotation is declared.
+ * @param ast the <code>AST</code> with which to create the member value pairs.
+ * @param type the {@link org.eclipse.jdt.core.IType} which represents an annotation type,.
+ * @return a list of member value pairs.
+ * @since 1.1
+ */
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType type);
+
+ /**
* Used to provide a list of {@link ICompletionProposal} for a {@link MemberValuePair} value.
* @param javaElement the java element on which the annotation is declared.
* @param memberValuePair the member value pair in which content assist was invoked.
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.java
index d81033f..cbb7d5e 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.java
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/utils/AnnotationUtils.java
@@ -317,9 +317,10 @@
final String annotationSimpleName = qualifiedName.substring(qualifiedName.lastIndexOf(".") + 1);
final List<String> occurences = new ArrayList<String>();
AnnotationDefinition annotationDefinition = AnnotationsManager.getAnnotationDefinitionForClass(qualifiedName);
+ annotationDefinition.setJavaProject(javaElement.getJavaProject());
List<ElementType> elementTypes = Collections.emptyList();
if (annotationDefinition != null) {
- elementTypes = annotationDefinition.getTargets();
+ elementTypes = annotationDefinition.getAnnotationTypeTargets();
}
for (ElementType elementType : elementTypes) {
if (elementType == ElementType.PACKAGE) {
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/internal/annotations/core/utils/SignatureUtils.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/internal/annotations/core/utils/SignatureUtils.java
new file mode 100644
index 0000000..28ea61e
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/internal/annotations/core/utils/SignatureUtils.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Shane Clarke.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Shane Clarke - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.annotations.core.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
+
+public final class SignatureUtils {
+
+ private SignatureUtils() {
+ }
+
+ public static boolean isString(String returnType) {
+ int signatureKind = Signature.getTypeSignatureKind(returnType);
+ if (signatureKind == Signature.CLASS_TYPE_SIGNATURE) {
+ if (returnType.charAt(0) == Signature.C_RESOLVED) {
+ return Signature.toString(returnType).equals(java.lang.String.class.getCanonicalName());
+ }
+ if (returnType.charAt(0) == Signature.C_UNRESOLVED) {
+ return Signature.toString(returnType).equals(java.lang.String.class.getSimpleName());
+ }
+ }
+ return false;
+ }
+
+ public static boolean isClass(String returnType) {
+ int signatureKind = Signature.getTypeSignatureKind(returnType);
+ if (signatureKind == Signature.CLASS_TYPE_SIGNATURE) {
+ if (returnType.charAt(0) == Signature.C_RESOLVED) {
+ returnType = Signature.getTypeErasure(returnType);
+ return Signature.toString(returnType).equals(java.lang.Class.class.getCanonicalName());
+ }
+ if (returnType.charAt(0) == Signature.C_UNRESOLVED) {
+ returnType = Signature.getTypeErasure(returnType);
+ return Signature.toString(returnType).equals(java.lang.Class.class.getSimpleName());
+ }
+ }
+ return false;
+ }
+
+ public static boolean isBoolean(String returnType) {
+ int signatureKind = Signature.getTypeSignatureKind(returnType);
+ if (signatureKind == Signature.CLASS_TYPE_SIGNATURE) {
+ if (returnType.charAt(0) == Signature.C_RESOLVED) {
+ return Signature.toString(returnType).equals(java.lang.Boolean.class.getCanonicalName());
+ }
+ if (returnType.charAt(0) == Signature.C_UNRESOLVED) {
+ return Signature.toString(returnType).equals(java.lang.Boolean.class.getSimpleName());
+ }
+ }
+ if (signatureKind == Signature.BASE_TYPE_SIGNATURE) {
+ return returnType.charAt(0) == Signature.C_BOOLEAN;
+ }
+ return false;
+ }
+
+ public static boolean isArray(String returnType) {
+ return Signature.getTypeSignatureKind(returnType) == Signature.ARRAY_TYPE_SIGNATURE;
+ }
+
+ public static boolean isPrimitive(String returnType) {
+ return Signature.getTypeSignatureKind(returnType) == Signature.BASE_TYPE_SIGNATURE;
+ }
+
+ public static boolean isEnum(IMethod method) throws JavaModelException {
+ return getEnumReturnType(method) != null;
+ }
+
+ public static IType getEnumReturnType(IMethod method) throws JavaModelException {
+ String returnType = method.getReturnType();
+ int signatureKind = Signature.getTypeSignatureKind(returnType);
+ if (signatureKind == Signature.CLASS_TYPE_SIGNATURE) {
+ if (returnType.charAt(0) == Signature.C_RESOLVED) {
+ IType type = method.getJavaProject().findType(Signature.toString(returnType));
+ if (type != null && type.isEnum()) {
+ return type;
+ }
+ }
+ }
+ return null;
+ }
+
+ public static String[] getEnumConstantsNames(IType enumType) throws JavaModelException {
+ if (enumType.isEnum()) {
+ List<String> enumConstants = new ArrayList<String>();
+ IField[] fields = getEnumConstants(enumType);
+ for (IField field : fields) {
+ enumConstants.add(field.getElementName());
+ }
+ return enumConstants.toArray(new String[enumConstants.size()]);
+ }
+ return new String[] {};
+ }
+
+ public static IField[] getEnumConstants(IType enumType) throws JavaModelException {
+ if (enumType.isEnum()) {
+ List<IField> enumConstants = new ArrayList<IField>();
+ IField[] fields = enumType.getFields();
+ for (IField field : fields) {
+ if (field.isEnumConstant()) {
+ enumConstants.add(field);
+ }
+ }
+ return enumConstants.toArray(new IField[enumConstants.size()]);
+ }
+ return new IField[] {};
+ }
+
+
+}
diff --git a/bundles/org.eclipse.jst.ws.cxf.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.cxf.core/META-INF/MANIFEST.MF
index 9b15f96..09a34a6 100644
--- a/bundles/org.eclipse.jst.ws.cxf.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.cxf.core/META-INF/MANIFEST.MF
@@ -46,7 +46,7 @@
org.eclipse.ui.console;bundle-version="[3.3.0,4.0.0)",
org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)",
org.eclipse.jdt.apt.core;bundle-version="[3.3.100,4.0.0)",
- org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.2.0)",
org.eclipse.jst.ws.jaxws.core;bundle-version="[1.0.0,1.1.0)",
org.eclipse.wst.command.env.core;bundle-version="[1.0.204,1.1.0)",
javax.jws;bundle-version="[2.0.0,2.1.0)",
diff --git a/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/CXFModelUtils.java b/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/CXFModelUtils.java
index fac978f..b859fd1 100644
--- a/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/CXFModelUtils.java
+++ b/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/CXFModelUtils.java
@@ -40,6 +40,7 @@
import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
import org.eclipse.jdt.ui.CodeStyleConfiguration;
import org.eclipse.jdt.ui.SharedASTProvider;
+import org.eclipse.jst.ws.annotations.core.AnnotationDefinition;
import org.eclipse.jst.ws.annotations.core.AnnotationsCore;
import org.eclipse.jst.ws.annotations.core.AnnotationsManager;
import org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer;
@@ -124,13 +125,12 @@
} else {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
- IAnnotationAttributeInitializer annotationAttributeInitializer =
- AnnotationsManager.getAnnotationDefinitionForClass(WebService.class).
- getAnnotationAttributeInitializer();
+ AnnotationDefinition annotationDefinition = AnnotationsManager.getAnnotationDefinitionForClass(WebService.class.getCanonicalName());
+ IAnnotationAttributeInitializer annotationAttributeInitializer = annotationDefinition.getAnnotationAttributeInitializer();
+ IType annotationType = annotationDefinition.getAnnotationType();
if (annotationAttributeInitializer != null) {
- memberValuePairs = annotationAttributeInitializer.getMemberValuePairs(type, ast,
- WebService.class);
+ memberValuePairs = annotationAttributeInitializer.getMemberValuePairs(type, ast, annotationType);
}
if (model.isUseServiceEndpointInterface() && type.isClass()) {
@@ -218,11 +218,13 @@
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
- IAnnotationAttributeInitializer annotationAttributeInitializer = AnnotationsManager
- .getAnnotationDefinitionForClass(annotationClass).getAnnotationAttributeInitializer();
+ AnnotationDefinition annotationDefinition = AnnotationsManager.getAnnotationDefinitionForClass(annotationClass.getCanonicalName());
+ IAnnotationAttributeInitializer annotationAttributeInitializer = annotationDefinition.getAnnotationAttributeInitializer();
+
+ IType annotationType = annotationDefinition.getAnnotationType();
if (annotationAttributeInitializer != null) {
- memberValuePairs = annotationAttributeInitializer.getMemberValuePairs(javaElement, ast, annotationClass);
+ memberValuePairs = annotationAttributeInitializer.getMemberValuePairs(javaElement, ast, annotationType);
}
return AnnotationsCore.createNormalAnnotation(ast, annotationClass.getSimpleName(), memberValuePairs);
diff --git a/bundles/org.eclipse.jst.ws.cxf.creation.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.cxf.creation.core/META-INF/MANIFEST.MF
index 58f19c7..b54ebc1 100644
--- a/bundles/org.eclipse.jst.ws.cxf.creation.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.cxf.creation.core/META-INF/MANIFEST.MF
@@ -23,7 +23,7 @@
org.eclipse.jst.j2ee;bundle-version="[1.1.100,1.2.0)",
org.eclipse.jst.j2ee.core;bundle-version="[1.1.0,1.3.0)",
org.eclipse.text;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.2.0)",
org.eclipse.jst.ws.jaxws.core;bundle-version="[1.0.0,1.1.0)",
org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)",
org.eclipse.jem;bundle-version="[2.0.0,2.1.0)",
diff --git a/bundles/org.eclipse.jst.ws.cxf.creation.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.cxf.creation.ui/META-INF/MANIFEST.MF
index 079c554..2e44690 100644
--- a/bundles/org.eclipse.jst.ws.cxf.creation.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.cxf.creation.ui/META-INF/MANIFEST.MF
@@ -29,7 +29,7 @@
org.eclipse.jst.ws.creation.ui;bundle-version="[1.0.305,1.1.0)",
org.eclipse.jst.ws;bundle-version="[1.0.304,1.1.0)",
org.eclipse.ltk.core.refactoring;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.2.0)",
org.eclipse.jst.ws.jaxws.core;bundle-version="[1.0.0,1.1.0)",
org.eclipse.emf.common;bundle-version="[2.4.0,3.0.0)",
javax.wsdl;bundle-version="[1.6.2,1.7.0)",
diff --git a/bundles/org.eclipse.jst.ws.jaxb.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.jaxb.core/META-INF/MANIFEST.MF
index d07d651..ca75b58 100644
--- a/bundles/org.eclipse.jst.ws.jaxb.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.jaxb.core/META-INF/MANIFEST.MF
@@ -6,11 +6,8 @@
Bundle-Version: 1.0.0.qualifier
Bundle-ClassPath: .
Bundle-Localization: plugin
-Eclipse-RegisterBuddy: org.eclipse.jst.ws.annotations.core
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-Activator: org.eclipse.jst.ws.internal.jaxb.core.JAXBCorePlugin
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)"
-Export-Package: org.eclipse.jst.ws.internal.jaxb.core
-Import-Package: javax.xml.bind.annotation;version="[2.1.0,2.2.0)",
- javax.xml.bind.annotation.adapters;version="[2.1.0,2.2.0)"
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.jst.ws.annotations.core;bundle-version="1.1.0"
Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.jst.ws.jaxb.core/plugin.xml b/bundles/org.eclipse.jst.ws.jaxb.core/plugin.xml
index 3120700..4e39150 100644
--- a/bundles/org.eclipse.jst.ws.jaxb.core/plugin.xml
+++ b/bundles/org.eclipse.jst.ws.jaxb.core/plugin.xml
@@ -17,15 +17,6 @@
category="jaxb.category"
class="javax.xml.bind.annotation.XmlAccessorType"
name="XmlAccessorType"/>
-
- <!-- TODO Reinstate when XmlAdapter issue is solved
- <annotation
- category="jaxb.category"
- class="javax.xml.bind.annotation.adapters.XmlAdapter"
- name="XmlAdapter">
- </annotation>
- -->
-
<annotation
category="jaxb.category"
class="javax.xml.bind.annotation.XmlAnyAttribute"
@@ -177,5 +168,5 @@
name="XmlValue">
</annotation>
</extension>
-
+
</plugin>
diff --git a/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
index 8fd4f15..5ad2752 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
@@ -6,7 +6,6 @@
Bundle-Version: 1.0.100.qualifier
Bundle-ClassPath: .
Bundle-Localization: plugin
-Eclipse-RegisterBuddy: org.eclipse.jst.ws.annotations.core
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-Activator: org.eclipse.jst.ws.internal.jaxws.core.JAXWSCorePlugin
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
@@ -14,7 +13,7 @@
org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
org.eclipse.jdt.apt.core;bundle-version="[3.3.100,4.0.0)",
org.eclipse.core.filesystem;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.2.0)",
javax.wsdl;bundle-version="[1.6.2,1.7.0)",
javax.xml.soap;bundle-version="[1.2.0,1.3.0)",
org.apache.xerces;bundle-version="[2.9.0,3.0.0)",
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.jaxws.ui/META-INF/MANIFEST.MF
index e37f56c..8860e92 100755
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/META-INF/MANIFEST.MF
@@ -17,7 +17,7 @@
org.eclipse.ltk.core.refactoring;bundle-version="[3.4.0,4.0.0)",
org.eclipse.ui.editors;bundle-version="[3.4.0,4.0.0)",
org.eclipse.jdt.launching;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.2.0)",
org.eclipse.jdt.apt.core;bundle-version="[3.3.100,4.0.0)",
org.eclipse.jst.ws.jaxws.dom.runtime;bundle-version="[1.0.0,1.1.0)",
org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)"
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/BindingTypeAttributeInitializer.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/BindingTypeAttributeInitializer.java
index cc5a1f2..3199c7c 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/BindingTypeAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/BindingTypeAttributeInitializer.java
@@ -11,14 +11,16 @@
package org.eclipse.jst.ws.internal.jaxws.ui.annotations.initialization;
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.VALUE;
-import java.lang.annotation.Annotation;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+
import javax.xml.ws.http.HTTPBinding;
import javax.xml.ws.soap.SOAPBinding;
+
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.dom.AST;
@@ -49,10 +51,9 @@
JAXWSUIPlugin.getDefault().getImageRegistry().put(HTTP_BINDING,
JAXWSUIPlugin.getImageDescriptor("icons/obj16/httpbinding_obj.gif").createImage()); //$NON-NLS-1$
}
-
+
@Override
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
- Class<? extends Annotation> annotationClass) {
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType annotationType) {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
if (javaElement.getElementType() == IJavaElement.TYPE) {
MemberValuePair value = AnnotationsCore.createStringMemberValuePair(ast, VALUE, getDefault()); //$NON-NLS-1$
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/RequestWrapperAttributeInitializer.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/RequestWrapperAttributeInitializer.java
index 77f6d70..0e66985 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/RequestWrapperAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/RequestWrapperAttributeInitializer.java
@@ -17,7 +17,6 @@
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.OPERATION_NAME;
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.TARGET_NAMESPACE;
-import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
@@ -40,10 +39,9 @@
import org.eclipse.jst.ws.jaxws.core.utils.JDTUtils;
public class RequestWrapperAttributeInitializer extends AnnotationAttributeInitializer {
-
+
@Override
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
- Class<? extends Annotation> annotationClass) {
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType annotationType) {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
if (javaElement.getElementType() == IJavaElement.METHOD) {
IMethod method = (IMethod) javaElement;
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/SOAPBindingAttributeInitializer.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/SOAPBindingAttributeInitializer.java
index dd1124f..5e9b337 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/SOAPBindingAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/SOAPBindingAttributeInitializer.java
@@ -14,7 +14,6 @@
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.STYLE;
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.USE;
-import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
@@ -24,16 +23,16 @@
import javax.jws.soap.SOAPBinding.Use;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.MemberValuePair;
import org.eclipse.jst.ws.annotations.core.AnnotationsCore;
import org.eclipse.jst.ws.annotations.core.initialization.AnnotationAttributeInitializer;
public class SOAPBindingAttributeInitializer extends AnnotationAttributeInitializer {
-
+
@Override
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
- Class<? extends Annotation> annotationClass) {
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType annotationType) {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
MemberValuePair styleValuePair = AnnotationsCore.createEnumMemberValuePair(ast,
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebMethodAttributeInitializer.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebMethodAttributeInitializer.java
index 7d1ea92..1297bb2 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebMethodAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebMethodAttributeInitializer.java
@@ -13,7 +13,6 @@
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.ACTION;
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.OPERATION_NAME;
-import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
@@ -30,22 +29,20 @@
import org.eclipse.jst.ws.internal.jaxws.ui.JAXWSUIPlugin;
public class WebMethodAttributeInitializer extends AnnotationAttributeInitializer {
-
+
@Override
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
- Class<? extends Annotation> annotationClass) {
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType annotationType) {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
if (javaElement.getElementType() == IJavaElement.METHOD) {
IMethod method = (IMethod) javaElement;
- IType type = method.getCompilationUnit().findPrimaryType();
MemberValuePair operationValuePair = AnnotationsCore.createStringMemberValuePair(ast,
- OPERATION_NAME, getOperationNameValue(type, method));
+ OPERATION_NAME, getOperationNameValue(method));
MemberValuePair actionValuePair = AnnotationsCore.createStringMemberValuePair(ast,
- ACTION, getActionValue(type, method));
+ ACTION, getActionValue(method));
memberValuePairs.add(operationValuePair);
memberValuePairs.add(actionValuePair);
@@ -61,17 +58,16 @@
if (javaElement.getElementType() == IJavaElement.METHOD) {
IMethod method = (IMethod) javaElement;
- IType type = method.getCompilationUnit().findPrimaryType();
String memberValuePairName = memberValuePair.getName().getIdentifier();
if (memberValuePairName.equals(OPERATION_NAME)) {
- completionProposals.add(createCompletionProposal(getOperationNameValue(type, method),
+ completionProposals.add(createCompletionProposal(getOperationNameValue(method),
memberValuePair.getValue()));
}
if (memberValuePairName.equals(ACTION)) {
- completionProposals.add(createCompletionProposal(getActionValue(type, method),
+ completionProposals.add(createCompletionProposal(getActionValue(method),
memberValuePair.getValue()));
}
@@ -79,7 +75,7 @@
return completionProposals;
}
- private String getOperationNameValue(IType type, IMethod method) {
+ private String getOperationNameValue(IMethod method) {
try {
return method.getElementName() + JAXWSUtils.accountForOverloadedMethods(method);
} catch (JavaModelException jme) {
@@ -88,7 +84,7 @@
return ""; //$NON-NLS-1$
}
- private String getActionValue(IType type, IMethod method) {
+ private String getActionValue(IMethod method) {
try {
String methodName = method.getElementName();
return "urn:" + methodName.substring(0, 1).toUpperCase() //$NON-NLS-1$
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebParamAttributeInitializer.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebParamAttributeInitializer.java
index c6916bc..f2a301e 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebParamAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebParamAttributeInitializer.java
@@ -17,7 +17,6 @@
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.PART_NAME;
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.TARGET_NAMESPACE;
-import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -43,10 +42,9 @@
import org.eclipse.jst.ws.jaxws.core.utils.JDTUtils;
public class WebParamAttributeInitializer extends AnnotationAttributeInitializer {
-
+
@Override
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement,
- AST ast, Class<? extends Annotation> annotationClass) {
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType annotationType) {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebResultAttributeInitializer.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebResultAttributeInitializer.java
index bdf5964..e697ba3 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebResultAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebResultAttributeInitializer.java
@@ -18,7 +18,6 @@
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.RETURN;
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.TARGET_NAMESPACE;
-import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
@@ -47,8 +46,7 @@
public class WebResultAttributeInitializer extends AnnotationAttributeInitializer {
@Override
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
- Class<? extends Annotation> annotationClass) {
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType annotationType) {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
if (javaElement.getElementType() == IJavaElement.METHOD) {
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebServiceAttributeInitializer.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebServiceAttributeInitializer.java
index 1163586..1560b25 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebServiceAttributeInitializer.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/annotations/initialization/WebServiceAttributeInitializer.java
@@ -18,7 +18,6 @@
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.SERVICE_SUFFIX;
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.TARGET_NAMESPACE;
-import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -40,8 +39,7 @@
public class WebServiceAttributeInitializer extends AnnotationAttributeInitializer {
@Override
- public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast,
- Class<? extends Annotation> annotationClass) {
+ public List<MemberValuePair> getMemberValuePairs(IJavaElement javaElement, AST ast, IType annotationType) {
List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
if (javaElement.getElementType() == IJavaElement.TYPE) {
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationArrayCellEditor.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationArrayCellEditor.java
index e3dff5c..e15a819 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationArrayCellEditor.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationArrayCellEditor.java
@@ -10,7 +10,6 @@
*******************************************************************************/
package org.eclipse.jst.ws.internal.jaxws.ui.views;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -20,9 +19,12 @@
import java.util.Set;
import org.eclipse.jdt.core.IAnnotation;
+import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMemberValuePair;
+import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jdt.ui.ISharedImages;
@@ -39,6 +41,7 @@
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
+import org.eclipse.jst.ws.internal.annotations.core.utils.SignatureUtils;
import org.eclipse.jst.ws.internal.jaxws.ui.JAXWSUIMessages;
import org.eclipse.jst.ws.internal.jaxws.ui.JAXWSUIPlugin;
import org.eclipse.swt.SWT;
@@ -59,7 +62,7 @@
import org.eclipse.ui.dialogs.SelectionStatusDialog;
public class AnnotationArrayCellEditor extends DialogCellEditor {
- private Method method;
+ private IMethod method;
private Object[] values;
private List<Object> originalValues;
@@ -89,7 +92,7 @@
return values;
}
- public void setMethod(Method method) {
+ public void setMethod(IMethod method) {
this.method = method;
if (updatedValues != null) {
updatedValues.clear();
@@ -184,263 +187,296 @@
protected Control createDialogArea(Composite parent) {
Composite mainComposite = (Composite) super.createDialogArea(parent);
- GridLayout gridLayout = new GridLayout(3, false);
- mainComposite.setLayout(gridLayout);
+ try {
+ GridLayout gridLayout = new GridLayout(3, false);
+ mainComposite.setLayout(gridLayout);
- GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, false, false);
- gridData.widthHint = 800;
- mainComposite.setLayoutData(gridData);
+ GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, false, false);
+ gridData.widthHint = 800;
+ mainComposite.setLayoutData(gridData);
- Composite typeComposite = new Composite(mainComposite, SWT.NONE);
- gridLayout = new GridLayout(3, false);
- typeComposite.setLayout(gridLayout);
- gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, true);
- typeComposite.setLayoutData(gridData);
+ Composite typeComposite = new Composite(mainComposite, SWT.NONE);
+ gridLayout = new GridLayout(3, false);
+ typeComposite.setLayout(gridLayout);
+ gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, true);
+ typeComposite.setLayoutData(gridData);
- final Class<?> componentType = method.getReturnType().getComponentType();
- if (componentType.isAnnotation()) {
- Label compontTypeLabel = new Label(typeComposite, SWT.NONE);
- compontTypeLabel.setText("@" + componentType.getName()); //$NON-NLS-1$
- gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
- gridData.horizontalSpan = 3;
- compontTypeLabel.setLayoutData(gridData);
+ final IType componentType = getComponentType(method);
+ if (componentType != null) {
+ if (componentType.isAnnotation()) {
+ Label compontTypeLabel = new Label(typeComposite, SWT.NONE);
+ compontTypeLabel.setText("@" + componentType.getFullyQualifiedName()); //$NON-NLS-1$
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.horizontalSpan = 3;
+ compontTypeLabel.setLayoutData(gridData);
- Method[] methods = componentType.getDeclaredMethods();
- for (Method method : methods) {
- Label label = new Label(typeComposite, SWT.NONE);
- label.setText(method.getName() + ":"); //$NON-NLS-1$
- createEntryFields(method, typeComposite);
- }
- } else {
- Label label = new Label(typeComposite, SWT.NONE);
- label.setText(method.getReturnType().getSimpleName());
- createEntryFields(method, typeComposite);
- }
-
- Composite buttonComposite = new Composite(mainComposite, SWT.NONE);
- gridLayout = new GridLayout(1, false);
- buttonComposite.setLayout(gridLayout);
-
- addButton = new Button(buttonComposite, SWT.PUSH);
- addButton.setText(JAXWSUIMessages.ANNOTATION_ARRAY_CELL_EDITOR_ADD_LABEL);
- addButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent event) {
- Set<Entry<String, Control>> entrySet = controls.entrySet();
- Iterator<Map.Entry<String, Control>> iterator = entrySet.iterator();
- List<Map<String, Object>> aList = new ArrayList<Map<String,Object>>();
- while (iterator.hasNext()) {
- Map.Entry<String, Control> entry = iterator.next();
- if (entry.getValue() instanceof Text) {
- Text textField = (Text) entry.getValue();
- Method method = (Method) textField.getData();
- if (textField.getText().trim().length() > 0) {
- if (componentType.isAnnotation()) {
- Map<String, Object> memberValuePairs = new HashMap<String, Object>();
- memberValuePairs.put(method.getName(), textField.getText());
- aList.add(memberValuePairs);
- } else {
- updatedValues.add(textField.getText());
- }
- }
+ IMethod[] methods = componentType.getMethods();
+ for (IMethod method : methods) {
+ Label label = new Label(typeComposite, SWT.NONE);
+ label.setText(method.getElementName() + ":"); //$NON-NLS-1$
+ createEntryFields(method, typeComposite);
}
- if (entry.getValue() instanceof Button) {
- Button button = (Button) entry.getValue();
- Method method = (Method) button.getData();
- if (componentType.isAnnotation()) {
- Map<String, Object> memberValuePairs = new HashMap<String, Object>();
- memberValuePairs.put(method.getName(), button.getSelection());
- aList.add(memberValuePairs);
- } else {
- updatedValues.add(button.getSelection());
- }
- }
-
- }
- if (aList.size() > 0) {
- updatedValues.add(aList);
- }
- arrayValuesTableViewer.refresh();
- }
- });
- gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
- addButton.setLayoutData(gridData);
-
- removeButton = new Button(buttonComposite, SWT.PUSH);
- removeButton.setText(JAXWSUIMessages.ANNOTATION_ARRAY_CELL_EDITOR_REMOVE_LABEL);
- removeButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent event) {
- ISelection selection = arrayValuesTableViewer.getSelection();
- if (selection != null && !selection.isEmpty()) {
- int index = arrayValuesTable.getSelectionIndex();
- updatedValues.remove(index);
- arrayValuesTableViewer.refresh();
+ } else {
+ Label label = new Label(typeComposite, SWT.NONE);
+ label.setText(Signature.getSimpleName(Signature.toString(method.getReturnType())));
+ createEntryFields(method, typeComposite);
}
}
- });
- gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
- removeButton.setLayoutData(gridData);
- upButton = new Button(buttonComposite, SWT.PUSH);
- upButton.setText(JAXWSUIMessages.ANNOTATION_ARRAY_CELL_EDITOR_UP_LABEL);
- upButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- moveSelectedElememtUp(getSelectedElement(), getTableViewer());
- }
- });
+ Composite buttonComposite = new Composite(mainComposite, SWT.NONE);
+ gridLayout = new GridLayout(1, false);
+ buttonComposite.setLayout(gridLayout);
- gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
- upButton.setLayoutData(gridData);
-
- downButton = new Button(buttonComposite, SWT.PUSH);
- downButton.setText(JAXWSUIMessages.ANNOTATION_ARRAY_CELL_EDITOR_DOWN_LABEL);
- downButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- moveSelectedElememtDown(getSelectedElement(), getTableViewer());
- }
- });
- gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
- downButton.setLayoutData(gridData);
-
- Composite valuesComposite = new Composite(mainComposite, SWT.NONE);
- gridLayout = new GridLayout(1, false);
- valuesComposite.setLayout(gridLayout);
- gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
- gridData.widthHint = 200;
- valuesComposite.setLayoutData(gridData);
-
- Label valuesLabel = new Label(valuesComposite, SWT.NONE);
- valuesLabel.setText(method.getName() + ":"); //$NON-NLS-1$
-
- arrayValuesTableViewer = new TableViewer(valuesComposite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL
- | SWT.H_SCROLL);
- arrayValuesTableViewer.setLabelProvider(new LabelProvider() {
- @Override
- public String getText(Object element) {
- if (element instanceof List<?>) {
- String annotationName = method.getReturnType().getComponentType().getSimpleName();
- annotationName += "("; //$NON-NLS-1$
- List<Map<String, Object>> valuesList = (List<Map<String, Object>>)element;
- Iterator<Map<String, Object>> valuesIterator = valuesList.iterator();
- while (valuesIterator.hasNext()) {
- Map<String, Object> valuesMap = valuesIterator.next();
- Set<Entry<String, Object>> entrySet = valuesMap.entrySet();
- Iterator<Map.Entry<String, Object>> iterator = entrySet.iterator();
+ addButton = new Button(buttonComposite, SWT.PUSH);
+ addButton.setText(JAXWSUIMessages.ANNOTATION_ARRAY_CELL_EDITOR_ADD_LABEL);
+ addButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ try {
+ Set<Entry<String, Control>> entrySet = controls.entrySet();
+ Iterator<Map.Entry<String, Control>> iterator = entrySet.iterator();
+ List<Map<String, Object>> aList = new ArrayList<Map<String,Object>>();
while (iterator.hasNext()) {
- Map.Entry<String, Object> entry = iterator.next();
- Object value = entry.getValue();
- boolean isString = value instanceof String && !value.toString().
- endsWith(".class"); //$NON-NLS-1$
- if (isString) {
- annotationName += entry.getKey() + "=\"" + value + "\""; //$NON-NLS-1$ //$NON-NLS-2$
- } else {
- annotationName += entry.getKey() + "=" + value; //$NON-NLS-1$
+ Map.Entry<String, Control> entry = iterator.next();
+ if (entry.getValue() instanceof Text) {
+ Text textField = (Text) entry.getValue();
+ IMethod methodAA = (IMethod) textField.getData();
+ if (textField.getText().trim().length() > 0) {
+ if (componentType != null && componentType.isAnnotation()) {
+ Map<String, Object> memberValuePairs = new HashMap<String, Object>();
+ memberValuePairs.put(methodAA.getElementName(), textField.getText());
+ aList.add(memberValuePairs);
+ } else {
+ updatedValues.add(textField.getText());
+ }
+ }
+ }
+ if (entry.getValue() instanceof Button) {
+ Button button = (Button) entry.getValue();
+ IMethod methodVV = (IMethod) button.getData();
+ if (componentType != null && componentType.isAnnotation()) {
+ Map<String, Object> memberValuePairs = new HashMap<String, Object>();
+ memberValuePairs.put(methodVV.getElementName(), button.getSelection());
+ aList.add(memberValuePairs);
+ } else {
+ updatedValues.add(button.getSelection());
+ }
}
}
- if (valuesIterator.hasNext()) {
- annotationName += ", "; //$NON-NLS-1$
+ if (aList.size() > 0) {
+ updatedValues.add(aList);
}
+ arrayValuesTableViewer.refresh();
+ } catch (JavaModelException jme) {
+ JAXWSUIPlugin.log(jme.getStatus());
}
- return annotationName += ")"; //$NON-NLS-1$
}
- return element.toString();
- }
+ });
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
+ addButton.setLayoutData(gridData);
- @Override
- public Image getImage(Object element) {
- Class<?> returnType = method.getReturnType();
- if (returnType.getComponentType().isAnnotation()) {
- return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_ANNOTATION);
- } if (returnType.equals(Class.class)) {
- return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_CLASS);
- } else {
- return PlatformUI.getWorkbench().getSharedImages().getImage(
- org.eclipse.ui.ISharedImages.IMG_OBJ_FILE);
+ removeButton = new Button(buttonComposite, SWT.PUSH);
+ removeButton.setText(JAXWSUIMessages.ANNOTATION_ARRAY_CELL_EDITOR_REMOVE_LABEL);
+ removeButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ ISelection selection = arrayValuesTableViewer.getSelection();
+ if (selection != null && !selection.isEmpty()) {
+ int index = arrayValuesTable.getSelectionIndex();
+ updatedValues.remove(index);
+ arrayValuesTableViewer.refresh();
+ }
}
- }
- });
+ });
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
+ removeButton.setLayoutData(gridData);
- arrayValuesTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- int index = arrayValuesTable.getSelectionIndex();
- int itemCount = arrayValuesTable.getItemCount();
+ upButton = new Button(buttonComposite, SWT.PUSH);
+ upButton.setText(JAXWSUIMessages.ANNOTATION_ARRAY_CELL_EDITOR_UP_LABEL);
+ upButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ moveSelectedElememtUp(getSelectedElement(), getTableViewer());
+ }
+ });
- if (index == 0 && itemCount <= 1) {
- upButton.setEnabled(false);
- downButton.setEnabled(false);
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
+ upButton.setLayoutData(gridData);
+
+ downButton = new Button(buttonComposite, SWT.PUSH);
+ downButton.setText(JAXWSUIMessages.ANNOTATION_ARRAY_CELL_EDITOR_DOWN_LABEL);
+ downButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ moveSelectedElememtDown(getSelectedElement(), getTableViewer());
+ }
+ });
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
+ downButton.setLayoutData(gridData);
+
+ Composite valuesComposite = new Composite(mainComposite, SWT.NONE);
+ gridLayout = new GridLayout(1, false);
+ valuesComposite.setLayout(gridLayout);
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.widthHint = 200;
+ valuesComposite.setLayoutData(gridData);
+
+ Label valuesLabel = new Label(valuesComposite, SWT.NONE);
+ valuesLabel.setText(method.getElementName() + ":"); //$NON-NLS-1$
+
+ arrayValuesTableViewer = new TableViewer(valuesComposite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
+ arrayValuesTableViewer.setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ if (element instanceof List<?>) {
+ String annotationName = componentType.getElementName();
+ annotationName += "("; //$NON-NLS-1$
+ @SuppressWarnings("unchecked")
+ List<Map<String, Object>> valuesList = (List<Map<String, Object>>) element;
+ Iterator<Map<String, Object>> valuesIterator = valuesList.iterator();
+ while (valuesIterator.hasNext()) {
+ Map<String, Object> valuesMap = valuesIterator.next();
+ Set<Entry<String, Object>> entrySet = valuesMap.entrySet();
+ Iterator<Map.Entry<String, Object>> iterator = entrySet.iterator();
+ while (iterator.hasNext()) {
+ Map.Entry<String, Object> entry = iterator.next();
+ Object value = entry.getValue();
+ boolean isString = value instanceof String && !value.toString().endsWith(".class"); //$NON-NLS-1$
+ if (isString) {
+ annotationName += entry.getKey() + "=\"" + value + "\""; //$NON-NLS-1$ //$NON-NLS-2$
+ } else {
+ annotationName += entry.getKey() + "=" + value; //$NON-NLS-1$
+ }
+ }
+ if (valuesIterator.hasNext()) {
+ annotationName += ", "; //$NON-NLS-1$
+ }
+ }
+ return annotationName += ")"; //$NON-NLS-1$
+ }
+ return element.toString();
}
- if (index == 0 && itemCount > 1) {
- upButton.setEnabled(false);
- downButton.setEnabled(true);
+ @Override
+ public Image getImage(Object element) {
+ try {
+ if (componentType != null && componentType.isAnnotation()) {
+ return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_ANNOTATION);
+ } else if (SignatureUtils.isClass(method.getReturnType())) {
+ return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_CLASS);
+ } else {
+ return PlatformUI.getWorkbench().getSharedImages().getImage(
+ org.eclipse.ui.ISharedImages.IMG_OBJ_FILE);
+ }
+ } catch (JavaModelException jme) {
+ JAXWSUIPlugin.log(jme.getStatus());
+ }
+ return null;
}
+ });
- if (index > 0 && index < itemCount - 1) {
- upButton.setEnabled(true);
- downButton.setEnabled(true);
+ arrayValuesTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ int index = arrayValuesTable.getSelectionIndex();
+ int itemCount = arrayValuesTable.getItemCount();
+
+ if (index == 0 && itemCount <= 1) {
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ }
+
+ if (index == 0 && itemCount > 1) {
+ upButton.setEnabled(false);
+ downButton.setEnabled(true);
+ }
+
+ if (index > 0 && index < itemCount - 1) {
+ upButton.setEnabled(true);
+ downButton.setEnabled(true);
+ }
+
+ if (index > 0 && index == itemCount - 1) {
+ upButton.setEnabled(true);
+ downButton.setEnabled(false);
+ }
+
+ if (index != -1) {
+ removeButton.setEnabled(true);
+ } else {
+ removeButton.setEnabled(false);
+ }
}
+ });
- if (index > 0 && index == itemCount - 1) {
- upButton.setEnabled(true);
- downButton.setEnabled(false);
- }
+ arrayValuesTableViewer.setContentProvider(new ArrayValuesContentProvider());
- if (index != -1) {
- removeButton.setEnabled(true);
- } else {
- removeButton.setEnabled(false);
- }
- }
- });
+ arrayValuesTable = arrayValuesTableViewer.getTable();
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ arrayValuesTable.setLayoutData(gridData);
- arrayValuesTableViewer.setContentProvider(new ArrayValuesContentProvider());
+ arrayValuesTableViewer.setInput(values);
- arrayValuesTable = arrayValuesTableViewer.getTable();
- gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
- arrayValuesTable.setLayoutData(gridData);
-
- arrayValuesTableViewer.setInput(values);
-
- upButton.setEnabled(false);
- downButton.setEnabled(false);
- removeButton.setEnabled(false);
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ removeButton.setEnabled(false);
+ } catch (JavaModelException jme) {
+ JAXWSUIPlugin.log(jme.getStatus());
+ }
return mainComposite;
}
- public void createEntryFields(Method method, Composite typeComposite) {
+ private IType getComponentType(IMethod method) throws JavaModelException {
+ String returnType = method.getReturnType();
+ if (SignatureUtils.isArray(returnType)) {
+ String elementType = Signature.getElementType(returnType);
+ IType declaringType = method.getDeclaringType();
+ IJavaProject javaProject = declaringType.getJavaProject();
+ if (javaProject != null) {
+ return javaProject.findType(Signature.toString(elementType));
+ }
+ }
+ return null;
+ }
+
+ private void createEntryFields(IMethod method, Composite typeComposite) throws JavaModelException {
//TODO Handle ENUMS
- Class<?> returnType = method.getReturnType();
- Object defaultValue = method.getDefaultValue();
- GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ String returnType = method.getReturnType();
+ IMemberValuePair defaultValue = method.getDefaultValue();
+ GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
//String or String[]
- if (returnType.equals(String.class) || returnType.isArray() && returnType.getComponentType().equals(String.class)) {
+ if (SignatureUtils.isString(returnType) || SignatureUtils.isArray(returnType) && SignatureUtils.isString(Signature.getElementType(returnType))) {
Text text = new Text(typeComposite, SWT.BORDER);
text.setData(method);
gridData.horizontalSpan = 2;
text.setLayoutData(gridData);
if (defaultValue != null) {
- if (defaultValue instanceof String[] && ((String[]) defaultValue).length == 1) {
- String[] values = (String[]) defaultValue;
- text.setText(values[0]);
+ Object value = defaultValue.getValue();
+ if (value instanceof Object[]) {
+ Object[] values = (Object[]) value;
+ if (values.length == 1) {
+ text.setText(values[0].toString());
+ }
+ } else if (value instanceof String[]) {
+ String[] values = (String[]) value;
+ if (values.length == 1) {
+ text.setText(values[0]);
+ }
} else {
- text.setText(defaultValue.toString().trim());
+ text.setText(value.toString().trim());
}
}
- controls.put(method.getName(), text);
+ controls.put(method.getElementName(), text);
}
//Class or Class[]
- if (returnType.equals(Class.class) || returnType.isArray() && returnType.getComponentType().equals(Class.class)) {
+ if (SignatureUtils.isClass(returnType) || SignatureUtils.isArray(returnType) && SignatureUtils.isClass(Signature.getElementType(returnType))) {
final Text text = new Text(typeComposite, SWT.BORDER);
text.setData(method);
- gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
text.setLayoutData(gridData);
- if (defaultValue != null) {
- Class<?> classValue = (Class<?>)defaultValue;
- text.setText(classValue.getCanonicalName() + ".class"); //$NON-NLS-1$
+ if (defaultValue != null && defaultValue.getValueKind() == IMemberValuePair.K_CLASS) {
+ Object value = defaultValue.getValue();
+ text.setText(value + ".class"); //$NON-NLS-1$
}
Button browseClassButton = new Button(typeComposite, SWT.PUSH);
browseClassButton.setText(getBrowseButtonLabel());
@@ -462,19 +498,19 @@
}
});
browse_button_count++;
- controls.put(method.getName(), text);
+ controls.put(method.getElementName(), text);
}
//Boolean
- if (returnType.equals(Boolean.TYPE)) {
+ if (SignatureUtils.isBoolean(returnType)) {
Button checkbox = new Button(typeComposite, SWT.CHECK);
checkbox.setData(method);
gridData.horizontalSpan = 2;
checkbox.setLayoutData(gridData);
if (defaultValue != null) {
- checkbox.setSelection((Boolean)defaultValue);
+ checkbox.setSelection((Boolean) defaultValue.getValue());
}
- controls.put(method.getName(), checkbox);
+ controls.put(method.getElementName(), checkbox);
}
}
@@ -497,7 +533,7 @@
}
}
- public Object getSelectedElement() {
+ private Object getSelectedElement() {
IStructuredSelection selection= (IStructuredSelection) arrayValuesTableViewer.getSelection();
return selection.getFirstElement();
}
@@ -506,7 +542,7 @@
return arrayValuesTableViewer;
}
- public void moveSelectedElememtUp(Object selected, TableViewer tableViewer) {
+ private void moveSelectedElememtUp(Object selected, TableViewer tableViewer) {
int selectionIndex = tableViewer.getTable().getSelectionIndex();
if (selectionIndex > 0) {
updatedValues.remove(selected);
@@ -518,7 +554,7 @@
}
}
- public void moveSelectedElememtDown(Object selected, TableViewer tableViewer) {
+ private void moveSelectedElememtDown(Object selected, TableViewer tableViewer) {
int selectionIndex = tableViewer.getTable().getSelectionIndex();
int itemCount = tableViewer.getTable().getItemCount();
if (selectionIndex < itemCount - 1) {
@@ -547,7 +583,7 @@
}
}
- public SelectionDialog getClassSelectionDialog() {
+ private SelectionDialog getClassSelectionDialog() {
try {
return JavaUI.createTypeDialog(getShell(), PlatformUI.getWorkbench().getProgressService(),
SearchEngine.createWorkspaceScope(), IJavaElementSearchConstants.CONSIDER_CLASSES,
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsColumnLabelProvider.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsColumnLabelProvider.java
index c75726a..9b9019f 100755
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsColumnLabelProvider.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsColumnLabelProvider.java
@@ -10,8 +10,8 @@
*******************************************************************************/
package org.eclipse.jst.ws.internal.jaxws.ui.views;
-import java.lang.reflect.Method;
-
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.ui.ISharedImages;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.viewers.ColumnLabelProvider;
@@ -22,22 +22,22 @@
@Override
public String getText(Object element) {
- if (element instanceof Class) {
- return ((Class<?>)element).getName();
+ if (element instanceof IType) {
+ return ((IType) element).getFullyQualifiedName();
}
- if (element instanceof Method) {
- return ((Method)element).getName();
+ if (element instanceof IMethod) {
+ return ((IMethod) element).getElementName();
}
return ""; //$NON-NLS-1$
}
@Override
public Image getImage(Object element) {
- if (element instanceof Class) {
+ if (element instanceof IType) {
return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_ANNOTATION);
}
- if (element instanceof Method) {
+ if (element instanceof IMethod) {
return PlatformUI.getWorkbench().getSharedImages().getImage(
org.eclipse.ui.ISharedImages.IMG_OBJ_FILE);
}
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsValuesColumnLabelProvider.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsValuesColumnLabelProvider.java
index facea9c..437f270 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsValuesColumnLabelProvider.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsValuesColumnLabelProvider.java
@@ -10,11 +10,13 @@
*******************************************************************************/
package org.eclipse.jst.ws.internal.jaxws.ui.views;
-import java.lang.reflect.Method;
import java.util.List;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.dom.Annotation;
import org.eclipse.jdt.core.dom.ArrayInitializer;
import org.eclipse.jdt.core.dom.BooleanLiteral;
@@ -25,6 +27,7 @@
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jst.ws.annotations.core.utils.AnnotationUtils;
+import org.eclipse.jst.ws.internal.annotations.core.utils.SignatureUtils;
import org.eclipse.jst.ws.internal.jaxws.ui.JAXWSUIPlugin;
import org.eclipse.swt.graphics.Image;
@@ -43,13 +46,17 @@
@Override
public String getText(Object element) {
- if (element instanceof Method) {
- return getTextForMethod((Method)element);
+ if (element instanceof IMethod) {
+ try {
+ return getTextForMethod((IMethod) element);
+ } catch (JavaModelException jme) {
+ JAXWSUIPlugin.log(jme.getStatus());
+ }
}
return ""; //$NON-NLS-1$
}
- private String getTextForMethod(Method method) {
+ private String getTextForMethod(IMethod method) throws JavaModelException {
if (annotationTreeViewer.getInput() instanceof IJavaElement) {
IJavaElement javaElement = (IJavaElement) annotationTreeViewer.getInput();
if (javaElement.exists()) {
@@ -59,47 +66,51 @@
return ""; //$NON-NLS-1$
}
- private String getTextForMethod(Method method, IJavaElement annotatedElement) {
+ private String getTextForMethod(IMethod method, IJavaElement annotatedElement) throws JavaModelException {
List<Annotation> annotations = AnnotationUtils.getAnnotations(annotatedElement);
for (Annotation annotation : annotations) {
String annotationName = AnnotationUtils.getAnnotationName(annotation);
- Class<?> declaringClass = method.getDeclaringClass();
- if (annotationName.equals(declaringClass.getSimpleName())
- || annotationName.equals(declaringClass.getCanonicalName())) {
+ IType type = method.getDeclaringType();
+ if (type != null && annotationName.equals(type.getElementName())
+ || annotationName.equals(type.getFullyQualifiedName())) {
if (annotation.isNormalAnnotation()) {
NormalAnnotation normalAnnotation = (NormalAnnotation) annotation;
@SuppressWarnings("unchecked")
List<MemberValuePair> memberValuePairs = normalAnnotation.values();
for (MemberValuePair memberValuePair : memberValuePairs) {
- if (memberValuePair.getName().getIdentifier().equals(method.getName())) {
- return getTextForMethod(method.getReturnType(), memberValuePair.getValue());
+ if (memberValuePair.getName().getIdentifier().equals(method.getElementName())) {
+ return getTextForMethod(method, memberValuePair.getValue());
}
}
} else if (annotation.isSingleMemberAnnotation()) {
SingleMemberAnnotation singleMemberAnnotation = (SingleMemberAnnotation) annotation;
- return getTextForMethod(method.getReturnType(), singleMemberAnnotation.getValue());
+ return getTextForMethod(method, singleMemberAnnotation.getValue());
}
}
}
return ""; //$NON-NLS-1$
}
- private String getTextForMethod(Class<?> returnType, Expression expression) {
- if (returnType.equals(String.class)) {
+ private String getTextForMethod(IMethod method, Expression expression) throws JavaModelException {
+ String returnType = method.getReturnType();
+
+ if (SignatureUtils.isString(returnType) || SignatureUtils.isClass(returnType)) {
return expression.toString();
}
- if (returnType.equals(Class.class)) {
- return expression.toString() + ".class"; //$NON-NLS-1$
+ if (SignatureUtils.isEnum(method)) {
+ String enumValue = expression.toString();
+ return enumValue.substring(enumValue.lastIndexOf(".") + 1); //$NON-NLS-1$
}
- if (returnType.isPrimitive() && (returnType.equals(Byte.TYPE)
- || returnType.equals(Short.TYPE) || returnType.equals(Integer.TYPE)
- || returnType.equals(Long.TYPE) || returnType.equals(Float.TYPE)
- || returnType.equals(Double.TYPE))) {
+
+ if (SignatureUtils.isPrimitive(returnType) && (returnType.charAt(0) == Signature.C_BYTE
+ || returnType.charAt(0) == Signature.C_SHORT || returnType.charAt(0) == Signature.C_INT
+ || returnType.charAt(0) == Signature.C_LONG || returnType.charAt(0) == Signature.C_FLOAT
+ || returnType.charAt(0) == Signature.C_DOUBLE)) {
return expression.toString();
}
- if (returnType.isArray() && expression instanceof ArrayInitializer) {
+ if (SignatureUtils.isArray(returnType) && expression instanceof ArrayInitializer) {
ArrayInitializer arrayInitializer = (ArrayInitializer) expression;
if (arrayInitializer.expressions().size() > 0) {
return "[]{...}"; //$NON-NLS-1$
@@ -107,21 +118,17 @@
return "[]{}"; //$NON-NLS-1$
}
}
- if (returnType.isEnum()) {
- String enumValue = expression.toString();
- return enumValue.substring(enumValue.lastIndexOf(".") + 1); //$NON-NLS-1$
- }
return ""; //$NON-NLS-1$
}
@Override
public Image getImage(Object element) {
try {
- if (element instanceof Class) {
- return getImageForClass((Class<?>) element);
+ if (element instanceof IType) {
+ return getImageForClass((IType) element);
}
- if (element instanceof Method) {
- return getImageForMethod((Method) element);
+ if (element instanceof IMethod) {
+ return getImageForMethod((IMethod) element);
}
} catch (JavaModelException jme) {
JAXWSUIPlugin.log(jme.getStatus());
@@ -129,30 +136,30 @@
return null;
}
- private Image getImageForClass(Class<?> aClass) throws JavaModelException {
+ private Image getImageForClass(IType type) throws JavaModelException {
if (annotationTreeViewer.getInput() instanceof IJavaElement) {
IJavaElement javaElement = (IJavaElement) annotationTreeViewer.getInput();
if (javaElement.exists()) {
- return getImageForClass(aClass, javaElement);
+ return getImageForClass(type, javaElement);
}
}
return null;
}
- private Image getImageForClass(Class<?> aClass, IJavaElement javaElement) throws JavaModelException {
+ private Image getImageForClass(IType type, IJavaElement javaElement) throws JavaModelException {
List<Annotation> annotations = AnnotationUtils.getAnnotations(javaElement);
for (Annotation annotation : annotations) {
String annotationName = AnnotationUtils.getAnnotationName(annotation);
- if (annotationName.equals(aClass.getSimpleName()) ||
- annotationName.equals(aClass.getCanonicalName())) {
+ if (annotationName.equals(type.getElementName()) ||
+ annotationName.equals(type.getFullyQualifiedName())) {
return true_image;
}
}
return false_image;
}
- private Image getImageForMethod(Method method) throws JavaModelException {
- if (method.getReturnType().equals(Boolean.TYPE) && annotationTreeViewer.getInput() instanceof IJavaElement) {
+ private Image getImageForMethod(IMethod method) throws JavaModelException {
+ if (SignatureUtils.isBoolean(method.getReturnType()) && annotationTreeViewer.getInput() instanceof IJavaElement) {
IJavaElement javaElement = (IJavaElement) annotationTreeViewer.getInput();
if (javaElement.exists()) {
return getImageForMethod(method, javaElement);
@@ -161,19 +168,19 @@
return null;
}
- private Image getImageForMethod(Method method, IJavaElement javaElement) throws JavaModelException {
+ private Image getImageForMethod(IMethod method, IJavaElement javaElement) throws JavaModelException {
List<Annotation> annotations = AnnotationUtils.getAnnotations(javaElement);
for (Annotation annotation : annotations) {
String annotationName = AnnotationUtils.getAnnotationName(annotation);
- Class<?> declaringClass = method.getDeclaringClass();
- if (annotationName.equals(declaringClass.getSimpleName())
- || annotationName.equals(declaringClass.getCanonicalName())) {
+ IType declaringType = method.getDeclaringType();
+ if (declaringType != null && annotationName.equals(declaringType.getElementName())
+ || annotationName.equals(declaringType.getFullyQualifiedName())) {
if (annotation.isNormalAnnotation()) {
NormalAnnotation normalAnnotation = (NormalAnnotation) annotation;
@SuppressWarnings("unchecked")
List<MemberValuePair> memberValuePairs = normalAnnotation.values();
for (MemberValuePair memberValuePair : memberValuePairs) {
- if (memberValuePair.getName().getIdentifier().equals(method.getName())
+ if (memberValuePair.getName().getIdentifier().equals(method.getElementName())
&& memberValuePair.getValue() instanceof BooleanLiteral) {
if (((BooleanLiteral) memberValuePair.getValue()).booleanValue()) {
return true_image;
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsValuesEditingSupport.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsValuesEditingSupport.java
index 36931eb..21e27c4 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsValuesEditingSupport.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsValuesEditingSupport.java
@@ -10,7 +10,6 @@
*******************************************************************************/
package org.eclipse.jst.ws.internal.jaxws.ui.views;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
@@ -27,10 +26,13 @@
import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.ILocalVariable;
import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.Annotation;
@@ -53,6 +55,7 @@
import org.eclipse.jst.ws.annotations.core.AnnotationsManager;
import org.eclipse.jst.ws.annotations.core.initialization.IAnnotationAttributeInitializer;
import org.eclipse.jst.ws.annotations.core.utils.AnnotationUtils;
+import org.eclipse.jst.ws.internal.annotations.core.utils.SignatureUtils;
import org.eclipse.jst.ws.internal.jaxws.ui.JAXWSUIMessages;
import org.eclipse.jst.ws.internal.jaxws.ui.JAXWSUIPlugin;
import org.eclipse.ltk.core.refactoring.Change;
@@ -63,6 +66,7 @@
import org.eclipse.text.edits.MultiTextEdit;
public class AnnotationsValuesEditingSupport extends EditingSupport {
+
private AnnotationsView annotationsView;
private TreeViewer treeViewer;
@@ -85,97 +89,99 @@
@Override
protected boolean canEdit(Object element) {
- if (element instanceof Method) {
- Method method = (Method)element;
- return (Boolean) getValue(method.getDeclaringClass());
+ if (element instanceof IMethod) {
+ IMethod method = (IMethod) element;
+ return (Boolean) getValue(method.getDeclaringType());
}
return true;
}
@Override
protected CellEditor getCellEditor(Object element) {
- if (element instanceof Class) {
+ if (element instanceof IType) {
return checkboxCellEditor;
}
- if (element instanceof Method) {
- Method method = (Method) element;
- final Class<?> returnType = method.getReturnType();
- if (returnType.isEnum()) {
- Object[] enumConstants = returnType.getEnumConstants();
- String[] values = new String[enumConstants.length];
- for (int i = 0; i < enumConstants.length; i++) {
- values[i] = enumConstants[i].toString();
+ if (element instanceof IMethod) {
+ try {
+ IMethod method = (IMethod) element;
+
+ IType enumType = SignatureUtils.getEnumReturnType(method);
+ if (enumType != null) {
+ comboBoxCellEditor.setItems(SignatureUtils.getEnumConstantsNames(enumType));
+ return comboBoxCellEditor;
}
- comboBoxCellEditor.setItems(values);
- return comboBoxCellEditor;
- }
- if (returnType.equals(Boolean.TYPE)) {
- return checkboxCellEditor;
- }
- if (returnType.equals(Class.class)) {
- return classDialogCellEditor;
- }
+ final String returnType = method.getReturnType();
- if (returnType.isArray()) {
- annotationArrayCellEditor.setMethod(method);
- return annotationArrayCellEditor;
- }
- if (returnType.isPrimitive()) {
- textCellEditor.setValidator(new ICellEditorValidator() {
- public String isValid(Object value) {
- try {
- if (returnType.equals(Byte.TYPE)) {
- Byte.parseByte((String) value);
+ if (SignatureUtils.isBoolean(returnType)) {
+ return checkboxCellEditor;
+ }
+
+ if (SignatureUtils.isClass(returnType)) {
+ return classDialogCellEditor;
+ }
+
+ if (SignatureUtils.isArray(returnType)) {
+ annotationArrayCellEditor.setMethod(method);
+ return annotationArrayCellEditor;
+ }
+ if (SignatureUtils.isPrimitive(returnType)) {
+ textCellEditor.setValidator(new ICellEditorValidator() {
+ public String isValid(Object value) {
+ try {
+ if (returnType.charAt(0) == Signature.C_BYTE) {
+ Byte.parseByte((String) value);
+ }
+ if (returnType.charAt(0) == Signature.C_SHORT) {
+ Short.parseShort((String) value);
+ }
+ if (returnType.charAt(0) == Signature.C_INT) {
+ Integer.parseInt((String) value);
+ }
+ if (returnType.charAt(0) == Signature.C_LONG) {
+ Long.parseLong((String) value);
+ }
+ if (returnType.charAt(0) == Signature.C_FLOAT) {
+ Float.parseFloat((String) value);
+ }
+ if (returnType.charAt(0) == Signature.C_DOUBLE) {
+ Double.parseDouble((String) value);
+ }
+ } catch (NumberFormatException nfe) {
+ return JAXWSUIMessages.ANNOTATION_EDITING_SUPPORT_NOT_VALID_MESSAGE_PREFIX + value;
}
- if (returnType.equals(Short.TYPE)) {
- Short.parseShort((String) value);
- }
- if (returnType.equals(Integer.TYPE)) {
- Integer.parseInt((String) value);
- }
- if (returnType.equals(Long.TYPE)) {
- Long.parseLong((String) value);
- }
- if (returnType.equals(Float.TYPE)) {
- Float.parseFloat((String) value);
- }
- if (returnType.equals(Double.TYPE)) {
- Double.parseDouble((String) value);
- }
- } catch (NumberFormatException nfe) {
- return JAXWSUIMessages.ANNOTATION_EDITING_SUPPORT_NOT_VALID_MESSAGE_PREFIX
- + returnType.getSimpleName();
+ return null;
}
- return null;
- }
- });
+ });
+ return textCellEditor;
+ }
return textCellEditor;
+ } catch (JavaModelException jme) {
+ JAXWSUIPlugin.log(jme.getStatus());
}
- return textCellEditor;
}
return checkboxCellEditor;
}
@Override
protected Object getValue(Object element) {
- if (element instanceof Class) {
- return getValueForClass((Class<?>) element);
+ if (element instanceof IType) {
+ return getValueForClass((IType) element);
}
- if (element instanceof Method) {
- return getValueForMethod((Method) element);
+ if (element instanceof IMethod) {
+ return getValueForMethod((IMethod) element);
}
return null;
}
- private Object getValueForClass(Class<?> aClass) {
+ private Object getValueForClass(IType type) {
if (treeViewer.getInput() instanceof IAnnotatable) {
- return getValueForClass(aClass, (IAnnotatable) treeViewer.getInput());
+ return getValueForClass(type, (IAnnotatable) treeViewer.getInput());
}
return Boolean.FALSE;
}
- private Object getValueForClass(Class<?> aClass, IAnnotatable annotatedElement) {
+ private Object getValueForClass(IType type, IAnnotatable annotatedElement) {
if (annotatedElement instanceof ILocalVariable) {
ILocalVariable localVariable = getLocalVariable(annotatedElement);
if (localVariable != null) {
@@ -187,8 +193,8 @@
for (IAnnotation annotation : annotations) {
String annotationName = annotation.getElementName();
if (AnnotationUtils.isAnnotationPresent((IJavaElement)annotatedElement, annotationName)
- && (annotationName.equals(aClass.getSimpleName())
- || annotationName.equals(aClass.getCanonicalName()))) {
+ && (annotationName.equals(type.getElementName())
+ || annotationName.equals(type.getFullyQualifiedName()))) {
return Boolean.TRUE;
}
}
@@ -198,7 +204,7 @@
return Boolean.FALSE;
}
- private Object getValueForMethod(Method method) {
+ private Object getValueForMethod(IMethod method) {
Object value = null;
try {
if (treeViewer.getInput() instanceof IAnnotatable) {
@@ -210,50 +216,51 @@
return value;
}
- private Object getValueForMethod(Method method, IAnnotatable annotatedElement) throws JavaModelException {
+ private Object getValueForMethod(IMethod method, IAnnotatable annotatedElement) throws JavaModelException {
if (annotatedElement instanceof ILocalVariable) {
ILocalVariable localVariable = getLocalVariable(annotatedElement);
if (localVariable != null) {
annotatedElement = localVariable;
}
}
- Class<?> returnType = method.getReturnType();
+ String returnType = method.getReturnType();
IAnnotation[] annotations = annotatedElement.getAnnotations();
for (IAnnotation annotation : annotations) {
- Class<?> declaringClass = method.getDeclaringClass();
+ IType declaringType = method.getDeclaringType();
+
String annotationName = annotation.getElementName();
- if (annotationName.equals(declaringClass.getSimpleName())
- || annotationName.equals(declaringClass.getCanonicalName())) {
+ if (annotationName.equals(declaringType.getElementName())
+ || annotationName.equals(declaringType.getFullyQualifiedName())) {
IMemberValuePair[] memberValuePairs = annotation.getMemberValuePairs();
for (IMemberValuePair memberValuePair : memberValuePairs) {
- if (memberValuePair.getMemberName().equals(method.getName())) {
- if (returnType.equals(String.class)) {
+ if (memberValuePair.getMemberName().equals(method.getElementName())) {
+ if (SignatureUtils.isString(returnType)) {
return memberValuePair.getValue();
}
- if (returnType.isEnum()) {
+ IType enumType = SignatureUtils.getEnumReturnType(method);
+ if (enumType != null) {
String enumValue = memberValuePair.getValue().toString();
String literal = enumValue.substring(enumValue.lastIndexOf(".") + 1); //$NON-NLS-1$
- Object[] enumConstants = method.getReturnType().getEnumConstants();
+ String[] enumConstants = SignatureUtils.getEnumConstantsNames(enumType);
for (int i = 0; i < enumConstants.length; i++) {
- if (enumConstants[i].toString().equals(literal)) {
+ if (enumConstants[i].equals(literal)) {
return i;
}
}
}
-
- if (returnType.equals(Class.class)) {
+ if (SignatureUtils.isClass(returnType)) {
return memberValuePair.getValue();
}
- if (returnType.equals(Boolean.TYPE)) {
+ if (SignatureUtils.isBoolean(returnType)) {
return memberValuePair.getValue();
}
- if (returnType.isPrimitive()) {
+ if (SignatureUtils.isPrimitive(returnType)) {
return ""; //$NON-NLS-1$
}
- if (returnType.isArray()) {
+ if (SignatureUtils.isArray(returnType)) {
if (memberValuePair.getValueKind() == IMemberValuePair.K_CLASS) {
Object[] arrayValues = (Object[])memberValuePair.getValue();
for (int i = 0; i < arrayValues.length; i++) {
@@ -266,28 +273,35 @@
}
}
}
- return getDefaultValueForMethod(returnType);
+ return getDefaultValueForMethod(method);
}
}
return null;
}
- private Object getDefaultValueForMethod(Class<?> returnType) {
- if (returnType.equals(String.class)) {
+ private Object getDefaultValueForMethod(IMethod method) throws JavaModelException {
+ String returnType = method.getReturnType();
+
+ if (SignatureUtils.isString(returnType)) {
return ""; //$NON-NLS-1$
}
- if (returnType.equals(Boolean.TYPE)) {
+
+ if (SignatureUtils.isBoolean(returnType)) {
return Boolean.FALSE;
}
- if (returnType.isEnum()) {
+
+ if (SignatureUtils.isEnum(method)) {
return -1;
}
- if (returnType.isPrimitive()) {
+
+ if (SignatureUtils.isPrimitive(returnType)) {
return ""; //$NON-NLS-1$
}
- if (returnType.isArray()) {
+
+ if (SignatureUtils.isArray(returnType)) {
return new Object[] {};
}
+
return null;
}
@@ -310,41 +324,34 @@
}
try {
- if (element instanceof Class && ((Class<?>) element).isAnnotation()) {
- @SuppressWarnings("unchecked")
- Class<? extends java.lang.annotation.Annotation> annotationClass =
- (Class<? extends java.lang.annotation.Annotation>) element;
- if (annotationClass != null) {
- setValueForClass(annotationClass, (Boolean) value);
- }
+ if (element instanceof IType && ((IType) element).isAnnotation()) {
+ setValueForClass((IType) element, (Boolean) value);
}
- if (element instanceof Method) {
- setValueForMethod((Method) element, value);
+
+ if (element instanceof IMethod) {
+ setValueForMethod((IMethod) element, value);
}
} catch (CoreException ce) {
JAXWSUIPlugin.log(ce.getStatus());
}
}
- private void setValueForClass(Class<? extends java.lang.annotation.Annotation> annotationClass,
- Boolean annotate) throws CoreException {
+ private void setValueForClass(IType type, Boolean annotate) throws CoreException {
Object viewerInput = treeViewer.getInput();
IAnnotationAttributeInitializer annotationAttributeInitializer =
- AnnotationsManager.getAnnotationDefinitionForClass(annotationClass).getAnnotationAttributeInitializer();
+ AnnotationsManager.getAnnotationDefinitionForClass(type.getFullyQualifiedName()).getAnnotationAttributeInitializer();
if (viewerInput instanceof IJavaElement) {
- setValueForClass(annotationClass, annotate, (IJavaElement) viewerInput, annotationAttributeInitializer);
+ setValueForClass(type, annotate, (IJavaElement) viewerInput, annotationAttributeInitializer);
}
}
- private Annotation getAnnotation(AST ast, Class<? extends java.lang.annotation.Annotation> annotationClass,
- List<MemberValuePair> memberValuePairs) {
-
+ private Annotation getAnnotation(AST ast, IType type, List<MemberValuePair> memberValuePairs) throws JavaModelException {
Annotation annotation = null;
- int numberOfDeclaredMethods = annotationClass.getDeclaredMethods().length;
+ int numberOfDeclaredMethods = type.getMethods().length;
if (numberOfDeclaredMethods == 0) {
- annotation = AnnotationsCore.createMarkerAnnotation(ast, annotationClass.getSimpleName());
+ annotation = AnnotationsCore.createMarkerAnnotation(ast, type.getElementName());
} else if (numberOfDeclaredMethods == 1) {
Expression value = null;
if (memberValuePairs != null && memberValuePairs.size() == 1) {
@@ -354,28 +361,27 @@
}
}
if (value != null) {
- annotation = AnnotationsCore.createSingleMemberAnnotation(ast, annotationClass.getSimpleName(), value);
+ annotation = AnnotationsCore.createSingleMemberAnnotation(ast, type.getElementName(), value);
} else {
- annotation = AnnotationsCore.createNormalAnnotation(ast, annotationClass.getSimpleName(), memberValuePairs);
+ annotation = AnnotationsCore.createNormalAnnotation(ast, type.getElementName(), memberValuePairs);
}
} else if (numberOfDeclaredMethods > 1) {
- annotation = AnnotationsCore.createNormalAnnotation(ast, annotationClass.getSimpleName(), memberValuePairs);
+ annotation = AnnotationsCore.createNormalAnnotation(ast, type.getElementName(), memberValuePairs);
}
return annotation;
}
- private void setValueForClass(Class<? extends java.lang.annotation.Annotation> annotationClass,
- Boolean annotate, IJavaElement javaElement, IAnnotationAttributeInitializer annotationAttributeInitializer)
- throws CoreException {
+ private void setValueForClass(IType type, Boolean annotate, IJavaElement javaElement,
+ IAnnotationAttributeInitializer annotationAttributeInitializer) throws CoreException {
ICompilationUnit source = AnnotationUtils.getCompilationUnitFromJavaElement(javaElement);
CompilationUnit compilationUnit = SharedASTProvider.getAST(source, SharedASTProvider.WAIT_YES, null);
AST ast = compilationUnit.getAST();
List<MemberValuePair> memberValuePairs = getMemberValuePairs(annotationAttributeInitializer, javaElement,
- ast, annotationClass);
+ ast, type);
- Annotation annotation = getAnnotation(ast, annotationClass, memberValuePairs);
+ Annotation annotation = getAnnotation(ast, type, memberValuePairs);
TextFileChange change = new TextFileChange("Add/Remove Annotation", (IFile) source.getResource()); //$NON-NLS-1$
MultiTextEdit multiTextEdit = new MultiTextEdit();
@@ -387,7 +393,7 @@
|| javaElement.getElementType() == IJavaElement.FIELD
|| javaElement.getElementType() == IJavaElement.METHOD
|| javaElement.getElementType() == IJavaElement.LOCAL_VARIABLE) {
- change.addEdit(AnnotationUtils.createAddImportTextEdit(javaElement, annotationClass.getCanonicalName()));
+ change.addEdit(AnnotationUtils.createAddImportTextEdit(javaElement, type.getFullyQualifiedName()));
change.addEdit(AnnotationUtils.createAddAnnotationTextEdit(javaElement, annotation));
}
} else {
@@ -396,25 +402,37 @@
|| javaElement.getElementType() == IJavaElement.FIELD
|| javaElement.getElementType() == IJavaElement.METHOD
|| javaElement.getElementType() == IJavaElement.LOCAL_VARIABLE) {
- change.addEdit(AnnotationUtils.createRemoveImportTextEdit(javaElement, annotationClass.getCanonicalName()));
+ change.addEdit(AnnotationUtils.createRemoveImportTextEdit(javaElement, type.getFullyQualifiedName()));
change.addEdit(AnnotationUtils.createRemoveAnnotationTextEdit(javaElement, annotation));
}
}
executeChange(new NullProgressMonitor(), change);
}
- private List<MemberValuePair> getMemberValuePairs(
- IAnnotationAttributeInitializer annotationAttributeInitializer, IJavaElement javaElement, AST ast,
- Class<?extends java.lang.annotation.Annotation> annotationClass) {
+ private List<MemberValuePair> getMemberValuePairs(IAnnotationAttributeInitializer annotationAttributeInitializer,
+ IJavaElement javaElement, AST ast, IType type) {
if (annotationAttributeInitializer != null) {
- return annotationAttributeInitializer.getMemberValuePairs(javaElement, ast, annotationClass);
+ List<MemberValuePair> memberValuePairs = annotationAttributeInitializer.getMemberValuePairs(javaElement, ast, type);
+ if (memberValuePairs.size() > 0) {
+ return memberValuePairs;
+ } else {
+ return annotationAttributeInitializer.getMemberValuePairs(javaElement, ast,
+ AnnotationsManager.getAnnotationDefinitionForType(type).getAnnotationClass());
+ }
}
return Collections.emptyList();
}
-
- private void setValueForMethod(Method method, Object value) throws CoreException {
- if (((Boolean) getValue(method.getDeclaringClass())).booleanValue()) {
+ private void setValueForMethod(IMethod method, Object value) throws CoreException {
+ if (value instanceof String) {
+ Object currentValue = getValue(method);
+ if (currentValue != null && currentValue instanceof String) {
+ if (((String) value).equals(currentValue)) {
+ return;
+ }
+ }
+ }
+ if (((Boolean) getValue(method.getDeclaringType())).booleanValue()) {
Object viewerInput = treeViewer.getInput();
if (viewerInput instanceof IAnnotatable) {
setValueForMethod(method, value, (IJavaElement) viewerInput);
@@ -422,7 +440,7 @@
}
}
- private void setValueForMethod(Method method, Object value, IJavaElement javaElement) throws CoreException {
+ private void setValueForMethod(IMethod method, Object value, IJavaElement javaElement) throws CoreException {
ICompilationUnit source = AnnotationUtils.getCompilationUnitFromJavaElement(javaElement);
CompilationUnit compilationUnit = SharedASTProvider.getAST(source, SharedASTProvider.WAIT_YES, null);
AST ast = compilationUnit.getAST();
@@ -435,14 +453,14 @@
for (Annotation annotation : annotations) {
if (annotation instanceof NormalAnnotation) {
NormalAnnotation normalAnnotation = (NormalAnnotation) annotation;
- Class<?> declaringClass = method.getDeclaringClass();
+ IType declaringType = method.getDeclaringType();
String annotationName = normalAnnotation.getTypeName().getFullyQualifiedName();
- if (annotationName.equals(declaringClass.getSimpleName()) || annotationName.equals(declaringClass.getCanonicalName())) {
+ if (annotationName.equals(declaringType.getElementName()) || annotationName.equals(declaringType.getFullyQualifiedName())) {
@SuppressWarnings("unchecked")
List<MemberValuePair> memberValuePairs = normalAnnotation.values();
boolean hasMemberValuePair = false;
for (MemberValuePair memberValuePair : memberValuePairs) {
- if (memberValuePair.getName().getIdentifier().equals(method.getName())) {
+ if (memberValuePair.getName().getIdentifier().equals(method.getElementName())) {
ASTNode memberValue = getMemberValuePairValue(ast, method, value);
if (memberValue != null) {
change.addEdit(AnnotationUtils.createUpdateMemberValuePairTextEdit(memberValuePair, memberValue));
@@ -461,9 +479,9 @@
}
} else if (annotation instanceof SingleMemberAnnotation) {
SingleMemberAnnotation singleMemberAnnotation = (SingleMemberAnnotation) annotation;
- Class<?> declaringClass = method.getDeclaringClass();
+ IType declaringType = method.getDeclaringType();
String annotationName = singleMemberAnnotation.getTypeName().getFullyQualifiedName();
- if (annotationName.equals(declaringClass.getSimpleName()) || annotationName.equals(declaringClass.getCanonicalName())) {
+ if (annotationName.equals(declaringType.getElementName()) || annotationName.equals(declaringType.getFullyQualifiedName())) {
MemberValuePair memberValuePair = getMemberValuePair(ast, method, value);
if (memberValuePair != null) {
change.addEdit(AnnotationUtils.createUpdateSingleMemberAnnotationTextEdit(singleMemberAnnotation, memberValuePair.getValue()));
@@ -477,76 +495,108 @@
executeChange(new NullProgressMonitor(), change);
}
- private ASTNode getMemberValuePairValue(AST ast, Method method, Object value) {
- Class<?> returnType = method.getReturnType();
- if (returnType.equals(String.class)) {
- return AnnotationsCore.createStringLiteral(ast, value.toString());
+ private MemberValuePair getMemberValuePair(AST ast, IMethod method, Object value) throws JavaModelException {
+ String returnType = method.getReturnType();
+ if (SignatureUtils.isString(returnType)) {
+ return AnnotationsCore.createStringMemberValuePair(ast, method.getElementName(), (String) value);
}
- if (returnType.equals(Boolean.TYPE)) {
- return AnnotationsCore.createBooleanLiteral(ast, ((Boolean) value).booleanValue());
+ if (SignatureUtils.isBoolean(returnType)) {
+ return AnnotationsCore.createBooleanMemberValuePair(ast, method.getElementName(), (Boolean) value);
}
- if (returnType.isPrimitive()
- && (returnType.equals(Byte.TYPE) || returnType.equals(Short.TYPE)
- || returnType.equals(Integer.TYPE) || returnType.equals(Long.TYPE)
- || returnType.equals(Float.TYPE) || returnType.equals(Double.TYPE))) {
- return AnnotationsCore.createNumberLiteral(ast, value.toString());
- }
- if (returnType.isArray()) {
- if (method.getReturnType().getComponentType().isAnnotation()) {
- return createArrayValueLiteral(ast, method, (Object[]) value);
- } else {
- return AnnotationsCore.createArrayValueLiteral(ast, (Object[]) value);
+
+ if (SignatureUtils.isPrimitive(returnType)) {
+ if (returnType.charAt(0) == Signature.C_BYTE
+ || returnType.charAt(0) == Signature.C_SHORT
+ || returnType.charAt(0) == Signature.C_INT
+ || returnType.charAt(0) == Signature.C_LONG
+ || returnType.charAt(0) == Signature.C_FLOAT
+ || returnType.charAt(0) == Signature.C_DOUBLE) {
+ return AnnotationsCore.createNumberMemberValuePair(ast, method.getElementName(), value.toString());
}
}
- if (returnType.equals(Class.class)) {
- return AnnotationsCore.createTypeLiteral(ast, value.toString());
+ if (SignatureUtils.isArray(returnType)) {
+ IType componentType = getComponentType(method);
+ if (componentType != null) {
+ if (componentType.isAnnotation()) {
+ return createArrayMemberValuePair(ast, method, (Object[]) value);
+ } else {
+ return AnnotationsCore.createArrayMemberValuePair(ast, method.getElementName(), (Object[]) value);
+ }
+ }
}
- if (returnType.isEnum()) {
+ if (SignatureUtils.isClass(returnType)) {
+ return AnnotationsCore.createTypeMemberValuePair(ast, method.getElementName(), value.toString());
+ }
+
+ IType enumType = SignatureUtils.getEnumReturnType(method);
+ if (enumType != null) {
int selected = ((Integer) value).intValue();
if (selected != -1) {
- return AnnotationsCore.createEnumLiteral(ast, method.getDeclaringClass().getCanonicalName(),
- method.getReturnType().getEnumConstants()[selected]);
+ if (enumType.isMember()) {
+ return AnnotationsCore.createEnumMemberValuePair(ast, enumType.getDeclaringType().getFullyQualifiedName(),
+ method.getElementName(), SignatureUtils.getEnumConstants(enumType)[selected]);
+ } else {
+ return AnnotationsCore.createEnumMemberValuePair(ast, enumType.getFullyQualifiedName(),
+ method.getElementName(), SignatureUtils.getEnumConstants(enumType)[selected]);
+ }
}
}
return null;
}
- private MemberValuePair getMemberValuePair(AST ast, Method method, Object value) {
- Class<?> returnType = method.getReturnType();
- if (returnType.equals(String.class)) {
- return AnnotationsCore.createStringMemberValuePair(ast, method.getName(), (String) value);
+ private ASTNode getMemberValuePairValue(AST ast, IMethod method, Object value) throws JavaModelException {
+ String returnType = method.getReturnType();
+ if (SignatureUtils.isString(returnType)) {
+ return AnnotationsCore.createStringLiteral(ast, value.toString());
}
- if (returnType.equals(Boolean.TYPE)) {
- return AnnotationsCore.createBooleanMemberValuePair(ast, method.getName(), (Boolean) value);
+
+ if (SignatureUtils.isBoolean(returnType)) {
+ return AnnotationsCore.createBooleanLiteral(ast, ((Boolean) value).booleanValue());
}
- if (returnType.isPrimitive()
- && (returnType.equals(Byte.TYPE) || returnType.equals(Short.TYPE)
- || returnType.equals(Integer.TYPE) || returnType.equals(Long.TYPE)
- || returnType.equals(Float.TYPE) || returnType.equals(Double.TYPE))) {
- return AnnotationsCore.createNumberMemberValuePair(ast, method.getName(), value.toString());
- }
- if (returnType.isArray()) {
- if (method.getReturnType().getComponentType().isAnnotation()) {
- return createArrayMemberValuePair(ast, method, (Object[]) value);
- } else {
- return AnnotationsCore.createArrayMemberValuePair(ast, method.getName(), (Object[]) value);
+
+ if (SignatureUtils.isPrimitive(returnType)) {
+ if (returnType.charAt(0) == Signature.C_BYTE
+ || returnType.charAt(0) == Signature.C_SHORT
+ || returnType.charAt(0) == Signature.C_INT
+ || returnType.charAt(0) == Signature.C_LONG
+ || returnType.charAt(0) == Signature.C_FLOAT
+ || returnType.charAt(0) == Signature.C_DOUBLE) {
+ return AnnotationsCore.createNumberLiteral(ast, value.toString());
}
}
- if (returnType.equals(Class.class)) {
- return AnnotationsCore.createTypeMemberValuePair(ast, method.getName(), value.toString());
+ if (SignatureUtils.isArray(returnType)) {
+ IType componentType = getComponentType(method);
+ if (componentType != null) {
+ if (componentType.isAnnotation()) {
+ return createArrayValueLiteral(ast, method, (Object[]) value);
+ } else {
+ return AnnotationsCore.createArrayValueLiteral(ast, (Object[]) value);
+ }
+ }
}
- if (returnType.isEnum()) {
+ if (SignatureUtils.isClass(returnType)) {
+ return AnnotationsCore.createTypeLiteral(ast, value.toString());
+ }
+
+
+ IType enumType = SignatureUtils.getEnumReturnType(method);
+ if (enumType != null) {
int selected = ((Integer) value).intValue();
if (selected != -1) {
- return AnnotationsCore.createEnumMemberValuePair(ast,
- method.getDeclaringClass().getCanonicalName(), method.getName(), method.getReturnType()
- .getEnumConstants()[selected]);
+ if (enumType.isMember()) {
+ return AnnotationsCore.createEnumLiteral(ast, enumType.getDeclaringType().getFullyQualifiedName(),
+ SignatureUtils.getEnumConstants(enumType)[selected]);
+ } else {
+ return AnnotationsCore.createEnumLiteral(ast, enumType.getFullyQualifiedName(),
+ SignatureUtils.getEnumConstants(enumType)[selected]);
+ }
}
}
+
return null;
}
@@ -578,65 +628,76 @@
annotationsView.refreshLabels();
}
- private MemberValuePair createArrayMemberValuePair(AST ast, Method method, Object[] values) {
- return AnnotationsCore.createMemberValuePair(ast, method.getName(), createArrayValueLiteral(ast,
+ private MemberValuePair createArrayMemberValuePair(AST ast, IMethod method, Object[] values) throws JavaModelException {
+ return AnnotationsCore.createMemberValuePair(ast, method.getElementName(), createArrayValueLiteral(ast,
method, values));
}
- @SuppressWarnings("unchecked")
- private ArrayInitializer createArrayValueLiteral(AST ast, Method method, Object[] values) {
+ private IType getComponentType(IMethod method) throws JavaModelException {
+ String returnType = method.getReturnType();
+ if (SignatureUtils.isArray(returnType)) {
+ String elementType = Signature.getElementType(returnType);
+ IType declaringType = method.getDeclaringType();
+ IJavaProject javaProject = declaringType.getJavaProject();
+ if (javaProject != null) {
+ return javaProject.findType(Signature.toString(elementType));
+ }
+ }
+ return null;
+ }
+
+ private ArrayInitializer createArrayValueLiteral(AST ast, IMethod method, Object[] values) throws JavaModelException {
ArrayInitializer arrayInitializer = ast.newArrayInitializer();
for (Object value : values) {
- if (value instanceof List) {
- Class<? extends java.lang.annotation.Annotation> annotationClass =
- (Class<? extends java.lang.annotation.Annotation>) method.getReturnType().getComponentType();
+ if (value instanceof List<?>) {
+ IType componentType = getComponentType(method);
+ if (componentType != null) {
- List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
-
- List<Map<String, Object>> valuesList = (List<Map<String, Object>>) value;
- Iterator<Map<String, Object>> valuesIterator = valuesList.iterator();
- while (valuesIterator.hasNext()) {
- Map<String, Object> annotationMap = valuesIterator.next();
- Set<Entry<String, Object>> entrySet = annotationMap.entrySet();
- Iterator<Map.Entry<String, Object>> iterator = entrySet.iterator();
- while (iterator.hasNext()) {
- Map.Entry<java.lang.String, Object> entry = iterator.next();
- String memberName = entry.getKey();
- try {
- Method annotationMethod = annotationClass.getMethod(memberName, new Class[0]);
- if (annotationMethod != null) {
- Object memberValue = entry.getValue();
- Class<?> returnType = annotationMethod.getReturnType();
- if (returnType.equals(String.class)) {
- memberValuePairs.add(AnnotationsCore.createStringMemberValuePair(ast, memberName,
- memberValue.toString()));
- }
- if (returnType.equals(Boolean.TYPE)) {
- memberValuePairs.add(AnnotationsCore.createBooleanMemberValuePair(ast, memberName,
- (Boolean) memberValue));
- }
- if (returnType.equals(Class.class)) {
- String className = memberValue.toString();
- if (className.endsWith(".class")) {
- className = className.substring(0, className.lastIndexOf("."));
+ List<MemberValuePair> memberValuePairs = new ArrayList<MemberValuePair>();
+ @SuppressWarnings("unchecked")
+ List<Map<String, Object>> valuesList = (List<Map<String, Object>>) value;
+ Iterator<Map<String, Object>> valuesIterator = valuesList.iterator();
+ while (valuesIterator.hasNext()) {
+ Map<String, Object> annotationMap = valuesIterator.next();
+ Set<Entry<String, Object>> entrySet = annotationMap.entrySet();
+ Iterator<Map.Entry<String, Object>> iterator = entrySet.iterator();
+ while (iterator.hasNext()) {
+ Map.Entry<java.lang.String, Object> entry = iterator.next();
+ String memberName = entry.getKey();
+ try {
+ IMethod annotationMethod = componentType.getMethod(memberName, new String[] {});
+ if (annotationMethod != null) {
+ Object memberValue = entry.getValue();
+ String returnType = annotationMethod.getReturnType();
+ if (SignatureUtils.isString(returnType)) {
+ memberValuePairs.add(AnnotationsCore.createStringMemberValuePair(ast, memberName,
+ memberValue.toString()));
}
- memberValuePairs.add(AnnotationsCore.createMemberValuePair(ast, memberName,
- AnnotationsCore.createTypeLiteral(ast, className)));
+ if (SignatureUtils.isBoolean(returnType)) {
+ memberValuePairs.add(AnnotationsCore.createBooleanMemberValuePair(ast, memberName,
+ (Boolean) memberValue));
+ }
+ if (SignatureUtils.isClass(returnType)) {
+ String className = memberValue.toString();
+ if (className.endsWith(".class")) {
+ className = className.substring(0, className.lastIndexOf("."));
+ }
+ memberValuePairs.add(AnnotationsCore.createMemberValuePair(ast, memberName,
+ AnnotationsCore.createTypeLiteral(ast, className)));
+ }
+ // if (returnType.isPrimitive()) {
+ // memberValuePairs.add(getNumberMemberValuePair(ast, memberName, memberValue));
+ // }
}
- // if (returnType.isPrimitive()) {
- // memberValuePairs.add(getNumberMemberValuePair(ast, memberName, memberValue));
- // }
- }
- } catch (SecurityException se) {
- AnnotationsCorePlugin.log(se);
- } catch (NoSuchMethodException nsme) {
- AnnotationsCorePlugin.log(nsme);
+ } catch (SecurityException se) {
+ AnnotationsCorePlugin.log(se);
+ }
}
}
+ arrayInitializer.expressions().add(AnnotationsCore.createNormalAnnotation(ast, componentType.getFullyQualifiedName(),
+ memberValuePairs));
}
- arrayInitializer.expressions().add(AnnotationsCore.createNormalAnnotation(ast, annotationClass.getCanonicalName(),
- memberValuePairs));
}
}
return arrayInitializer;
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsView.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsView.java
index 15b867c..520deee 100755
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsView.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsView.java
@@ -10,7 +10,6 @@
*******************************************************************************/
package org.eclipse.jst.ws.internal.jaxws.ui.views;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@@ -134,13 +133,12 @@
annotationTreeViewer.setComparator(new ViewerComparator() {
@Override
public int compare(Viewer viewer, Object obj1, Object obj2) {
- if (obj1 instanceof Class<?> && ((Class<?>) obj1).isAnnotation()
- && obj2 instanceof Class<?> && ((Class<?>) obj2).isAnnotation()) {
- return ((Class<? extends java.lang.annotation.Annotation>) obj1).getCanonicalName().compareTo(
- ((Class<? extends java.lang.annotation.Annotation>) obj2).getCanonicalName());
+ if (obj1 instanceof IType && obj2 instanceof IType) {
+ return ((IType) obj1).getFullyQualifiedName().compareTo(
+ ((IType) obj2).getFullyQualifiedName());
}
- if (obj1 instanceof Method && obj2 instanceof Method) {
- return ((Method)obj1).getName().compareTo(((Method)obj2).getName());
+ if (obj1 instanceof IMethod && obj2 instanceof IMethod) {
+ return ((IMethod) obj1).getElementName().compareTo(((IMethod) obj2).getElementName());
}
return super.compare(viewer, obj1, obj2);
}
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsViewCategoryFilter.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsViewCategoryFilter.java
index e51bd7b..2ce5ca4 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsViewCategoryFilter.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsViewCategoryFilter.java
@@ -10,10 +10,10 @@
*******************************************************************************/
package org.eclipse.jst.ws.internal.jaxws.ui.views;
-import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
@@ -38,9 +38,8 @@
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
- if (element instanceof Class && ((Class<?>) element).isAnnotation()) {
- AnnotationDefinition annotationDefinition = AnnotationsManager.
- getAnnotationDefinitionForClass((Class<? extends Annotation>) element);
+ if (element instanceof IType) {
+ AnnotationDefinition annotationDefinition = AnnotationsManager.getAnnotationDefinitionForType((IType) element);
if (annotationDefinition != null) {
return !categories.contains(annotationDefinition.getCategory());
}
@@ -77,5 +76,4 @@
IDialogSettings settings = JAXWSUIPlugin.getDefault().getDialogSettings();
settings.put(TAG_CATEGORY_NAME, categories.toArray(new String[categories.size()]));
}
-
}
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsViewContentProvider.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsViewContentProvider.java
index 5a22bee..39f4867 100755
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsViewContentProvider.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/AnnotationsViewContentProvider.java
@@ -11,43 +11,54 @@
package org.eclipse.jst.ws.internal.jaxws.ui.views;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jst.ws.annotations.core.AnnotationsManager;
+import org.eclipse.jst.ws.internal.jaxws.ui.JAXWSUIPlugin;
public class AnnotationsViewContentProvider implements ITreeContentProvider {
- public Object[] getChildren(Object parentElement) {
- if (parentElement instanceof Class) {
- return ((Class<?>)parentElement).getDeclaredMethods();
- }
- return new Object[] {};
- }
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof IType) {
+ try {
+ return ((IType) parentElement).getMethods();
+ } catch (JavaModelException jme) {
+ JAXWSUIPlugin.log(jme.getStatus());
+ }
+ }
+ return new Object[] {};
+ }
- public Object getParent(Object element) {
- return null;
- }
+ public Object getParent(Object element) {
+ return null;
+ }
- public boolean hasChildren(Object element) {
- if (element instanceof Class) {
- return ((Class<?>)element).getDeclaredMethods().length > 0;
- }
- return false;
- }
+ public boolean hasChildren(Object element) {
+ if (element instanceof IType) {
+ try {
+ return ((IType) element).getMethods().length > 0;
+ } catch (JavaModelException jme) {
+ JAXWSUIPlugin.log(jme.getStatus());
+ }
+ }
+ return false;
+ }
- public Object[] getElements(Object inputElement) {
- if (inputElement != null && inputElement instanceof IJavaElement && ((IJavaElement) inputElement).exists()) {
- IJavaElement javaElement = (IJavaElement) inputElement;
- return AnnotationsManager.getAnnotations(javaElement).toArray();
- }
- return new Object[] {};
- }
+ public Object[] getElements(Object inputElement) {
+ if (inputElement != null && inputElement instanceof IJavaElement && ((IJavaElement) inputElement).exists()) {
+ IJavaElement javaElement = (IJavaElement) inputElement;
+ return AnnotationsManager.getAnnotationTypes(javaElement).toArray();
+ }
+ return new Object[] {};
+ }
- public void dispose() {
+ public void dispose() {
- }
+ }
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
}
diff --git a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/ClassDialogCellEditor.java b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/ClassDialogCellEditor.java
index ebe786b..f1d0942 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/ClassDialogCellEditor.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.ui/src/org/eclipse/jst/ws/internal/jaxws/ui/views/ClassDialogCellEditor.java
@@ -56,7 +56,7 @@
@Override
protected void updateContents(Object value) {
- if (value != null) {
+ if (value != null && value.toString().trim().length() > 0) {
getDefaultLabel().setText(value.toString() + ".class"); //$NON-NLS-1$
} else {
getDefaultLabel().setText(""); //$NON-NLS-1$
diff --git a/tests/org.eclipse.jst.ws.jaxb.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.ws.jaxb.core.tests/META-INF/MANIFEST.MF
index 756510d..3ce1f59 100644
--- a/tests/org.eclipse.jst.ws.jaxb.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.jst.ws.jaxb.core.tests/META-INF/MANIFEST.MF
@@ -14,7 +14,7 @@
org.eclipse.jdt.launching;bundle-version="[3.4.0,4.0.0)",
org.eclipse.ltk.core.refactoring;bundle-version="[3.4.0,4.0.0)",
org.eclipse.ltk.ui.refactoring;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.2.0)",
org.eclipse.jdt.apt.core;bundle-version="[3.3.100,4.0.0)",
org.eclipse.text;bundle-version="[3.4.0,4.0.0)",
org.eclipse.jdt.ui;bundle-version="[3.4.0,4.0.0)"
diff --git a/tests/org.eclipse.jst.ws.jaxws.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.ws.jaxws.core.tests/META-INF/MANIFEST.MF
index fbe132a..504792c 100644
--- a/tests/org.eclipse.jst.ws.jaxws.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.jst.ws.jaxws.core.tests/META-INF/MANIFEST.MF
@@ -14,7 +14,7 @@
org.eclipse.jdt.launching;bundle-version="[3.4.0,4.0.0)",
org.eclipse.ltk.core.refactoring;bundle-version="[3.4.0,4.0.0)",
org.eclipse.ltk.ui.refactoring;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jst.ws.annotations.core;bundle-version="[1.0.0,1.2.0)",
org.eclipse.jdt.apt.core;bundle-version="[3.3.100,4.0.0)",
org.eclipse.text;bundle-version="[3.4.0,4.0.0)",
org.eclipse.jdt.ui;bundle-version="[3.4.0,4.0.0)"