Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2011 itemis AG (http://www.itemis.eu) 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 /
  
  package org.eclipse.xtext.ui.editor.outline.quickoutline;
  
 import java.util.List;
 
 

Author(s):
Sebastian Zarnekow - Initial contribution and API
Since:
2.1
 
 public class PrefixMatcherOutlineAdapter extends StringMatcher {
 
 	private final PrefixMatcher strategy;
 	private final List<StringprefixParts;
 	private final List<StringMatcherstringMatchers;
 	private final String prefix;
 
 	public PrefixMatcherOutlineAdapter(String prefixPrefixMatcher strategy) {
 		super(""true);
 		this. = prefix;
 		this. = splitIntoParts(prefix);
 		this. = strategy;
 		this. = new StringMatcher(prefixtrue);
 		for(String part) {
 			.add(new StringMatcher(parttrue));
 		}
 	}
 
 	protected List<StringsplitIntoParts(String prefix) {
 		List<Stringresult = Lists.newArrayList();
 		int nextStart = 0;
 		for(int i = 0; i < prefix.length(); i++) {
 			char c = prefix.charAt(i);
 			if (isStructuralDelimiter(c) || c == '.' || c == ' ' || c == '\t') {
 				if (nextStart != i)
 					result.add(prefix.substring(nextStarti).trim());
 				if (c != ' ' && c != '\t')
 					result.add(Character.toString(c));
 				nextStart = i + 1;
 			}
 		}
 		if (nextStart != prefix.length()) {
 			result.add(prefix.substring(nextStart).trim());
 		}
 		return result;
 	}
 
 	protected boolean isStructuralDelimiter(char c) {
 		return c == '(' || c == ')' ||
 							c == '{' || c == '}' ||
 							c == '[' || c == ']' ||
 							c == ':' || c == ',';
 	}
 	
 	protected String translatePattern(String pattern) {
 		return pattern;
 	}
 	
 	public boolean match(String label) {
 			return true;
 			return true;
 		}
 		if (.match(label)) {
 			return true;
 		}
 		List<StringlabelParts = splitIntoParts(label);
 		if (labelParts.size() < .size()) {
 			return false;
 		}
 		if (.size() == 1 && labelParts.size() == 1)
 			return false;
 		int labelIdx = 0;
 		int prefixIdx = 0;
 		boolean ignoreStructuralDelimiterGuard = false;
 		while(prefixIdx < .size()) {
 			String prefixPart = .get(prefixIdx);
 			StringMatcher partMatcher = .get(prefixIdx);
 			boolean didMatch = false;
 			while(labelIdx < labelParts.size()) {
 				String labelPart = labelParts.get(labelIdx).trim();
 				labelIdx++;
 				if (.isCandidateMatchingPrefix(labelPartprefixPart)) {
 					didMatch = true;
 					ignoreStructuralDelimiterGuard = prefixPart.endsWith("*");
					break;
				}
				if (partMatcher.match(labelPart)) {
					ignoreStructuralDelimiterGuard = prefixPart.endsWith("*");
					didMatch = true;
					break;
				}
				if (!ignoreStructuralDelimiterGuard && labelPart.length() == 1 && isStructuralDelimiter(labelPart.charAt(0))) {
					return false;
				}
			}
			if (!didMatch)
				return false;
			prefixIdx++;
			if (prefixIdx >= .size())
				return true;
		}
		return false;
	}
New to GrepCode? Check out our FAQ X