/* * Copyright 2009-2017 the original author or authors. * * 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.codehaus.groovy.eclipse.codeassist.processors; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.codehaus.groovy.eclipse.codeassist.GroovyContentAssist; import org.codehaus.groovy.eclipse.codeassist.relevance.Relevance; import org.codehaus.groovy.eclipse.codeassist.requestor.ContentAssistContext; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.Flags; 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.internal.core.SearchableEnvironment; import org.eclipse.jdt.internal.corext.codemanipulation.GetterSetterUtil; import org.eclipse.jdt.internal.ui.text.java.GetterSetterCompletionProposal; import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext; import org.eclipse.jface.text.contentassist.ICompletionProposal; public class GetSetMethodCompletionProcessor extends AbstractGroovyCompletionProcessor { public GetSetMethodCompletionProcessor(ContentAssistContext context, JavaContentAssistInvocationContext javaContext, SearchableEnvironment nameEnvironment) { super(context, javaContext, nameEnvironment); } public List<ICompletionProposal> generateProposals(IProgressMonitor monitor) { List<ICompletionProposal> proposals = new LinkedList<ICompletionProposal>(); ContentAssistContext context = getContext(); IType enclosingType = context.getEnclosingType(); if (enclosingType != null) { try { for (IField field : enclosingType.getFields()) { proposals.addAll(createProposal(field, context)); } } catch (JavaModelException e) { GroovyContentAssist.logError("Exception looking for proposal providers in " + context.unit.getElementName(), e); } } return proposals; } private List<ICompletionProposal> createProposal(IField field, ContentAssistContext context) throws JavaModelException { List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(2); int relevance = Relevance.HIGH.getRelavance(); IMethod getter = GetterSetterUtil.getGetter(field); if (getter == null || !getter.exists()) { proposals.add(new GetterSetterCompletionProposal(field, context.completionLocation - context.completionExpression.length(), context.completionExpression.length(), true, relevance)); } IMethod setter = GetterSetterUtil.getSetter(field); if ((field.getFlags() & Flags.AccFinal) == 0 && (setter == null || !setter.exists())) { proposals.add(new GetterSetterCompletionProposal(field, context.completionLocation - context.completionExpression.length(), context.completionExpression.length(), false, relevance)); } return proposals; } }