package org.springframework.ide.eclipse.quickfix.jdt.computers;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.core.SourceType;
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.springframework.ide.eclipse.quickfix.jdt.proposals.ClassCompletionProposal;
/**
*
* Annotation proposal computer for classes in simple class name form (i.e.
* ClassName.class)
*
* @author Terry Denney
*
*/
public class SimpleClassProposalComputer extends AnnotationProposalComputer {
@Override
protected List<ICompletionProposal> computeCompletionProposals(SourceType type, String value,
IAnnotation annotation, JavaContentAssistInvocationContext javaContext) throws JavaModelException {
List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();
IPackageFragment[] packages = javaContext.getProject().getPackageFragments();
Set<String> foundCUs = new HashSet<String>();
for (IPackageFragment currPackage : packages) {
ICompilationUnit[] cus = currPackage.getCompilationUnits();
for (ICompilationUnit cu : cus) {
String cuName = cu.getElementName();
if (cuName.toLowerCase().startsWith(value.toLowerCase()) && !foundCUs.contains(cuName)) {
boolean needsImport = true;
IPackageDeclaration[] packageDeclarations = javaContext.getCompilationUnit()
.getPackageDeclarations();
for (IPackageDeclaration packageDeclaration : packageDeclarations) {
String packageName = packageDeclaration.getElementName();
if (packageName.equals(currPackage.getElementName())) {
needsImport = false;
}
}
IImportDeclaration[] imports = cu.getImports();
for (IImportDeclaration importDecl : imports) {
if (importDecl.getElementName().equals(currPackage.getElementName())) {
needsImport = false;
}
}
IPackageFragment importPackage = null;
if (needsImport) {
importPackage = currPackage;
}
proposals.add(new ClassCompletionProposal(cuName.replaceAll(".java", ""), annotation,
importPackage, javaContext));
foundCUs.add(cuName);
}
}
}
return proposals;
}
}