All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.jy2.commandline.picocli.param.completion.ClassNameCompletionCandidates Maven / Gradle / Ivy

There is a newer version: 0.0.39
Show newest version
package com.github.jy2.commandline.picocli.param.completion;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import com.google.common.reflect.ClassPath;

import picocli.AutoComplete;
import picocli.CommandLine.Model.CommandSpec;
import picocli.CommandLine.Model.OptionSpec;
import picocli.CommandLine.Model.PositionalParamSpec;

public class ClassNameCompletionCandidates implements Iterable {

	@Override
	public Iterator iterator() {
		ArrayList list = new ArrayList<>();
		if (AutoComplete.argIndex != getClassNameIndex()) {
			return list.iterator();
		}

		// String className = getClassName();
		final ClassLoader loader = Thread.currentThread().getContextClassLoader();
		try {
			for (final ClassPath.ClassInfo info : ClassPath.from(loader).getTopLevelClasses()) {
				// if (info.getName().startsWith(className)) {
				list.add(info.getName());
				// }
			}
		} catch (IOException e) {
		}

		list.sort(String::compareToIgnoreCase);
		return list.iterator();
	}

//	private String getClassName() {
//		if (AutoComplete.tentativeMatch == null) {
//			return "";
//		}
//		for (Object obj : AutoComplete.tentativeMatch) {
//			if (obj instanceof CommandSpec) { // subcommand
//			} else if (obj instanceof OptionSpec) { // option
//			} else if (obj instanceof PositionalParamSpec) { // positional
//				PositionalParamSpec pos = (PositionalParamSpec) obj;
//				if (pos.index().min == 0) {
//					String value = pos.stringValues().get(0);
//					return value;
//				}
//			}
//		}
//		return "";
//	}

	private int getClassNameIndex() {
		if (AutoComplete.tentativeMatch == null) {
			return -1;
		}
		int i = 0;
		for (Object obj : AutoComplete.tentativeMatch) {
			if (obj instanceof CommandSpec) { // subcommand
			} else if (obj instanceof OptionSpec) { // option
			} else if (obj instanceof PositionalParamSpec) { // positional
				PositionalParamSpec pos = (PositionalParamSpec) obj;
				if (pos.index().min == 0) {
					return i;
				}
			}
			i++;
		}
		return -1;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy