Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (C) 2010-2011 eBusiness Information, Excilys Group Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed To in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 
 package com.googlecode.androidannotations.helper;
 
 import java.util.List;
 
 
 
 public class APTCodeModelHelper {
 
 	public JClass typeMirrorToJClass(TypeMirror typeEBeanHolder holder) {
 
 		if (type instanceof DeclaredType) {
 			DeclaredType declaredType = (DeclaredTypetype;
 
 			String declaredTypeName = declaredType.asElement().toString();
 
 			JClass declaredClass = holder.refClass(declaredTypeName);
 
 			List<? extends TypeMirrortypeArguments = declaredType.getTypeArguments();
 
 			List<JClasstypeArgumentJClasses = new ArrayList<JClass>();
 			for (TypeMirror typeArgument : typeArguments) {
 				typeArgumentJClasses.add(typeMirrorToJClass(typeArgumentholder));
 			}
 			if (typeArgumentJClasses.size() > 0) {
 				declaredClass = declaredClass.narrow(typeArgumentJClasses);
 			}
 
 			return declaredClass;
 		} else {
 			return holder.refClass(type.toString());
 		}
 	}
 
 	public static class Parameter {
 		public final String name;
 		public final JClass jClass;
 
 		public Parameter(String nameJClass jClass) {
 			this. = name;
 			this. = jClass;
 		}
 	}
 	
 	public JMethod overrideAnnotatedMethod(ExecutableElement executableElementEBeanHolder holder) {
 
 		String methodName = executableElement.getSimpleName().toString();
 
 		JClass returnType = typeMirrorToJClass(executableElement.getReturnType(), holder);
 
 		List<Parameterparameters = new ArrayList<Parameter>();
 		for (VariableElement parameter : executableElement.getParameters()) {
 			String parameterName = parameter.getSimpleName().toString();
 			JClass parameterClass = typeMirrorToJClass(parameter.asType(), holder);
 			parameters.add(new Parameter(parameterNameparameterClass));
 		}
 		
 		JMethod existingMethod = findAlreadyGeneratedMethod(holder.eBeanmethodNameparameters);
 		
 		if (existingMethod != null) {
 			return existingMethod;
 		}
 		
 		JMethod method = holder.eBean.method(.returnTypemethodName);
 		method.annotate(Override.class);
 
 		List<JVarmethodParameters = new ArrayList<JVar>();
		for (VariableElement parameter : executableElement.getParameters()) {
			String parameterName = parameter.getSimpleName().toString();
			JClass parameterClass = typeMirrorToJClass(parameter.asType(), holder);
			JVar param = method.param(.parameterClassparameterName);
			methodParameters.add(param);
		}
		for (TypeMirror superThrownType : executableElement.getThrownTypes()) {
			JClass thrownType = typeMirrorToJClass(superThrownTypeholder);
			method._throws(thrownType);
		}
		callSuperMethod(methodholdermethod.body());
		return method;
	}
	private JMethod findAlreadyGeneratedMethod(JDefinedClass definedClassString methodNameList<Parameterparameters) {
		method: for (JMethod method : definedClass.methods()) {
			if (method.name().equals(methodName) && method.params().size() == parameters.size()) {
				int i = 0;
				for (JVar param : method.params()) {
					String searchedParamType = parameters.get(i)..name();
					if (!param.type().name().equals(searchedParamType)) {
						continue method;
					}
					i++;
				}
				return method;
			}
		}
		return null;
	}
	public void callSuperMethod(JMethod superMethodEBeanHolder holderJBlock callBlock) {
		JExpression activitySuper = holder.eBean.staticRef("super");
		JInvocation superCall = JExpr.invoke(activitySupersuperMethod);
		for (JVar param : superMethod.params()) {
			superCall.arg(param);
		}
		JType returnType = superMethod.type();
		if (returnType.fullName().equals("void")) {
			callBlock.add(superCall);
else {
			callBlock._return(superCall);
		}
	}
	public JBlock removeBody(JMethod method) {
		JBlock body = method.body();
		try {
			Field bodyField = JMethod.class.getDeclaredField("body");
			bodyField.setAccessible(true);
			bodyField.set(methodnull);
catch (Exception e) {
			throw new RuntimeException(e);
		}
		JBlock clonedBody = new JBlock(falsefalse);
		for(Object statement : body.getContents()) {
			clonedBody.add((JStatementstatement);
		}
		return clonedBody;
	}
New to GrepCode? Check out our FAQ X