001    /*
002     * SonarQube, open source software quality management tool.
003     * Copyright (C) 2008-2014 SonarSource
004     * mailto:contact AT sonarsource DOT com
005     *
006     * SonarQube is free software; you can redistribute it and/or
007     * modify it under the terms of the GNU Lesser General Public
008     * License as published by the Free Software Foundation; either
009     * version 3 of the License, or (at your option) any later version.
010     *
011     * SonarQube is distributed in the hope that it will be useful,
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014     * Lesser General Public License for more details.
015     *
016     * You should have received a copy of the GNU Lesser General Public License
017     * along with this program; if not, write to the Free Software Foundation,
018     * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
019     */
020    package org.sonar.api.batch.sensor;
021    
022    import com.google.common.annotations.Beta;
023    import org.sonar.api.batch.fs.FileSystem;
024    import org.sonar.api.batch.fs.InputFile;
025    import org.sonar.api.batch.measure.Metric;
026    import org.sonar.api.batch.rule.ActiveRules;
027    import org.sonar.api.batch.sensor.duplication.DuplicationBuilder;
028    import org.sonar.api.batch.sensor.duplication.DuplicationGroup;
029    import org.sonar.api.batch.sensor.duplication.DuplicationTokenBuilder;
030    import org.sonar.api.batch.sensor.highlighting.HighlightingBuilder;
031    import org.sonar.api.batch.sensor.issue.Issue;
032    import org.sonar.api.batch.sensor.issue.IssueBuilder;
033    import org.sonar.api.batch.sensor.measure.Measure;
034    import org.sonar.api.batch.sensor.measure.MeasureBuilder;
035    import org.sonar.api.batch.sensor.symbol.SymbolTableBuilder;
036    import org.sonar.api.config.Settings;
037    
038    import javax.annotation.CheckForNull;
039    
040    import java.io.Serializable;
041    import java.util.List;
042    
043    /**
044     * Experimental - do not use
045     * @since 4.4
046     */
047    @Beta
048    public interface SensorContext {
049    
050      /**
051       * Get settings of the current project.
052       */
053      Settings settings();
054    
055      /**
056       * Get filesystem of the current project.
057       */
058      FileSystem fileSystem();
059    
060      /**
061       * Get list of active rules.
062       */
063      ActiveRules activeRules();
064    
065      // ----------- MEASURES --------------
066    
067      /**
068       * Builder to create a new {@link Measure}.
069       */
070      <G extends Serializable> MeasureBuilder<G> measureBuilder();
071    
072      /**
073       * Find a project measure.
074       */
075      @CheckForNull
076      Measure getMeasure(String metricKey);
077    
078      /**
079       * Find a project measure.
080       */
081      @CheckForNull
082      <G extends Serializable> Measure<G> getMeasure(Metric<G> metric);
083    
084      /**
085       * Find a file measure.
086       */
087      @CheckForNull
088      Measure getMeasure(InputFile file, String metricKey);
089    
090      /**
091       * Find a file measure.
092       */
093      @CheckForNull
094      <G extends Serializable> Measure<G> getMeasure(InputFile file, Metric<G> metric);
095    
096      /**
097       * Add a measure. Use {@link #measureBuilder()} to create the new measure.
098       * A measure for a given metric can only be saved once for the same resource.
099       */
100      void addMeasure(Measure<?> measure);
101    
102      // ----------- ISSUES --------------
103    
104      /**
105       * Builder to create a new {@link Issue}.
106       */
107      IssueBuilder issueBuilder();
108    
109      /**
110       * Add an issue. Use {@link #issueBuilder()} to create the new issue.
111       * @return <code>true</code> if the new issue is registered, <code>false</code> if:
112       * <ul>
113       * <li>the rule does not exist</li>
114       * <li>the rule is disabled in the Quality profile</li>
115       * </ul>
116       */
117      boolean addIssue(Issue issue);
118    
119      // ------------ HIGHLIGHTING ------------
120    
121      /**
122       * Builder to define highlighting of a file.
123       * @since 4.5
124       */
125      HighlightingBuilder highlightingBuilder(InputFile inputFile);
126    
127      // ------------ SYMBOL REFERENCES ------------
128    
129      /**
130       * Builder to define symbol references in a file.
131       * @since 4.5
132       */
133      SymbolTableBuilder symbolTableBuilder(InputFile inputFile);
134    
135      // ------------ DUPLICATIONS ------------
136    
137      /**
138       * Builder to define tokens in a file. Tokens are used to compute duplication using default SonarQube engine.
139       * @since 4.5
140       */
141      DuplicationTokenBuilder duplicationTokenBuilder(InputFile inputFile);
142    
143      /**
144       * Builder to manually define duplications in a file. When duplication are manually computed then
145       * no need to use {@link #duplicationTokenBuilder(InputFile)}.
146       * @since 4.5
147       */
148      DuplicationBuilder duplicationBuilder(InputFile inputFile);
149    
150      /**
151       * Register all duplications of an {@link InputFile}. Use {@link #duplicationBuilder(InputFile)} to create
152       * list of duplications.
153       */
154      void saveDuplications(InputFile inputFile, List<DuplicationGroup> duplications);
155    
156    }