blob: c0590ab83c6229c7135ecc39e046c31c4fcbdd8f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2016 xored software, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.ruby.testing.internal;
import org.eclipse.dltk.ast.declarations.ModuleDeclaration;
import org.eclipse.dltk.core.IMember;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.core.ISourceRange;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.core.SourceParserUtil;
import org.eclipse.dltk.core.SourceRange;
import org.eclipse.dltk.ruby.ast.FakeModuleDeclaration;
public class ResolverUtils {
public static ISourceRange getSourceRange(final IMember member) {
try {
final ISourceRange sourceRange = member.getSourceRange();
final ISourceRange nameRange = member.getNameRange();
if (nameRange != null && nameRange.getLength() > 0) {
return adjustRange(member.getSourceModule().getSource(),
sourceRange.getOffset(), nameRange.getOffset()
+ nameRange.getLength());
} else {
return sourceRange;
}
} catch (ModelException e) {
return null;
}
}
public static ISourceRange adjustRange(String source, int start, int end) {
while (start < source.length()
&& Character.isWhitespace(source.charAt(start))) {
++start;
}
while (end > start && Character.isWhitespace(source.charAt(end - 1))) {
--end;
}
return new SourceRange(start, end - start);
}
/**
* @param source
* @param range
* @return
*/
public static ISourceRange adjustRange(String source, ISourceRange range) {
return adjustRange(source, range.getOffset(), range.getOffset()
+ range.getLength());
}
public static ModuleDeclaration parse(ISourceModule module) {
final ModuleDeclaration declaration = SourceParserUtil
.getModuleDeclaration(module);
if (declaration instanceof FakeModuleDeclaration) {
return null;
}
return declaration;
}
}