/**
 * ***************************************************************************** Copyright (c) 2000,
 * 2011 IBM Corporation and others. 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
 *
 * <p>Contributors: IBM Corporation - initial API and implementation
 * *****************************************************************************
 */
package org.eclipse.jdt.internal.ui.refactoring.contentassist;

import org.eclipse.che.jdt.util.JavaModelUtil;

public class JavaTypeCompletionProcessor /* extends CUPositionCompletionProcessor*/ {

  public static final String DUMMY_CLASS_NAME = "$$__$$"; // $NON-NLS-1$

  /**
   * The CU name to be used if no parent ICompilationUnit is available. The main type of this class
   * will be filtered out from the proposals list.
   */
  public static final String DUMMY_CU_NAME = DUMMY_CLASS_NAME + JavaModelUtil.DEFAULT_CU_SUFFIX;

  //	/**
  //	 * Creates a <code>JavaTypeCompletionProcessor</code>.
  //	 * The completion context must be set via {@link #setPackageFragment(IPackageFragment)}.
  //	 *
  //	 * @param enableBaseTypes complete java base types iff <code>true</code>
  //	 * @param enableVoid complete <code>void</code> base type iff <code>true</code>
  //	 */
  //	public JavaTypeCompletionProcessor(boolean enableBaseTypes, boolean enableVoid) {
  //		this(enableBaseTypes, enableVoid, false);
  //	}
  //
  //	/**
  //	 * Creates a <code>JavaTypeCompletionProcessor</code>.
  //	 * The completion context must be set via {@link #setPackageFragment(IPackageFragment)}.
  //	 *
  //	 * @param enableBaseTypes complete java base types iff <code>true</code>
  //	 * @param enableVoid complete <code>void</code> base type iff <code>true</code>
  //	 * @param fullyQualify always complete to fully qualifies type iff <code>true</code>
  //	 */
  //	public JavaTypeCompletionProcessor(boolean enableBaseTypes, boolean enableVoid, boolean
  // fullyQualify) {
  //		super(new TypeCompletionRequestor(enableBaseTypes, enableVoid, fullyQualify));
  //	}
  //
  //	@Override
  //	public char[] getCompletionProposalAutoActivationCharacters() {
  //		// disable auto activation in dialog fields, see
  // https://bugs.eclipse.org/bugs/show_bug.cgi?id=89476
  //		return null;
  //	}
  //
  //	/**
  //	 * @param packageFragment the new completion context
  //	 */
  //	public void setPackageFragment(IPackageFragment packageFragment) {
  //		//TODO: Some callers have a better completion context and should include imports
  //		// and nested classes of their declaring CU in WC's source.
  //		if (packageFragment == null) {
  //			setCompletionContext(null, null, null);
  //		} else {
  //			String before= "public class " + DUMMY_CLASS_NAME + " { ";  //$NON-NLS-1$//$NON-NLS-2$
  //			String after= " }"; //$NON-NLS-1$
  //			setCompletionContext(packageFragment.getCompilationUnit(DUMMY_CU_NAME), before, after);
  //		}
  //	}
  //
  //	public void setExtendsCompletionContext(IJavaElement javaElement) {
  //		if (javaElement instanceof IPackageFragment) {
  //			IPackageFragment packageFragment= (IPackageFragment) javaElement;
  //			ICompilationUnit cu= packageFragment.getCompilationUnit(DUMMY_CU_NAME);
  //			setCompletionContext(cu, "public class " + DUMMY_CLASS_NAME + " extends ", " {}");
  // //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
  //		} else if (javaElement instanceof IType) {
  //			// pattern: public class OuterType { public class Type extends /*caret*/  {} }
  //			IType type= (IType) javaElement;
  //			String before= "public class " + type.getElementName() + " extends "; //$NON-NLS-1$
  // //$NON-NLS-2$
  //			String after= " {}"; //$NON-NLS-1$
  //			IJavaElement parent= type.getParent();
  //			while (parent instanceof IType) {
  //				type= (IType) parent;
  //				before+= "public class " + type.getElementName() + " {"; //$NON-NLS-1$ //$NON-NLS-2$
  //				after+= "}"; //$NON-NLS-1$
  //				parent= type.getParent();
  //			}
  //			ICompilationUnit cu= type.getCompilationUnit();
  //			setCompletionContext(cu, before, after);
  //		} else {
  //			setCompletionContext(null, null, null);
  //		}
  //	}
  //
  ////	public void setImplementsCompletionContext(IPackageFragment packageFragment) {
  ////		ICompilationUnit cu= packageFragment.getCompilationUnit(DUMMY_CU_NAME);
  ////		setCompletionContext(cu, "public class " + DUMMY_CLASS_NAME + " implements ", " {}");
  // //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
  ////	}
  //
  //	protected static class TypeCompletionRequestor extends CUPositionCompletionRequestor {
  //		private static final String VOID= "void"; //$NON-NLS-1$
  //		private static final List<String> BASE_TYPES= Arrays.asList(
  //			new String[] {"boolean", "byte", "char", "double", "float", "int", "long", "short"});
  // //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
  // //$NON-NLS-7$ //$NON-NLS-8$
  //
  //		private boolean fEnableBaseTypes;
  //		private boolean fEnableVoid;
  //		private final boolean fFullyQualify;
  //
  //		public TypeCompletionRequestor(boolean enableBaseTypes, boolean enableVoid, boolean
  // fullyQualify) {
  //			fFullyQualify= fullyQualify;
  //			fEnableBaseTypes= enableBaseTypes;
  //			fEnableVoid= enableVoid;
  //			setIgnored(CompletionProposal.ANONYMOUS_CLASS_DECLARATION, true);
  //			setIgnored(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, true);
  //			setIgnored(CompletionProposal.FIELD_REF, true);
  //			setIgnored(CompletionProposal.FIELD_REF_WITH_CASTED_RECEIVER, true);
  //			setIgnored(CompletionProposal.LABEL_REF, true);
  //			setIgnored(CompletionProposal.LOCAL_VARIABLE_REF, true);
  //			setIgnored(CompletionProposal.METHOD_DECLARATION, true);
  //			setIgnored(CompletionProposal.METHOD_REF, true);
  //			setIgnored(CompletionProposal.CONSTRUCTOR_INVOCATION, true);
  //			setIgnored(CompletionProposal.METHOD_REF_WITH_CASTED_RECEIVER, true);
  //			setIgnored(CompletionProposal.VARIABLE_DECLARATION, true);
  //			setIgnored(CompletionProposal.POTENTIAL_METHOD_DECLARATION, true);
  //			setIgnored(CompletionProposal.METHOD_NAME_REFERENCE, true);
  //		}
  //
  //		@Override
  //		public void accept(CompletionProposal proposal) {
  //			switch (proposal.getKind()) {
  //				case CompletionProposal.PACKAGE_REF :
  //					char[] packageName= proposal.getDeclarationSignature();
  //					if (TypeFilter.isFiltered(packageName))
  //						return;
  //					addAdjustedCompletion(
  //							new String(packageName),
  //							new String(proposal.getCompletion()),
  //							proposal.getReplaceStart(),
  //							proposal.getReplaceEnd(),
  //							proposal.getRelevance(),
  //							JavaPluginImages.DESC_OBJS_PACKAGE);
  //					return;
  //
  //				case CompletionProposal.TYPE_REF :
  //					char[] signature= proposal.getSignature();
  //					char[] fullName= Signature.toCharArray(signature);
  //					if (TypeFilter.isFiltered(fullName))
  //						return;
  //					StringBuffer buf= new StringBuffer();
  //					buf.append(Signature.getSimpleName(fullName));
  //					if (buf.length() == 0)
  //						return; // this is the dummy class, whose $ have been converted to dots
  //					char[] typeQualifier= Signature.getQualifier(fullName);
  //					if (typeQualifier.length > 0) {
  //						buf.append(JavaElementLabels.CONCAT_STRING);
  //						buf.append(typeQualifier);
  //					}
  //					String name= buf.toString();
  //
  //					// Only fully qualify if it's a top level type:
  //					boolean fullyQualify= fFullyQualify &&
  // CharOperation.equals(proposal.getDeclarationSignature(), typeQualifier);
  //
  //					ImageDescriptor typeImageDescriptor;
  //					switch (Signature.getTypeSignatureKind(signature)) {
  //						case Signature.TYPE_VARIABLE_SIGNATURE :
  //							typeImageDescriptor= JavaPluginImages.DESC_OBJS_TYPEVARIABLE;
  //							break;
  //						case Signature.CLASS_TYPE_SIGNATURE :
  //							typeImageDescriptor= JavaElementImageProvider.getTypeImageDescriptor(false, false,
  // proposal.getFlags(), false);
  //							break;
  //						default :
  //							typeImageDescriptor= null;
  //					}
  //
  //					addAdjustedTypeCompletion(
  //							name,
  //							new String(proposal.getCompletion()),
  //							proposal.getReplaceStart(),
  //							proposal.getReplaceEnd(),
  //							proposal.getRelevance(),
  //							typeImageDescriptor,
  //							fullyQualify ? new String(fullName) : null);
  //					return;
  //
  //				case CompletionProposal.KEYWORD:
  //					if (! fEnableBaseTypes)
  //						return;
  //					String keyword= new String(proposal.getName());
  //					if ( (fEnableVoid && VOID.equals(keyword)) || (fEnableBaseTypes &&
  // BASE_TYPES.contains(keyword)) )
  //						addAdjustedCompletion(
  //								keyword,
  //								new String(proposal.getCompletion()),
  //								proposal.getReplaceStart(),
  //								proposal.getReplaceEnd(),
  //								proposal.getRelevance(),
  //								null);
  //					return;
  //
  //				default :
  //					return;
  //			}
  //
  //		}
  //	}
}
