001 package org.crsh.cmdline.matcher.impl; 002 003 import org.crsh.cmdline.ClassDescriptor; 004 import org.crsh.cmdline.CommandCompletion; 005 import org.crsh.cmdline.Delimiter; 006 import org.crsh.cmdline.MethodDescriptor; 007 import org.crsh.cmdline.matcher.CmdCompletionException; 008 import org.crsh.cmdline.spi.ValueCompletion; 009 010 /** 011 * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> 012 */ 013 class MethodCompletion<T> extends Completion { 014 015 /** . */ 016 private final ClassDescriptor<T> descriptor; 017 018 /** . */ 019 private final String mainName; 020 021 /** . */ 022 private final String prefix; 023 024 /** . */ 025 private final Delimiter delimiter; 026 027 MethodCompletion(ClassDescriptor<T> descriptor, String mainName, String prefix, Delimiter delimiter) { 028 this.descriptor = descriptor; 029 this.mainName = mainName; 030 this.prefix = prefix; 031 this.delimiter = delimiter; 032 } 033 034 @Override 035 protected CommandCompletion complete() throws CmdCompletionException { 036 ValueCompletion completions = new ValueCompletion(prefix); 037 for (MethodDescriptor<?> m : descriptor.getMethods()) { 038 String name = m.getName(); 039 if (name.startsWith(prefix)) { 040 if (!name.equals(mainName)) { 041 completions.put(name.substring(prefix.length()), true); 042 } 043 } 044 } 045 return new CommandCompletion(delimiter, completions); 046 } 047 }