/*******************************************************************************
* Copyright (c) 2010-2012, Zoltan Ujhelyi, Istvan Rath and Daniel Varro
* 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
*
* Contributors:
* Zoltan Ujhelyi - initial API and implementation
*******************************************************************************/
package org.eclipse.incquery.patternlanguage.emf.ui.contentassist;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher;
/**
* @author Zoltan Ujhelyi
*
*/
public class ClassifierPrefixMatcher extends PrefixMatcher {
private final PrefixMatcher delegate;
private final IQualifiedNameConverter qualifiedNameConverter;
public ClassifierPrefixMatcher(PrefixMatcher delegate, IQualifiedNameConverter qualifiedNameConverter) {
this.delegate = delegate;
this.qualifiedNameConverter = qualifiedNameConverter;
}
@Override
public boolean isCandidateMatchingPrefix(String name, String prefix) {
if (delegate.isCandidateMatchingPrefix(name, prefix))
return true;
QualifiedName qualifiedName = qualifiedNameConverter.toQualifiedName(name);
QualifiedName qualifiedPrefix = qualifiedNameConverter.toQualifiedName(prefix);
if (qualifiedName.getSegmentCount() > 1) {
if (qualifiedPrefix.getSegmentCount() == 1)
return delegate.isCandidateMatchingPrefix(qualifiedName.getSegment(1),
qualifiedPrefix.getFirstSegment());
if (!delegate.isCandidateMatchingPrefix(qualifiedName.getFirstSegment(),
qualifiedPrefix.getFirstSegment()))
return false;
return delegate.isCandidateMatchingPrefix(qualifiedName.getSegment(1), qualifiedPrefix.getSegment(1));
}
return false;
}
}