From 8ebbaacd07b5ad1ab7e8b4d5e8e2b489f9bce795 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Florian=20K=C3=B6berle?= Date: Mon, 23 Jun 2008 19:43:34 +0200 Subject: [PATCH] Implementation of a copy constructor for FileNameMatcher. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Florian Köberle Signed-off-by: Robin Rosenberg --- .../spearce/jgit/fnmatch/FileNameMatcherTest.java | 31 ++++++++++++++++++++++ .../org/spearce/jgit/fnmatch/FileNameMatcher.java | 30 ++++++++++++++++++--- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/fnmatch/FileNameMatcherTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/fnmatch/FileNameMatcherTest.java index ad72ac80..0c9501b2 100644 --- a/org.spearce.jgit.test/tst/org/spearce/jgit/fnmatch/FileNameMatcherTest.java +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/fnmatch/FileNameMatcherTest.java @@ -723,4 +723,35 @@ public class FileNameMatcherTest extends TestCase { assertEquals(true, childMatcher.isMatch()); assertEquals(false, childMatcher.canAppendMatch()); } + + public void testCopyConstructor() throws Exception { + final String pattern = "helloworld"; + final FileNameMatcher matcher = new FileNameMatcher(pattern, null); + matcher.append("hello"); + final FileNameMatcher copy = new FileNameMatcher(matcher); + assertEquals(false, matcher.isMatch()); + assertEquals(true, matcher.canAppendMatch()); + assertEquals(false, copy.isMatch()); + assertEquals(true, copy.canAppendMatch()); + matcher.append("world"); + assertEquals(true, matcher.isMatch()); + assertEquals(false, matcher.canAppendMatch()); + assertEquals(false, copy.isMatch()); + assertEquals(true, copy.canAppendMatch()); + copy.append("world"); + assertEquals(true, matcher.isMatch()); + assertEquals(false, matcher.canAppendMatch()); + assertEquals(true, copy.isMatch()); + assertEquals(false, copy.canAppendMatch()); + copy.reset(); + assertEquals(true, matcher.isMatch()); + assertEquals(false, matcher.canAppendMatch()); + assertEquals(false, copy.isMatch()); + assertEquals(true, copy.canAppendMatch()); + copy.append("helloworld"); + assertEquals(true, matcher.isMatch()); + assertEquals(false, matcher.canAppendMatch()); + assertEquals(true, copy.isMatch()); + assertEquals(false, copy.canAppendMatch()); + } } diff --git a/org.spearce.jgit/src/org/spearce/jgit/fnmatch/FileNameMatcher.java b/org.spearce.jgit/src/org/spearce/jgit/fnmatch/FileNameMatcher.java index 9ac18753..702f7b34 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/fnmatch/FileNameMatcher.java +++ b/org.spearce.jgit/src/org/spearce/jgit/fnmatch/FileNameMatcher.java @@ -99,10 +99,23 @@ public class FileNameMatcher { * must be a list which will never be modified. */ private FileNameMatcher(final List headsStartValue) { + this(headsStartValue, headsStartValue); + } + + /** + * + * @param headsStartValue + * must be a list which will never be modified. + * @param heads + * a list which will be cloned and then used as current head + * list. + */ + private FileNameMatcher(final List headsStartValue, + final List heads) { this.headsStartValue = headsStartValue; - this.heads = new ArrayList(headsStartValue.size()); - this.heads.addAll(this.headsStartValue); - this.listForLocalUseage = new ArrayList(headsStartValue.size()); + this.heads = new ArrayList(heads.size()); + this.heads.addAll(heads); + this.listForLocalUseage = new ArrayList(heads.size()); } /** @@ -120,6 +133,17 @@ public class FileNameMatcher { this(createHeadsStartValues(patternString, invalidWildgetCharacter)); } + /** + * A Copy Constructor which creates a new {@link FileNameMatcher} with the + * same state and reset point like other. + * + * @param other + * another {@link FileNameMatcher} instance. + */ + public FileNameMatcher(FileNameMatcher other) { + this(other.headsStartValue, other.heads); + } + private static List createHeadsStartValues( final String patternString, final Character invalidWildgetCharacter) throws InvalidPatternException { -- 2.11.4.GIT