Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ConversionDeclarationAnnotationElementAdapter.java')
-rw-r--r--common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ConversionDeclarationAnnotationElementAdapter.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ConversionDeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ConversionDeclarationAnnotationElementAdapter.java
new file mode 100644
index 0000000000..37d12076be
--- /dev/null
+++ b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ConversionDeclarationAnnotationElementAdapter.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 Oracle. 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:
+ * Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.jpt.common.core.internal.utility.jdt;
+
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter;
+import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter;
+import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter;
+import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration;
+import org.eclipse.jpt.utility.internal.StringTools;
+
+/**
+ * Wrap a declaration annotation element adapter that deals with AST
+ * expressions, converting them to/from various other objects.
+ *
+ * @param <T> the type of the object be passed to and returned by the adapter
+ */
+public class ConversionDeclarationAnnotationElementAdapter<T>
+ implements DeclarationAnnotationElementAdapter<T>
+{
+ /**
+ * The wrapped adapter that returns and takes AST expressions.
+ */
+ private final DeclarationAnnotationElementAdapter<Expression> adapter;
+
+ /**
+ * The converter that converts AST expressions to other objects
+ * (e.g. Strings).
+ */
+ private final ExpressionConverter<T> converter;
+
+
+ // ********** constructors **********
+
+ /**
+ * The default element name is <code>value</code>.
+ */
+ public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, ExpressionConverter<T> converter) {
+ this(new ExpressionDeclarationAnnotationElementAdapter<Expression>(annotationAdapter), converter);
+ }
+
+ public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, ExpressionConverter<T> converter) {
+ this(new ExpressionDeclarationAnnotationElementAdapter<Expression>(annotationAdapter, elementName), converter);
+ }
+
+ public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationElementAdapter<Expression> adapter, ExpressionConverter<T> converter) {
+ super();
+ this.adapter = adapter;
+ this.converter = converter;
+ }
+
+
+ // ********** DeclarationAnnotationElementAdapter implementation **********
+
+ public T getValue(ModifiedDeclaration declaration) {
+ Expression expression = this.adapter.getValue(declaration);
+ return this.converter.convert(expression);
+ }
+
+ public void setValue(T value, ModifiedDeclaration declaration) {
+ Expression expression;
+ try {
+ expression = this.converter.convert(value, declaration.getAst());
+ } catch (IllegalArgumentException ex) {
+ // if there is a problem converting the 'value' to an Expression we get this exception
+ return; // don't set the value if it is "illegal"
+ }
+ this.adapter.setValue(expression, declaration);
+ }
+
+ public Expression getExpression(ModifiedDeclaration declaration) {
+ return this.adapter.getExpression(declaration);
+ }
+
+ public ASTNode getAstNode(ModifiedDeclaration declaration) {
+ return this.adapter.getAstNode(declaration);
+ }
+
+ @Override
+ public String toString() {
+ return StringTools.buildToStringFor(this, this.adapter);
+ }
+
+
+ // ********** factory static methods **********
+
+ /**
+ * The default element name is <code>value</code>;
+ * the default expression converter expects string constant expressions.
+ */
+ public static ConversionDeclarationAnnotationElementAdapter<String> forStrings(DeclarationAnnotationAdapter annotationAdapter) {
+ return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, StringExpressionConverter.instance());
+ }
+
+ /**
+ * The default expression converter expects string constant expressions.
+ */
+ public static ConversionDeclarationAnnotationElementAdapter<String> forStrings(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
+ return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, StringExpressionConverter.instance());
+ }
+
+ /**
+ * The default element name is <code>value</code>;
+ * the default expression converter expects number constant expressions.
+ */
+ public static ConversionDeclarationAnnotationElementAdapter<Integer> forNumbers(DeclarationAnnotationAdapter annotationAdapter) {
+ return new ConversionDeclarationAnnotationElementAdapter<Integer>(annotationAdapter, NumberIntegerExpressionConverter.instance());
+ }
+
+ /**
+ * The default expression converter expects number constant expressions.
+ */
+ public static ConversionDeclarationAnnotationElementAdapter<Integer> forNumbers(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
+ return new ConversionDeclarationAnnotationElementAdapter<Integer>(annotationAdapter, elementName, NumberIntegerExpressionConverter.instance());
+ }
+
+ /**
+ * The default element name is <code>value</code>;
+ * the default expression converter expects boolean constant expressions.
+ */
+ public static ConversionDeclarationAnnotationElementAdapter<Boolean> forBooleans(DeclarationAnnotationAdapter annotationAdapter) {
+ return new ConversionDeclarationAnnotationElementAdapter<Boolean>(annotationAdapter, BooleanExpressionConverter.instance());
+ }
+
+ /**
+ * The default expression converter expects boolean constant expressions.
+ */
+ public static ConversionDeclarationAnnotationElementAdapter<Boolean> forBooleans(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
+ return new ConversionDeclarationAnnotationElementAdapter<Boolean>(annotationAdapter, elementName, BooleanExpressionConverter.instance());
+ }
+
+ /**
+ * The default element name is <code>value</code>;
+ * the default expression converter expects character constant expressions.
+ */
+ public static ConversionDeclarationAnnotationElementAdapter<String> forCharacters(DeclarationAnnotationAdapter annotationAdapter) {
+ return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, CharacterStringExpressionConverter.instance());
+ }
+
+ /**
+ * The default expression converter expects character constant expressions.
+ */
+ public static ConversionDeclarationAnnotationElementAdapter<String> forCharacters(DeclarationAnnotationAdapter annotationAdapter, String elementName) {
+ return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, CharacterStringExpressionConverter.instance());
+ }
+}

Back to the top