lang-api
[idea/community.git] / platform / lang-api / src / com / intellij / psi / search / IndexPattern.java
1 /*
2  * Copyright 2000-2007 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.psi.search;
17
18 import org.jetbrains.annotations.NotNull;
19
20 import java.util.regex.Pattern;
21 import java.util.regex.PatternSyntaxException;
22
23 /**
24  * A single pattern the occurrences of which in comments are indexed by IDEA.
25  *
26  * @author yole
27  * @since 5.1
28  * @see IndexPatternProvider#getIndexPatterns()
29  */
30 public class IndexPattern {
31   @NotNull private String myPatternString;
32   private boolean myCaseSensitive;
33   private Pattern myPattern;
34
35   /**
36    * Creates an instance of an index pattern.
37    *
38    * @param patternString the text of the Java regular expression to match.
39    * @param caseSensitive whether the regular expression should be case-sensitive.
40    */
41   public IndexPattern(@NotNull String patternString, final boolean caseSensitive) {
42     myPatternString = patternString;
43     myCaseSensitive = caseSensitive;
44     compilePattern();
45   }
46
47   @NotNull
48   public String getPatternString() {
49     return myPatternString;
50   }
51
52   public Pattern getPattern() {
53     return myPattern;
54   }
55
56   public boolean isCaseSensitive() {
57     return myCaseSensitive;
58   }
59
60   public void setPatternString(@NotNull final String patternString) {
61     myPatternString = patternString;
62     compilePattern();
63   }
64
65   public void setCaseSensitive(final boolean caseSensitive) {
66     myCaseSensitive = caseSensitive;
67     compilePattern();
68   }
69
70   private void compilePattern() {
71     try{
72       if (myCaseSensitive){
73         myPattern = Pattern.compile(myPatternString);
74       }
75       else{
76         myPattern = Pattern.compile(myPatternString, Pattern.CASE_INSENSITIVE);
77       }
78     }
79     catch(PatternSyntaxException e){
80       myPattern = null;
81     }
82   }
83
84   public boolean equals(final Object o) {
85     if (this == o) return true;
86     if (o == null || getClass() != o.getClass()) return false;
87
88     final IndexPattern that = (IndexPattern)o;
89
90     if (myCaseSensitive != that.myCaseSensitive) return false;
91     if (!myPatternString.equals(that.myPatternString)) return false;
92
93     return true;
94   }
95
96   public int hashCode() {
97     int result = myPatternString.hashCode();
98     result = 29 * result + (myCaseSensitive ? 1 : 0);
99     return result;
100   }
101 }