/** * Copyright (C) 2010-2016 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 org.androidannotations.internal.core.handler; import java.util.List; import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.VariableElement; import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; import org.androidannotations.AndroidAnnotationsEnvironment; import org.androidannotations.ElementValidation; import org.androidannotations.annotations.LongClick; import org.androidannotations.helper.CanonicalNameConstants; import org.androidannotations.holder.EComponentWithViewSupportHolder; import com.helger.jcodemodel.AbstractJClass; import com.helger.jcodemodel.JBlock; import com.helger.jcodemodel.JDefinedClass; import com.helger.jcodemodel.JExpr; import com.helger.jcodemodel.JInvocation; import com.helger.jcodemodel.JMethod; import com.helger.jcodemodel.JMod; import com.helger.jcodemodel.JVar; public class LongClickHandler extends AbstractViewListenerHandler { public LongClickHandler(AndroidAnnotationsEnvironment environment) { super(LongClick.class, environment); } @Override public void validate(Element element, ElementValidation validation) { super.validate(element, validation); ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoidOrBoolean(executableElement, validation); validatorHelper.param.extendsType(CanonicalNameConstants.VIEW).optional().validate(executableElement, validation); } @Override protected void makeCall(JBlock listenerMethodBody, JInvocation call, TypeMirror returnType) { boolean returnMethodResult = returnType.getKind() != TypeKind.VOID; if (returnMethodResult) { listenerMethodBody._return(call); } else { listenerMethodBody.add(call); listenerMethodBody._return(JExpr.TRUE); } } @Override protected void processParameters(EComponentWithViewSupportHolder holder, JMethod listenerMethod, JInvocation call, List<? extends VariableElement> parameters) { boolean hasViewParameter = parameters.size() == 1; JVar viewParam = listenerMethod.param(getClasses().VIEW, "view"); if (hasViewParameter) { call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.VIEW, viewParam, parameters.get(0))); } } @Override protected JMethod createListenerMethod(JDefinedClass listenerAnonymousClass) { return listenerAnonymousClass.method(JMod.PUBLIC, getCodeModel().BOOLEAN, "onLongClick"); } @Override protected String getSetterName() { return "setOnLongClickListener"; } @Override protected AbstractJClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().VIEW_ON_LONG_CLICK_LISTENER; } }