diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/TraceFileNameProvider.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/TraceFileNameProvider.java index fd7a89c3c..15981e407 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/TraceFileNameProvider.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/TraceFileNameProvider.java @@ -9,21 +9,25 @@ package org.eclipse.xtext.generator.trace; import java.util.regex.Pattern; +import com.google.common.base.CharMatcher; + /** * @author Moritz Eysholdt - Initial contribution and API */ public class TraceFileNameProvider { + private static final CharMatcher SEPARATOR_MATCHER = CharMatcher.anyOf("/\\"); + public static final String TRACE_FILE_EXTENSION = "._trace"; - private static final Pattern TRACE_FILE_NAME_PATTERN = Pattern.compile(".*/?\\..+\\._trace$"); + private static final Pattern TRACE_FILE_NAME_PATTERN = Pattern.compile(".*\\..+\\._trace$"); public boolean isTraceFileName(String traceFileName) { return TRACE_FILE_NAME_PATTERN.matcher(traceFileName).matches(); } public String getTraceFromJava(String javaFileName) { - int i = javaFileName.lastIndexOf('/'); + int i = SEPARATOR_MATCHER.lastIndexIn(javaFileName); if (i < 0) return "." + javaFileName + TRACE_FILE_EXTENSION; else @@ -31,7 +35,7 @@ public class TraceFileNameProvider { } public String getJavaFromTrace(String traceFileName) { - int i = traceFileName.lastIndexOf('/'); + int i = SEPARATOR_MATCHER.lastIndexIn(traceFileName); if (i < 0) return traceFileName.substring(1, traceFileName.length() - TRACE_FILE_EXTENSION.length()); else diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/trace/TraceFileNameProviderTest.xtend b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/trace/TraceFileNameProviderTest.xtend new file mode 100644 index 000000000..e6eafb800 --- /dev/null +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/trace/TraceFileNameProviderTest.xtend @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2015 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.generator.trace + +import org.junit.Test +import static org.junit.Assert.* + +class TraceFileNameProviderTest { + val nameProvider = new TraceFileNameProvider + + @Test + def testTraceFileNameOnWindows() { + assertTrue(nameProvider.isTraceFileName("C:\\workspace\\.Foo.java._trace")) + } + @Test + def testTraceFileNameOnUnix() { + assertTrue(nameProvider.isTraceFileName("/workspace/.Foo.java._trace")) + } + + @Test + def testTraceFromJavaSimple() { + val trace = nameProvider.getTraceFromJava("Foo.java") + assertEquals(".Foo.java._trace", trace) + } + + @Test + def testTraceFromJavaOnWindows() { + val trace = nameProvider.getTraceFromJava("C:\\workspace\\Foo.java") + assertEquals("C:\\workspace\\.Foo.java._trace", trace) + } + + @Test + def testTraceFromJavaOnUnix() { + val trace = nameProvider.getTraceFromJava("/workspace/Foo.java") + assertEquals("/workspace/.Foo.java._trace", trace) + } + + @Test + def testJavaFromTraceSimple() { + val java = nameProvider.getJavaFromTrace(".Foo.java._trace") + assertEquals("Foo.java", java) + } + + @Test + def testJavaFromTraceOnWindows() { + val java = nameProvider.getJavaFromTrace("C:\\workspace\\.Foo.java._trace") + assertEquals("C:\\workspace\\Foo.java", java) + } + + @Test + def testJavaFromTraceOnUnix() { + val java = nameProvider.getJavaFromTrace("/workspace/.Foo.java._trace") + assertEquals("/workspace/Foo.java", java) + } +} \ No newline at end of file