Code Monkey home page Code Monkey logo

minesstubs's Introduction

SStuBs-mining

Hosts our tool for mining simple "stupid" bugs (SStuBs) that was used to mine the ManySStuBs4J dataset.

Running the tool

A precompiled version of the tool is available in the file miner.jar taht contains all the required dependencies. It can easily be run via the following command:

java -jar miner.jar PROJECTS_DIR DATASET_SAVE_DIR

PROJECTS_DIR must point to directory containing the Java repositories for mining. DATASET_SAVE_DIR must point to the directory in which the dataset will be saved.

Installation via Maven

The tool can also easily be installed and built from source via maven.
Maven will download all the required dependencies.
Many thanks to Martin Monperrus for his help with this.
Important: A Maven version >= 3.2.3 is required since 15 January 2020 and onwards
Maven will download the dependencies and build the project with the command:

mvn compile

To run the tool you can use the following command:

mvn exec:java -Dexec.mainClass=uk.ac.ed.inf.mpatsis.sstubs.mining.SStuBsMiner -Dexec.args="$PROJECTS_DIR DATASET_SAVE_DIR"

PROJECTS_DIR must point to directory containing the Java repositories for mining. DATASET_SAVE_DIR must point to the directory in which the dataset will be saved.

About the Dataset

The ManySStuBs4J corpus is a collection of simple fixes to Java bugs, designed for evaluating program repair techniques.
We collect all bug-fixing changes using the SZZ heuristic, and then filter these to obtain a data set of small bug fix changes.
These are single statement fixes, classified where possible into one of 16 syntactic templates which we call SStuBs.
The dataset contains simple statement bugs mined from open-source Java projects hosted in GitHub.
There are two variants of the dataset. One mined from the 100 Java Maven Projects and one mined from the top 1000 Java Projects.
A project's popularity is determined by computing the sum of z-scores of its forks and watchers.
We kept only bug commits that contain only single statement changes and ignore stylistic differences such as spaces or empty as well as differences in comments.
Some single statement changes can be caused by refactorings, like changing a variable name rather than bug fixes.
We attempted to detect and exclude refactorings such as variable, function, and class renamings, function argument renamings or changing the number of arguments in a function.
The commits are classified as bug fixes or not by checking if the commit message contains any of a set of predetermined keywords such as bug, fix, fault etc.
We evaluated the accuracy of this method on a random sample of 100 commits that contained SStuBs from the smaller version of the dataset and found it to achieve a satisfactory 94% accuracy.
This method has also been used before to extract bug datasets (Ray et al., 2015; Tufano et al., 2018) where it achieved an accuracy of 96% and 97.6% respectively.

The bugs are stored in a JSON file (each version of the dataset has each own instance of this file).
Any bugs that fit one of 16 patterns are also annotated by which pattern(s) they fit in a separate JSON file (each version of the dataset has each own instance of this file).
We refer to bugs that fit any of the 16 patterns as simple stupid bugs (SStuBs).

Corpus Statistics

Projects Bug Commits Buggy Statements Bug Statements per Commit SStuBs
100 Java Maven 12598 25539 2.03 7824
100 Java 86771 153652 1.77 51537

SStuB Statistics

Pattern Name Instances Instances Large
Change Idenfier Used 3265 22668
Change Numeric Literal 1137 5447
Change Boolean Literal 169 1842
Change Modifier 1852 5010
Wrong Function Name 1486 10179
Same Function More Args 758 5100
Same Function Less Args 179 1588
Same Function Change Caller 187 1504
Same Function Swap Args 127 612
Change Binary Operator 275 2241
Change Unary Operator 170 1016
Change Operand 120 807
Less Specific If 215 2813
More Specific If 175 2381
Missing Throws Exception 68 206
Delete Throws Exception 48 508

Use

The Corpus can be downloaded via Zenodo.
The ManySStuBs4J Corpus is an automatically mined collection of Java bugs at large-scale.
We note that the automatic extraction could potentially insert some noise.
However, the amount of inserted noise is deemed to be almost negligible (see about).
We also note that the code of the Java projects is not ours but is open-source.
Please respect the license of each project.

The corpus was collected for the work related to:

@inproceedings{ManySStuBs4JCorpus2019,
author={Karampatsis, Rafael-Michael and Sutton, Charles},
title={{How Often Do Single-Statement Bugs Occur? The ManySStuBs4J Dataset}},
booktitle={},
year={2019},
pages={},
organization={}
}

Files

100 Java Maven Project Bugs bugs.json
1000 Java Project Bugs bugsLarge.json
100 Java Maven Project SStuBs sstubs.json
1000 Java Project SStuBs sstubsLarge.json

Due to a bug zenodo returns an error when uploading json files.
The .json suffix can be restored by simply renaming the files (e.g. bugs -> bugs.json).

JSON Fields

The files sstubs.json and sstubsLarge.json contain the following fields:

"bugType" : The bug type (16 possible values).
"commitSHA1" : The hash of the commit fixing the bug.
"fixCommitParentSHA1" : The hash of the last commit containing the bug.
"commitFile" : Path of the fixed file.
"patch" : The diff of the buggy and fixed file containing all the changes applied by the fix commit.
"projectName" : The concatenated repo owner and repo name separated by a '.'.
"bugLineNum" : The line in which the bug exists in the buggy version of the file.
"bugNodeStartChar" : The character index (i.e., the number of characters in the java file that must be read before encountering the first one of the AST node) at which the affected ASTNode starts in the buggy version of the file.
"bugNodeLength" : The length of the affected ASTNode in the buggy version of the file.
"fixLineNum" : The line in which the bug was fixed in the fixed version of the file.
"fixNodeStartChar" : The character index (i.e., the number of characters in the java file that must be read before encountering the first one of the AST node) at which the affected ASTNode starts in the fixed version of the file.
"fixNodeLength" : The length of the affected ASTNode in the fixed version of the file.
"sourceBeforeFix" : The affected AST's tree (sometimes subtree e.g. Change Numeric Literal) text before the fix.
"sourceAfterFix" : The affected AST's tree (sometimes subtree e.g. Change Numeric Literal) text after the fix.

The "sourceBeforeFix", "sourceAfterFix", "patch" fields help humans to understand the change.
The "sourceBeforeFix", "sourceAfterFix", "patch" fields are currently not available for the Missing Throws Exception and Delete Throws Exception patterns due to a bug.
We have fixed this and we will provide an updated version.
The "bugLineNum", "bugNodeStartChar", "bugNodeLength", "fixLineNum", "fixNodeStartChar", and "fixNodeLength" allow pinpointing of the AST nodes and lines that contained the bug and their equivalent ones in the fixed version of the file.

Similarly the bugs in bugs.json contain the above fields except bugType.
All bugs appearing in sstubs.json have also an entry in bugs.json.

Examples for Each SStuB Pattern

A quick overview of each SStuB pattern follows along with an example from the dataset

Change Identifier Used

This pattern checks whether an identifier appearing in some expression in the statement was replaced with an other one. It is easy for developers to by accident utilize a different identifier than the intended one that has the same type. Copy pasting code is a potential source of such errors. Identifiers with similar names may further contribute to the occurrence of such errors.
Change Identifier Used example patch:

diff --git a/common/src/main/java/com/google/auto/common/MoreTypes.java b/common/src/main/java/com/google/auto/common/MoreTypes.java
index d0f40a9..1319092 100644
--- a/common/src/main/java/com/google/auto/common/MoreTypes.java
+++ b/common/src/main/java/com/google/auto/common/MoreTypes.java
@@ -738,7 +738,7 @@
    * Returns a {@link WildcardType} if the {@link TypeMirror} represents a wildcard type or throws
    * an {@link IllegalArgumentException}.
    */
-  public static WildcardType asWildcard(WildcardType maybeWildcardType) {
+  public static WildcardType asWildcard(TypeMirror maybeWildcardType) {
     return maybeWildcardType.accept(WildcardTypeVisitor.INSTANCE, null);
   }

Change Numeric Literal

This pattern Checks whether a numeric literal was replaced with another one. It is easy for developers to mix two numeric values in their program.
Change Numeric Literal example patch:

diff --git a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarConcurrentConsumerInTest.java b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarConcurrentConsumerInTest.java
index dcd3a02..1d25f25 100644
--- a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarConcurrentConsumerInTest.java
+++ b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarConcurrentConsumerInTest.java
@@ -90,12 +90,12 @@
     }
 
     private PulsarClient concurrentPulsarClient() throws PulsarClientException {
-        return new ClientBuilderImpl().serviceUrl(getPulsarBrokerUrl()).ioThreads(2).listenerThreads(5).build();
+        return new ClientBuilderImpl().serviceUrl(getPulsarBrokerUrl()).ioThreads(5).listenerThreads(5).build();
     }

Change Boolean Literal

This pattern checks whether a Boolean literal was replaced. True is replaced with False and vice-versa. In many cases developers use the opposite Boolean value than the intended one.
Change Boolean Literal example patch:

diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsObjectFactory.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsObjectFactory.java
index 3ed3a24..382ed68 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsObjectFactory.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsObjectFactory.java
@@ -88,7 +88,8 @@
             String messageSelector, 
             boolean topic, 
             String durableSubscriptionId) throws Exception {
-        return createMessageConsumer(session, destinationName, messageSelector, topic, durableSubscriptionId, true);
+        // noLocal is default false accordingly to JMS spec
+        return createMessageConsumer(session, destinationName, messageSelector, topic, durableSubscriptionId, false);
     }

Change Modifier

This pattern checks whether a variable, function, or class was declared with the wrong modifiers. For example a developer can forget to declare one of the modifiers.
Change Modifier example patch:

diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/BaseCheckTestSupport.java b/src/test/java/com/puppycrawl/tools/checkstyle/BaseCheckTestSupport.java
index 67f89b8..c3b3ebf 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/BaseCheckTestSupport.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/BaseCheckTestSupport.java
@@ -100,7 +100,7 @@
                 + filename).getCanonicalPath();
     }
 
-    protected void verifyAst(String expectedTextPrintFileName, String actualJavaFileName)
+    protected static void verifyAst(String expectedTextPrintFileName, String actualJavaFileName)
             throws Exception {
         verifyAst(expectedTextPrintFileName, actualJavaFileName, false);
     }

Wrong Function Name

This pattern checks whether the wrong function was called. Functions with similar names and the same signature are usual pitfall for developers.
Wrong Function Name example patch:

diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/ConfigurationPanel.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/ConfigurationPanel.java
index f28c614..f295bd3 100644
--- a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/ConfigurationPanel.java
+++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/ConfigurationPanel.java
@@ -130,7 +130,7 @@
     }
 
     private boolean canChangeTimeRepresentation(GraphModel graphModel) {
-        if (graphModel.getGraph().getEdgeCount() > 0) {
+        if (graphModel.getGraph().getNodeCount() > 0) {
             return false;//Graph has to be empty
         }

Same Function More Args

This pattern checks whether an overloaded version of the function with more arguments was called. Functions with multiple overload can often confuse developers.
Same Function More Args example patch:

diff --git a/ee/src/main/java/org/jboss/as/ee/component/ComponentDescription.java b/ee/src/main/java/org/jboss/as/ee/component/ComponentDescription.java
index f9b99d2..76f83cc 100644
--- a/ee/src/main/java/org/jboss/as/ee/component/ComponentDescription.java
+++ b/ee/src/main/java/org/jboss/as/ee/component/ComponentDescription.java
@@ -543,7 +543,7 @@
                     configuration.getModuleName(),
                     configuration.getApplicationName()
             );
-            injectionConfiguration.getSource().getResourceValue(serviceBuilder, context, managedReferenceFactoryValue);
+            injectionConfiguration.getSource().getResourceValue(resolutionContext, serviceBuilder, context, managedReferenceFactoryValue);
         }
     }
 }

Same Function Less Args

This pattern checks whether an overloaded version of the function with less arguments was called. For instance, a developer can forget to specify one of the arguments and not realize it if the code still compiles due to function overloading.
Same Function Less Args example patch:

diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java
index 19b49e7..3a87b7f 100644
--- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java
+++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java
@@ -167,7 +167,7 @@
             final long now = clockSource.currentTime();
             if (poolEntry.evict || (clockSource.elapsedMillis(poolEntry.lastAccessed, now) > ALIVE_BYPASS_WINDOW_MS && !isConnectionAlive(poolEntry.connection))) {
                closeConnection(poolEntry, \"(connection evicted or dead)\"); // Throw away the dead connection and try again
-               timeout = hardTimeout - clockSource.elapsedMillis(startTime, now);
+               timeout = hardTimeout - clockSource.elapsedMillis(startTime);
             }
             else {
                metricsTracker.recordBorrowStats(poolEntry, startTime);

Same Function Change Caller

This pattern checks whether in a function call expression the caller object for it was replaced with another one. When there are multiple variables with the same type a developer can accidentally perform an operation. Copy pasting code is a potential source of such errors. Variables with similar names can also further contribute to the occurrence of such errors.
Same Function Change Caller example patch:

diff --git a/metrics-servlet/src/test/java/com/yammer/metrics/reporting/tests/AdminServletTest.java b/metrics-servlet/src/test/java/com/yammer/metrics/reporting/tests/AdminServletTest.java
index e9d1b4e..4f8601e
--- a/metrics-servlet/src/test/java/com/yammer/metrics/reporting/tests/AdminServletTest.java
+++ b/metrics-servlet/src/test/java/com/yammer/metrics/reporting/tests/AdminServletTest.java
@@ -42,7 +42,7 @@
 
     @Before
     public void setUp() throws Exception {
-        when(context.getContextPath()).thenReturn(\"/context\");
+        when(request.getContextPath()).thenReturn(\"/context\");
 
         when(config.getServletContext()).thenReturn(context);

Same Function Swap Args

This pattern checks whether a function was called with two of its arguments swapped. When multiple arguments of a function are of the same type, if developers do not accurately remember what each argument represents then they can easily swap two such arguments without realizing it.
Same Function Swap Args example patch:

diff --git a/servers/src/main/java/tachyon/master/BlockInfo.java b/servers/src/main/java/tachyon/master/BlockInfo.java
index 10f3b21..ec659db 100644
--- a/servers/src/main/java/tachyon/master/BlockInfo.java
+++ b/servers/src/main/java/tachyon/master/BlockInfo.java
@@ -187,7 +187,8 @@
           } catch (NumberFormatException nfe) {
             continue;
           }
-          ret.add(new NetAddress(resolvedHost, resolvedPort, -1));
+          // The resolved port is the data transfer port not the rpc port
+          ret.add(new NetAddress(resolvedHost, -1, resolvedPort));
         }
       }
     }

Change Binary Operator

This pattern checks whether a binary operand was accidentally replaced with another one of the same type. For example, developers very often mix comparison operators in expressions.
Change Binary Operator example patch:

diff --git a/core/server/worker/src/main/java/alluxio/worker/netty/DataServerReadHandler.java b/core/server/worker/src/main/java/alluxio/worker/netty/DataServerReadHandler.java
index 97a07fa..195d89a 100644
--- a/core/server/worker/src/main/java/alluxio/worker/netty/DataServerReadHandler.java
+++ b/core/server/worker/src/main/java/alluxio/worker/netty/DataServerReadHandler.java
@@ -393,7 +393,7 @@
     @GuardedBy(\"mLock\")
     private boolean shouldRestartPacketReader() {
       return !mPacketReaderActive && !tooManyPendingPackets() && mPosToQueue < mRequest.mEnd
-          && mError != null && !mCancel && !mEof;
+          && mError == null && !mCancel && !mEof;
     }
   }

Change Unary Operator

This pattern checks whether a unary operand was accidentally replaced with another one of the same type. For example, developers very often may forget the ! operator in a boolean expression.
Change Unary Operator example patch:

diff --git a/core/client/src/main/java/alluxio/client/file/FileInStream.java b/core/client/src/main/java/alluxio/client/file/FileInStream.java
index b263009..5592db2 100644
--- a/core/client/src/main/java/alluxio/client/file/FileInStream.java
+++ b/core/client/src/main/java/alluxio/client/file/FileInStream.java
@@ -454,7 +454,7 @@
 
     // If this block is read from a remote worker but we don't have a local worker, don't cache
     if (mCurrentBlockInStream instanceof RemoteBlockInStream
-        && BlockStoreContext.INSTANCE.hasLocalWorker()) {
+        && !BlockStoreContext.INSTANCE.hasLocalWorker()) {
       return;
     }

Change Operand

This pattern checks whether one of the operands in a binary operation was wrong.
Change Operand example patch:

diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/StandardGraphIO.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/StandardGraphIO.java
index fd49c8a..67b74a9 100644
--- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/StandardGraphIO.java
+++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/StandardGraphIO.java
@@ -470,7 +470,7 @@
         float newCameraLocation = Math.max(newCameraLocationX, newCameraLocationY);
 
         graphDrawable.cameraLocation[0] = limits.getMinXoctree() + graphWidth / 2;
-        graphDrawable.cameraLocation[1] = limits.getMinYoctree() + graphWidth / 2;
+        graphDrawable.cameraLocation[1] = limits.getMinYoctree() + graphHeight / 2;
         graphDrawable.cameraLocation[2] = newCameraLocation;
 
         graphDrawable.cameraTarget[0] = graphDrawable.cameraLocation[0];

More Specific If

This pattern checks whether an extra condition (&& operand) was added in an if statement’s condition.
More Specific If example patch:

diff --git a/hazelcast/src/main/java/com/hazelcast/impl/ConcurrentMapManager.java b/hazelcast/src/main/java/com/hazelcast/impl/ConcurrentMapManager.java
index b01c711..85eb787 100644
--- a/hazelcast/src/main/java/com/hazelcast/impl/ConcurrentMapManager.java
+++ b/hazelcast/src/main/java/com/hazelcast/impl/ConcurrentMapManager.java
@@ -546,7 +546,7 @@
         }
         for (Future\u003cPairs\u003e future : lsFutures) {
             Pairs pairs = future.get();
-            if (pairs != null) {
+            if (pairs != null && pairs.getKeyValues()!=null) {
                 for (KeyValue keyValue : pairs.getKeyValues()) {
                     results.addKeyValue(keyValue);
                 }

Less Specific If

This pattern checks whether an extra condition which either this or the original one needs to hold (∥ operand) was added in an if statement’s condition.
Less Specific If example patch:

diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java
index baea6e8..aeca799 100644
--- a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java
+++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java
@@ -999,7 +999,7 @@
                 }
             }
         }
-        if (subtypeProps.isEmpty()) {
+        if (subtypeProps == null || subtypeProps.isEmpty()) {
             child.setProperties(null);
         }
     }

Missing Throws Exception

This pattern checks whether the fix added a throws clause in a function declaration.
Missing Throws Exception example patch:

diff --git a/example/src/main/java/io/netty/example/securechat/SecureChatServer.java b/example/src/main/java/io/netty/example/securechat/SecureChatServer.java
index 6dad108..19a9dac 100644
--- a/example/src/main/java/io/netty/example/securechat/SecureChatServer.java
+++ b/example/src/main/java/io/netty/example/securechat/SecureChatServer.java
@@ -31,7 +31,7 @@
         this.port \u003d port;
     }
 
-    public void run() {
+    public void run() throws InterruptedException {
         ServerBootstrap b \u003d new ServerBootstrap();
         try {
             b.eventLoop(new NioEventLoop(), new NioEventLoop())

Delete Throws Exception

This pattern checks whether the fix deleted an throws clause in a function declaration.
Delete Throws Exception example patch:

diff --git a/core/server/src/main/java/tachyon/web/WebInterfaceAbstractMetricsServlet.java b/core/server/src/main/java/tachyon/web/WebInterfaceAbstractMetricsServlet.java
index 23ae5cd..2773882 100644
--- a/core/server/src/main/java/tachyon/web/WebInterfaceAbstractMetricsServlet.java
+++ b/core/server/src/main/java/tachyon/web/WebInterfaceAbstractMetricsServlet.java
@@ -43,13 +43,12 @@
   }
 
   /**
-   * Populates key, value pairs for UI display.
+   * Populates operation metrics for displaying in the UI
    *
    * @param request The {@link HttpServletRequest} object
-   * @throws IOException if an I/O error occurs
    */
   protected void populateCountersValues(Map<String, Metric> operations,
-      Map<String, Counter> rpcInvocations, HttpServletRequest request) throws IOException {
+      Map<String, Counter> rpcInvocations, HttpServletRequest request){
 
     for (Map.Entry<String, Metric> entry : operations.entrySet()) {
       if (entry.getValue() instanceof Gauge) {

minesstubs's People

Contributors

monperrus avatar mpatsis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

minesstubs's Issues

Incomplete project names and deleted projects

In the large version of the dataset, some project names are incomplete. They only contain the repository name and lack the owner part. This is the list of these projects and their complete names:

Project Name Completed Name
bazel bazelbuild.bazel
netty-in-action normanmaurer.netty-in-action
Intro-To-RxJava Froussios.Intro-To-RxJava
struts apache.struts
killbill killbill.killbill
spring-integration spring-projects.spring-integration
spydroid-ipcamera fyhertz.spydroid-ipcamera
failsafe jhalterman.failsafe
focus-android mozilla-mobile.focus-android
libnd4j deeplearning4j.libnd4j

Also, some projects are moved to another repository (for example, b3log.solo has moved to 88250.solo) or deleted from GitHub (e.g., wyouflf.xUtils). I'm maintaining a list of replacements for these projects here, so it would still be possible to access their commit history.

irrelevant entry in .classpath file of sstubminer

Following is an entry left in the .classpath file which seems to be not relevant and may cause an error while loading the project in eclipse.
<classpathentry kind="lib" path="/home/mpatsis/src/rhino/buildGradle/libs/rhino-1.7.12-SNAPSHOT.jar"/>

Incorrect AST text for Change Modifier pattern?

The content of sourceBeforeFix and sourceAfterFix for CHANGE_MODIFIER pattern seems to be incorrect:

{
    "bugType": "CHANGE_MODIFIER",
    "fixCommitSHA1": "de55ca810b70f8a2dd144d409cb2491dceb16286",
    "fixCommitParentSHA1": "5b7edd00f3941e1fa5ce5bc4dae788d2fab1042d",
    "bugFilePath": "core/server/worker/src/main/java/alluxio/SessionInfo.java",
    "fixPatch": "diff --git a/core/server/worker/src/main/java/alluxio/SessionInfo.java b/core/server/worker/src/main/java/alluxio/SessionInfo.java\nindex 51a2fa5..11432aa 100644\n--- a/core/server/worker/src/main/java/alluxio/SessionInfo.java\n+++ b/core/server/worker/src/main/java/alluxio/SessionInfo.java\n@@ -24,7 +24,7 @@\n   private final long mSessionId;\n \n   private long mLastHeartbeatMs;\n-  private int mSessionTimeoutMs;\n+  private final int mSessionTimeoutMs;\n \n   /**\n    * Creates a new instance of {@link SessionInfo}.\n",
    "projectName": "Alluxio.alluxio",
    "bugLineNum": 27,
    "bugNodeStartChar": 829,
    "bugNodeLength": 30,
    "fixLineNum": 27,
    "fixNodeStartChar": 829,
    "fixNodeLength": 36,
    "sourceBeforeFix": "2",
    "sourceAfterFix": "18"
},
{
    "bugType": "CHANGE_MODIFIER",
    "fixCommitSHA1": "9d46108b66684d82750a5ad01460ab5bc1c16720",
    "fixCommitParentSHA1": "096ec2aa953065fca5141d415d74eaf00e5aa637",
    "bugFilePath": "components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java",
    "fixPatch": "diff --git a/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java b/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java\nindex 347ba0d..e5022b6 100644\n--- a/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java\n+++ b/components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java\n@@ -26,6 +26,6 @@\n      *\n      * @param index the n\u0027th received message\n      */\n-    public void assertOnIndex(int index);\n+    void assertOnIndex(int index);\n \n }\n",
    "projectName": "apache.camel",
    "bugLineNum": 24,
    "bugNodeStartChar": 1015,
    "bugNodeLength": 150,
    "fixLineNum": 24,
    "fixNodeStartChar": 1015,
    "fixNodeLength": 143,
    "sourceBeforeFix": "1",
    "sourceAfterFix": "0"
}

automatic compilation of mineSStuBs?

Hi,

It would be great to be able to simply compile mineSStuBs on the command-line.

What about adding a Maven or Gradle build script in the repo?

Thanks!

--Martin

Wrong line numbers in some bugs

The bugLineNum and fixLineNum for some bugs are off a little. These line numbers usually point to a comment on several lines before where the actual bug happens.

For example, in this bug, the fix happens at line 25, but line 25 is the start of a comment, and the actual fix starts at line 33:

https://github.com/checkstyle/checkstyle/blob/378e87f1e3bf8b2451ca511668954b707680b843/src/checkstyle/com/puppycrawl/tools/checkstyle/LocalizedMessage.java#L25-L33

{
  "bugType": "CHANGE_MODIFIER",
  "fixCommitSHA1": "378e87f1e3bf8b2451ca511668954b707680b843",
  "fixCommitParentSHA1": "f7e86cdf5fc7c68d420f2f279b482ac9d1b5e3ac",
  "bugFilePath": "src/checkstyle/com/puppycrawl/tools/checkstyle/LocalizedMessage.java",
  "fixPatch": "diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/LocalizedMessage.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/LocalizedMessage.java\nindex 723b069..5601884 100644\n--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/LocalizedMessage.java\n+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/LocalizedMessage.java\n@@ -30,7 +30,7 @@\n  * @author <a href=\"mailto:[email protected]\">Oliver Burn</a>\n  * @version 1.0\n  */\n-class LocalizedMessage\n+public class LocalizedMessage\n     implements Comparable\n {\n     /** name of the resource bundle to get messages from **/\n@@ -84,7 +84,7 @@\n     }\n \n     /** @return the translated message **/\n-    String getMessage()\n+    public String getMessage()\n     {\n         // Very simple approach - wait for performance problems\n         final ResourceBundle bundle =\n@@ -94,13 +94,13 @@\n     }\n \n     /** @return the line number **/\n-    int getLineNo()\n+    public int getLineNo()\n     {\n         return mLineNo;\n     }\n \n     /** @return the column number **/\n-    int getColumnNo()\n+    public int getColumnNo()\n     {\n         return mColNo;\n     }\n",
  "projectName": "checkstyle.checkstyle",
  "bugLineNum": 25,
  "bugNodeStartChar": 1146,
  "bugNodeLength": 3344,
  "fixLineNum": 25,
  "fixNodeStartChar": 1146,
  "fixNodeLength": 3351,
  "sourceBeforeFix": "0",
  "sourceAfterFix": "1"
}

Same as this one where the fixed line number is 20:

{
  "bugType": "CHANGE_MODIFIER",
  "fixCommitSHA1": "9e669d7d3d316d5ba01157b4528d80157366305a",
  "fixCommitParentSHA1": "594400d5ed8e299d7a586b7a80fa22fe5794c72c",
  "bugFilePath": "src/main/java/org/bukkit/potion/PotionEffectType.java",
  "fixPatch": "diff --git a/src/main/java/org/bukkit/potion/PotionEffectType.java b/src/main/java/org/bukkit/potion/PotionEffectType.java\nindex d43aea5..8a60055 100644\n--- a/src/main/java/org/bukkit/potion/PotionEffectType.java\n+++ b/src/main/java/org/bukkit/potion/PotionEffectType.java\n@@ -12,99 +12,100 @@\n     /**\n      * Increases movement speed.\n      */\n-    public static PotionEffectType SPEED = new PotionEffectTypeWrapper(1);\n+    public static final PotionEffectType SPEED = new PotionEffectTypeWrapper(1);\n \n     /**\n      * Decreases movement speed.\n      */\n-    public static PotionEffectType SLOW = new PotionEffectTypeWrapper(2);\n+    public static final PotionEffectType SLOW = new PotionEffectTypeWrapper(2);\n \n     /**\n      * Increases dig speed.\n      */\n-    public static PotionEffectType FAST_DIGGING = new PotionEffectTypeWrapper(3);\n+    public static final PotionEffectType FAST_DIGGING = new PotionEffectTypeWrapper(3);\n \n     /**\n      * Decreases dig speed.\n      */\n-    public static PotionEffectType SLOW_DIGGING = new PotionEffectTypeWrapper(4);\n+    public static final PotionEffectType SLOW_DIGGING = new PotionEffectTypeWrapper(4);\n \n     /**\n      * Increases damage dealt.\n      */\n-    public static PotionEffectType INCREASE_DAMAGE = new PotionEffectTypeWrapper(5);\n+    public static final PotionEffectType INCREASE_DAMAGE = new PotionEffectTypeWrapper(5);\n \n     /**\n      * Heals an entity.\n      */\n-    public static PotionEffectType HEAL = new PotionEffectTypeWrapper(6);\n+    public static final PotionEffectType HEAL = new PotionEffectTypeWrapper(6);\n \n     /**\n      * Hurts an entity.\n      */\n-    public static PotionEffectType HARM = new PotionEffectTypeWrapper(7);\n+    public static final PotionEffectType HARM = new PotionEffectTypeWrapper(7);\n \n     /**\n      * Increases jump height.\n      */\n-    public static PotionEffectType JUMP = new PotionEffectTypeWrapper(8);\n+    public static final PotionEffectType JUMP = new PotionEffectTypeWrapper(8);\n \n     /**\n      * Warps vision on the client.\n      */\n-    public static PotionEffectType CONFUSION = new PotionEffectTypeWrapper(9);\n+    public static final PotionEffectType CONFUSION = new PotionEffectTypeWrapper(9);\n \n     /**\n      * Regenerates health.\n      */\n-    public static PotionEffectType REGENERATION = new PotionEffectTypeWrapper(10);\n+    public static final PotionEffectType REGENERATION = new PotionEffectTypeWrapper(10);\n \n     /**\n      * Decreases damage dealt to an entity.\n      */\n-    public static PotionEffectType DAMAGE_RESISTANCE = new PotionEffectTypeWrapper(11);\n+    public static final PotionEffectType DAMAGE_RESISTANCE = new PotionEffectTypeWrapper(11);\n \n     /**\n      * Stops fire damage.\n      */\n-    public static PotionEffectType FIRE_RESISTANCE = new PotionEffectTypeWrapper(12);\n+    public static final PotionEffectType FIRE_RESISTANCE = new PotionEffectTypeWrapper(12);\n \n     /**\n      * Allows breathing underwater.\n      */\n-    public static PotionEffectType WATER_BREATHING = new PotionEffectTypeWrapper(13);\n+    public static final PotionEffectType WATER_BREATHING = new PotionEffectTypeWrapper(13);\n \n     /**\n-     * Grants invisibility.\n+     * Grants invisibility. NOTE: Unusable due to not being implemented by Minecraft.\n      */\n     @Deprecated\n-    public static PotionEffectType INVISIBILITY = new PotionEffectTypeWrapper(14); // unimplemented\n+    public static final PotionEffectType INVISIBILITY = new PotionEffectTypeWrapper(14); // unimplemented\n \n     /**\n      * Blinds an entity.\n      */\n-    public static PotionEffectType BLINDNESS = new PotionEffectTypeWrapper(15);\n+    public static final PotionEffectType BLINDNESS = new PotionEffectTypeWrapper(15);\n \n     /**\n-     * Allows an entity to see in the dark.\n+     * Allows an entity to see in the dark. NOTE: Unusable due to not being \n+     * implemented by Minecraft.\n      */\n     @Deprecated\n-    public static PotionEffectType NIGHT_VISION = new PotionEffectTypeWrapper(16); // unimplemented\n+    public static final PotionEffectType NIGHT_VISION = new PotionEffectTypeWrapper(16); // unimplemented\n \n     /**\n      * Increases hunger.\n      */\n-    public static PotionEffectType HUNGER = new PotionEffectTypeWrapper(17);\n+    public static final PotionEffectType HUNGER = new PotionEffectTypeWrapper(17);\n \n     /**\n      * Decreases damage dealt by an entity.\n      */\n-    public static PotionEffectType WEAKNESS = new PotionEffectTypeWrapper(18);\n+    public static final PotionEffectType WEAKNESS = new PotionEffectTypeWrapper(18);\n \n     /**\n      * Deals damage to an entity over time.\n      */\n-    public static PotionEffectType POISON = new PotionEffectTypeWrapper(19);\n+    public static final PotionEffectType POISON = new PotionEffectTypeWrapper(19);\n \n     private final int id;\n \n",
  "projectName": "Bukkit.Bukkit",
  "bugLineNum": 17,
  "bugNodeStartChar": 357,
  "bugNodeLength": 118,
  "fixLineNum": 17,
  "fixNodeStartChar": 357,
  "fixNodeLength": 124,
  "sourceBeforeFix": "9",
  "sourceAfterFix": "25"
}

Bukkit/Bukkit@9e669d7/src/main/java/org/bukkit/potion/PotionEffectType.java

In the above examples, it is easy to find the intended line, you just go down until the comment finishes, and the next line is the one. However, there are some line numbers that are completely wrong, and there is no clear way to identify them.

For example, in this bug:

{
  "bugType": "OVERLOAD_METHOD_MORE_ARGS",
  "fixCommitSHA1": "0f61fff1d9412a00df98de912cfd295cd3440f38",
  "fixCommitParentSHA1": "33ff3f57c16c40545454c2a368f89fc4e47fc85d",
  "bugFilePath": "modules/activiti-modeler/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java",
  "fixPatch": "diff --git a/modules/activiti-modeler/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java b/modules/activiti-modeler/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java\nindex 903efbc..4502b19 100644\n--- a/modules/activiti-modeler/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java\n+++ b/modules/activiti-modeler/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java\n@@ -27,12 +27,11 @@\n @RestController\n public class StencilsetRestResource {\n \n-  @RequestMapping(value \u003d \"/editor/stencilset\", method \u003d RequestMethod.GET, produces \u003d \"application/json\")\n-  public @ResponseBody\n-  String getStencilset() {\n+  @RequestMapping(value\u003d\"/editor/stencilset\", method \u003d RequestMethod.GET, produces \u003d \"application/json;charset\u003dutf-8\")\n+  public @ResponseBody String getStencilset() {\n     InputStream stencilsetStream \u003d this.getClass().getClassLoader().getResourceAsStream(\"stencilset.json\");\n     try {\n-      return IOUtils.toString(stencilsetStream);\n+      return IOUtils.toString(stencilsetStream, \"utf-8\");\n     } catch (Exception e) {\n       throw new ActivitiException(\"Error while loading stencil set\", e);\n     }\n",
  "projectName": "Activiti.Activiti",
  "bugLineNum": 35,
  "bugNodeStartChar": 1343,
  "bugNodeLength": 34,
  "fixLineNum": 35,
  "fixNodeStartChar": 1343,
  "fixNodeLength": 43,
  "sourceBeforeFix": "IOUtils.toString(stencilsetStream)",
  "sourceAfterFix": "IOUtils.toString(stencilsetStream,\"utf-8\")"
}

The actual fixed line is 34:

Activiti/Activiti@0f61fff/modules/activiti-modeler/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java

Or in this one:

{
  "bugType": "CHANGE_NUMERAL",
  "fixCommitSHA1": "b8a86c4259cf3d058106ef9c0388a86fae42469f",
  "fixCommitParentSHA1": "1982e95061fe991f2a00979cf97a6edadce04833",
  "bugFilePath": "tests/gdx-tests/src/com/badlogic/gdx/tests/TileTest.java",
  "fixPatch": "diff --git a/tests/gdx-tests/src/com/badlogic/gdx/tests/TileTest.java b/tests/gdx-tests/src/com/badlogic/gdx/tests/TileTest.java\nindex 1739621..1740101 100644\n--- a/tests/gdx-tests/src/com/badlogic/gdx/tests/TileTest.java\n+++ b/tests/gdx-tests/src/com/badlogic/gdx/tests/TileTest.java\n@@ -1,3 +1,15 @@\n+/*\r\n+ * Copyright 2010 Mario Zechner ([email protected]), Nathan Sweet ([email protected])\r\n+ * \r\n+ * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the\r\n+ * License. You may obtain a copy of the License at\r\n+ * \r\n+ * http://www.apache.org/licenses/LICENSE-2.0\r\n+ * \r\n+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\"\r\n+ * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language\r\n+ * governing permissions and limitations under the License.\r\n+ */\r\n package com.badlogic.gdx.tests;\r\n \r\n import com.badlogic.gdx.Gdx;\r\n@@ -11,7 +23,7 @@\n import com.badlogic.gdx.tests.utils.GdxTest;\r\n \r\n public class TileTest extends GdxTest {\r\n-\tstatic final int LAYERS \u003d 10;\r\n+\tstatic final int LAYERS \u003d 5;\r\n \tstatic final int BLOCK_TILES \u003d 25;\r\n \tstatic final int WIDTH \u003d 15;\r\n \tstatic final int HEIGHT \u003d 10;\r\n@@ -26,7 +38,7 @@\n \tpublic void create() {\r\n \t\tcam \u003d new OrthographicCamera();\r\n \t\tcam.setViewport(480, 320);\r\n-\t\tcam.getPosition().set(WIDTH*32/2, 10*HEIGHT/2,0);\t\t\r\n+\t\tcam.getPosition().set(WIDTH*32/2, HEIGHT/2,0);\t\t\r\n \t\ttexture \u003d Gdx.graphics.newTexture(Gdx.files.internal(\"data/tiles.png\"), TextureFilter.Nearest, TextureFilter.Nearest, TextureWrap.ClampToEdge, TextureWrap.ClampToEdge);\r\n \t\t\r\n \t\tfor(int i \u003d 0; i \u003c LAYERS; i++) {\r\n",
  "projectName": "libgdx.libgdx",
  "bugLineNum": 14,
  "bugNodeStartChar": 509,
  "bugNodeLength": 11,
  "fixLineNum": 14,
  "fixNodeStartChar": 496,
  "fixNodeLength": 10,
  "sourceBeforeFix": "LAYERS\u003d10",
  "sourceAfterFix": "LAYERS\u003d5"
}

Fixed line is 26:

libgdx/libgdx@b8a86c4/tests/gdx-tests/src/com/badlogic/gdx/tests/TileTest.java

In this one:

{
  "bugType": "CHANGE_IDENTIFIER",
  "fixCommitSHA1": "4974c29d05335dd33f73787a82ff6f91e0cced1e",
  "fixCommitParentSHA1": "dc6b41ea7ba85ae5ed053c82f3f4f09a68f7d827",
  "bugFilePath": "modules/apps/foundation/vulcan/vulcan-api/src/main/java/com/liferay/vulcan/resource/builder/RoutesBuilder.java",
  "fixPatch": "diff --git a/modules/apps/foundation/vulcan/vulcan-api/src/main/java/com/liferay/vulcan/resource/builder/RoutesBuilder.java b/modules/apps/foundation/vulcan/vulcan-api/src/main/java/com/liferay/vulcan/resource/builder/RoutesBuilder.java\nindex eba0f94..fadaf72 100644\n--- a/modules/apps/foundation/vulcan/vulcan-api/src/main/java/com/liferay/vulcan/resource/builder/RoutesBuilder.java\n+++ b/modules/apps/foundation/vulcan/vulcan-api/src/main/java/com/liferay/vulcan/resource/builder/RoutesBuilder.java\n@@ -37,7 +37,7 @@\n  * @author Alejandro Hernández\n  */\n @SuppressWarnings(\"unused\")\n-public interface RoutesBuilder\u003cT\u003e {\n+public interface RoutesBuilder\u003cT, U extends Identifier\u003e {\n \n \t/**\n \t * Constructs the \u003ccode\u003eRoutes\u003c/code\u003e instance with the information provided\n@@ -52,21 +52,18 @@\n \t *\n \t * @param  biFunction the function that will be used to calculate the single\n \t *         model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A\u003e RoutesBuilder\u003cT\u003e collectionItem(\n-\t\tBiFunction\u003cU, A, T\u003e biFunction, Class\u003cU\u003e identifierClass,\n-\t\tClass\u003cA\u003e aClass);\n+\tpublic \u003cA\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n+\t\tBiFunction\u003cU, A, T\u003e biFunction, Class\u003cA\u003e aClass);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  decaFunction the function that will be used to calculate the\n \t *         single model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @param  bClass the class of the third parameter of the single model\n@@ -87,19 +84,17 @@\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E, F, G, H, I\u003e RoutesBuilder\u003cT\u003e\n-\t\tcollectionItem(\n+\tpublic \u003cA, B, C, D, E, F, G, H, I\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n \t\t\tDecaFunction\u003cU, A, B, C, D, E, F, G, H, I, T\u003e decaFunction,\n-\t\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n-\t\t\tClass\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass, Class\u003cF\u003e fClass,\n-\t\t\tClass\u003cG\u003e gClass, Class\u003cH\u003e hClass, Class\u003cI\u003e iClass);\n+\t\tClass\u003cA\u003e aClass, Class\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass,\n+\t\tClass\u003cE\u003e eClass, Class\u003cF\u003e fClass, Class\u003cG\u003e gClass, Class\u003cH\u003e hClass,\n+\t\tClass\u003cI\u003e iClass);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  enneaFunction the function that will be used to calculate the\n \t *         single model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @param  bClass the class of the third parameter of the single model\n@@ -118,30 +113,25 @@\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E, F, G, H\u003e RoutesBuilder\u003cT\u003e\n-\t\tcollectionItem(\n+\tpublic \u003cA, B, C, D, E, F, G, H\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n \t\t\tEnneaFunction\u003cU, A, B, C, D, E, F, G, H, T\u003e enneaFunction,\n-\t\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n-\t\t\tClass\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass, Class\u003cF\u003e fClass,\n-\t\t\tClass\u003cG\u003e gClass, Class\u003cH\u003e hClass);\n+\t\tClass\u003cA\u003e aClass, Class\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass,\n+\t\tClass\u003cE\u003e eClass, Class\u003cF\u003e fClass, Class\u003cG\u003e gClass, Class\u003cH\u003e hClass);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  function the function that will be used to calculate the single\n \t *         model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier\u003e RoutesBuilder\u003cT\u003e collectionItem(\n-\t\tFunction\u003cU, T\u003e function, Class\u003cU\u003e identifierClass);\n+\tpublic RoutesBuilder\u003cT, U\u003e collectionItem(Function\u003cU, T\u003e function);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  heptaFunction the function that will be used to calculate the\n \t *         single model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @param  bClass the class of the third parameter of the single model\n@@ -156,18 +146,16 @@\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E, F\u003e RoutesBuilder\u003cT\u003e\n-\t\tcollectionItem(\n-\t\t\tHeptaFunction\u003cU, A, B, C, D, E, F, T\u003e heptaFunction,\n-\t\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n-\t\t\tClass\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass, Class\u003cF\u003e fClass);\n+\tpublic \u003cA, B, C, D, E, F\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n+\t\tHeptaFunction\u003cU, A, B, C, D, E, F, T\u003e heptaFunction, Class\u003cA\u003e aClass,\n+\t\tClass\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass,\n+\t\tClass\u003cF\u003e fClass);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  hexaFunction the function that will be used to calculate the\n \t *         single model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @param  bClass the class of the third parameter of the single model\n@@ -180,18 +168,15 @@\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E\u003e RoutesBuilder\u003cT\u003e\n-\t\tcollectionItem(\n-\t\t\tHexaFunction\u003cU, A, B, C, D, E, T\u003e hexaFunction,\n-\t\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n-\t\t\tClass\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass);\n+\tpublic \u003cA, B, C, D, E\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n+\t\tHexaFunction\u003cU, A, B, C, D, E, T\u003e hexaFunction, Class\u003cA\u003e aClass,\n+\t\tClass\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  octaFunction the function that will be used to calculate the\n \t *         single model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @param  bClass the class of the third parameter of the single model\n@@ -208,19 +193,16 @@\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E, F, G\u003e RoutesBuilder\u003cT\u003e\n-\t\tcollectionItem(\n-\t\t\tOctaFunction\u003cU, A, B, C, D, E, F, G, T\u003e octaFunction,\n-\t\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n-\t\t\tClass\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass, Class\u003cF\u003e fClass,\n-\t\t\tClass\u003cG\u003e gClass);\n+\tpublic \u003cA, B, C, D, E, F, G\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n+\t\tOctaFunction\u003cU, A, B, C, D, E, F, G, T\u003e octaFunction, Class\u003cA\u003e aClass,\n+\t\tClass\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass,\n+\t\tClass\u003cF\u003e fClass, Class\u003cG\u003e gClass);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  pentaFunction the function that will be used to calculate the\n \t *         single model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @param  bClass the class of the third parameter of the single model\n@@ -231,16 +213,15 @@\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D\u003e RoutesBuilder\u003cT\u003e collectionItem(\n-\t\tPentaFunction\u003cU, A, B, C, D, T\u003e pentaFunction, Class\u003cU\u003e identifierClass,\n-\t\tClass\u003cA\u003e aClass, Class\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass);\n+\tpublic \u003cA, B, C, D\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n+\t\tPentaFunction\u003cU, A, B, C, D, T\u003e pentaFunction, Class\u003cA\u003e aClass,\n+\t\tClass\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  tetraFunction the function that will be used to calculate the\n \t *         single model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @param  bClass the class of the third parameter of the single model\n@@ -249,25 +230,23 @@\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C\u003e RoutesBuilder\u003cT\u003e collectionItem(\n-\t\tTetraFunction\u003cU, A, B, C, T\u003e tetraFunction, Class\u003cU\u003e identifierClass,\n-\t\tClass\u003cA\u003e aClass, Class\u003cB\u003e bClass, Class\u003cC\u003e cClass);\n+\tpublic \u003cA, B, C\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n+\t\tTetraFunction\u003cU, A, B, C, T\u003e tetraFunction, Class\u003cA\u003e aClass,\n+\t\tClass\u003cB\u003e bClass, Class\u003cC\u003e cClass);\n \n \t/**\n \t * Adds a route to a single model function.\n \t *\n \t * @param  triFunction the function that will be used to calculate the\n \t *         single model.\n-\t * @param  identifierClass the class of the identifier.\n \t * @param  aClass the class of the second parameter of the single model\n \t *         function.\n \t * @param  bClass the class of the third parameter of the single model\n \t *         function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B\u003e RoutesBuilder\u003cT\u003e collectionItem(\n-\t\tTriFunction\u003cU, A, B, T\u003e triFunction, Class\u003cU\u003e identifierClass,\n-\t\tClass\u003cA\u003e aClass, Class\u003cB\u003e bClass);\n+\tpublic \u003cA, B\u003e RoutesBuilder\u003cT, U\u003e collectionItem(\n+\t\tTriFunction\u003cU, A, B, T\u003e triFunction, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass);\n \n \t/**\n \t * Adds a route to a collection page function.\n@@ -276,9 +255,9 @@\n \t * @param  identifierClass the class of the identifier.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier\u003e RoutesBuilder\u003cT\u003e collectionPage(\n-\t\tBiFunction\u003cPagination, U, PageItems\u003cT\u003e\u003e biFunction,\n-\t\tClass\u003cU\u003e identifierClass);\n+\tpublic \u003cV extends Identifier\u003e RoutesBuilder\u003cT, U\u003e collectionPage(\n+\t\tBiFunction\u003cPagination, V, PageItems\u003cT\u003e\u003e biFunction,\n+\t\tClass\u003cV\u003e identifierClass);\n \n \t/**\n \t * Adds a route to a collection page function.\n@@ -296,10 +275,10 @@\n \t * @param  hClass the class of the ninth parameter of the page function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E, F, G, H\u003e RoutesBuilder\u003cT\u003e\n+\tpublic \u003cV extends Identifier, A, B, C, D, E, F, G, H\u003e RoutesBuilder\u003cT, U\u003e\n \t\tcollectionPage(\n-\t\t\tDecaFunction\u003cPagination, U, A, B, C, D, E, F, G, H,\n-\t\t\t\tPageItems\u003cT\u003e\u003e decaFunction, Class\u003cU\u003e identifierClass,\n+\t\t\tDecaFunction\u003cPagination, V, A, B, C, D, E, F, G, H,\n+\t\t\t\tPageItems\u003cT\u003e\u003e decaFunction, Class\u003cV\u003e identifierClass,\n \t\t\tClass\u003cA\u003e aClass, Class\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass,\n \t\t\tClass\u003cE\u003e eClass, Class\u003cF\u003e fClass, Class\u003cG\u003e gClass, Class\u003cH\u003e hClass);\n \n@@ -318,10 +297,10 @@\n \t * @param  gClass the class of the eighth parameter of the page function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E, F, G\u003e RoutesBuilder\u003cT\u003e\n+\tpublic \u003cV extends Identifier, A, B, C, D, E, F, G\u003e RoutesBuilder\u003cT, U\u003e\n \t\tcollectionPage(\n-\t\t\tEnneaFunction\u003cPagination, U, A, B, C, D, E, F, G, PageItems\u003cT\u003e\u003e\n-\t\t\t\tenneaFunction, Class\u003cU\u003e identifierClass, Class\u003cA\u003e aClass,\n+\t\t\tEnneaFunction\u003cPagination, V, A, B, C, D, E, F, G, PageItems\u003cT\u003e\u003e\n+\t\t\t\tenneaFunction, Class\u003cV\u003e identifierClass, Class\u003cA\u003e aClass,\n \t\t\tClass\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass,\n \t\t\tClass\u003cF\u003e fClass, Class\u003cG\u003e gClass);\n \n@@ -338,10 +317,10 @@\n \t * @param  eClass the class of the sixth parameter of the page function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E\u003e RoutesBuilder\u003cT\u003e\n+\tpublic \u003cV extends Identifier, A, B, C, D, E\u003e RoutesBuilder\u003cT, U\u003e\n \t\tcollectionPage(\n-\t\t\tHeptaFunction\u003cPagination, U, A, B, C, D, E, PageItems\u003cT\u003e\u003e\n-\t\t\t\theptaFunction, Class\u003cU\u003e identifierClass, Class\u003cA\u003e aClass,\n+\t\t\tHeptaFunction\u003cPagination, V, A, B, C, D, E, PageItems\u003cT\u003e\u003e\n+\t\t\t\theptaFunction, Class\u003cV\u003e identifierClass, Class\u003cA\u003e aClass,\n \t\t\tClass\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass);\n \n \t/**\n@@ -356,9 +335,10 @@\n \t * @param  dClass the class of the fifth parameter of the page function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D\u003e RoutesBuilder\u003cT\u003e collectionPage(\n-\t\tHexaFunction\u003cPagination, U, A, B, C, D, PageItems\u003cT\u003e\u003e hexaFunction,\n-\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n+\tpublic \u003cV extends Identifier, A, B, C, D\u003e RoutesBuilder\u003cT, U\u003e\n+\t\tcollectionPage(\n+\t\t\tHexaFunction\u003cPagination, V, A, B, C, D, PageItems\u003cT\u003e\u003e hexaFunction,\n+\t\t\tClass\u003cV\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n \t\tClass\u003cC\u003e cClass, Class\u003cD\u003e dClass);\n \n \t/**\n@@ -375,10 +355,10 @@\n \t * @param  fClass the class of the seventh parameter of the page function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C, D, E, F\u003e RoutesBuilder\u003cT\u003e\n+\tpublic \u003cV extends Identifier, A, B, C, D, E, F\u003e RoutesBuilder\u003cT, U\u003e\n \t\tcollectionPage(\n-\t\t\tOctaFunction\u003cPagination, U, A, B, C, D, E, F, PageItems\u003cT\u003e\u003e\n-\t\t\t\toctaFunction, Class\u003cU\u003e identifierClass, Class\u003cA\u003e aClass,\n+\t\t\tOctaFunction\u003cPagination, V, A, B, C, D, E, F, PageItems\u003cT\u003e\u003e\n+\t\t\t\toctaFunction, Class\u003cV\u003e identifierClass, Class\u003cA\u003e aClass,\n \t\t\tClass\u003cB\u003e bClass, Class\u003cC\u003e cClass, Class\u003cD\u003e dClass, Class\u003cE\u003e eClass,\n \t\t\tClass\u003cF\u003e fClass);\n \n@@ -393,9 +373,9 @@\n \t * @param  cClass the class of the fourth parameter of the page function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B, C\u003e RoutesBuilder\u003cT\u003e collectionPage(\n-\t\tPentaFunction\u003cPagination, U, A, B, C, PageItems\u003cT\u003e\u003e pentaFunction,\n-\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n+\tpublic \u003cV extends Identifier, A, B, C\u003e RoutesBuilder\u003cT, U\u003e collectionPage(\n+\t\tPentaFunction\u003cPagination, V, A, B, C, PageItems\u003cT\u003e\u003e pentaFunction,\n+\t\tClass\u003cV\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass,\n \t\tClass\u003cC\u003e cClass);\n \n \t/**\n@@ -408,9 +388,9 @@\n \t * @param  bClass the class of the third parameter of the page function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A, B\u003e RoutesBuilder\u003cT\u003e collectionPage(\n-\t\tTetraFunction\u003cPagination, U, A, B, PageItems\u003cT\u003e\u003e tetraFunction,\n-\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass);\n+\tpublic \u003cV extends Identifier, A, B\u003e RoutesBuilder\u003cT, U\u003e collectionPage(\n+\t\tTetraFunction\u003cPagination, V, A, B, PageItems\u003cT\u003e\u003e tetraFunction,\n+\t\tClass\u003cV\u003e identifierClass, Class\u003cA\u003e aClass, Class\u003cB\u003e bClass);\n \n \t/**\n \t * Adds a route to a collection page function.\n@@ -421,8 +401,8 @@\n \t * @param  aClass the class of the second parameter of the page function.\n \t * @return the updated builder.\n \t */\n-\tpublic \u003cU extends Identifier, A\u003e RoutesBuilder\u003cT\u003e collectionPage(\n-\t\tTriFunction\u003cPagination, U, A, PageItems\u003cT\u003e\u003e triFunction,\n-\t\tClass\u003cU\u003e identifierClass, Class\u003cA\u003e aClass);\n+\tpublic \u003cV extends Identifier, A\u003e RoutesBuilder\u003cT, U\u003e collectionPage(\n+\t\tTriFunction\u003cPagination, V, A, PageItems\u003cT\u003e\u003e triFunction,\n+\t\tClass\u003cV\u003e identifierClass, Class\u003cA\u003e aClass);\n \n }\n\\ No newline at end of file\n",
  "projectName": "liferay.liferay-portal",
  "bugLineNum": 424,
  "bugNodeStartChar": 17769,
  "bugNodeLength": 20,
  "fixLineNum": 424,
  "fixNodeStartChar": 17769,
  "fixNodeLength": 20,
  "sourceBeforeFix": "U extends Identifier",
  "sourceAfterFix": "V extends Identifier"
}

The file only has 408 lines but the fixLineNum is 424:

liferay/liferay-portal@4974c29/modules/apps/foundation/vulcan/vulcan-api/src/main/java/com/liferay/vulcan/resource/builder/RoutesBuilder.java

More examples
{
  "bugType": "CHANGE_OPERATOR",
  "fixCommitSHA1": "1876ac4a290bfeb7a4321c3232169dabd97367cf",
  "fixCommitParentSHA1": "fd928ffb92f336a7ff7af8b65ecf62e4c636537e",
  "bugFilePath": "source/com/intellij/lexer/__XmlLexer.java",
  "fixPatch": "diff --git a/source/com/intellij/lexer/__XmlLexer.java b/source/com/intellij/lexer/__XmlLexer.java\nindex a762a35..597e50d 100644\n--- a/source/com/intellij/lexer/__XmlLexer.java\n+++ b/source/com/intellij/lexer/__XmlLexer.java\n@@ -1,4 +1,4 @@\n-/* The following code was generated by JFlex 1.4 on 6/3/05 5:06 PM */\n+/* The following code was generated by JFlex 1.4 on 6/18/05 11:34 PM */\n \n  /* It\u0027s an automatically generated code. Do not modify it. */\n package com.intellij.lexer;\n@@ -11,7 +11,7 @@\n /**\n  * This class is a scanner generated by \n  * \u003ca href\u003d\"http://www.jflex.de/\"\u003eJFlex\u003c/a\u003e 1.4\n- * on 6/3/05 5:06 PM from the specification file\n+ * on 6/18/05 11:34 PM from the specification file\n  * \u003ctt\u003eC:/Irida/tools/lexer/_XmlLexer.flex\u003c/tt\u003e\n  */\n public class __XmlLexer implements FlexLexer,ELHostLexer {\n@@ -37,13 +37,13 @@\n    * Translates characters to character classes\n    */\n   private static final String ZZ_CMAP_PACKED \u003d \n-    \"\\11\\0\\2\\3\\1\\0\\2\\3\\22\\0\\1\\3\\1\\12\\1\\54\\1\\37\\1\\4\"+\n-    \"\\1\\0\\1\\22\\1\\55\\5\\0\\1\\10\\1\\7\\1\\57\\12\\2\\1\\1\\1\\25\"+\n-    \"\\1\\11\\1\\60\\1\\21\\1\\56\\1\\0\\1\\16\\1\\51\\1\\14\\1\\15\\1\\45\"+\n-    \"\\1\\41\\2\\1\\1\\53\\2\\1\\1\\52\\1\\47\\1\\1\\1\\42\\1\\44\\2\\1\"+\n-    \"\\1\\46\\1\\17\\1\\50\\3\\1\\1\\43\\1\\1\\1\\13\\1\\0\\1\\20\\1\\0\"+\n-    \"\\1\\1\\1\\0\\1\\26\\1\\35\\4\\41\\1\\23\\4\\1\\1\\23\\1\\36\\1\\34\"+\n-    \"\\1\\30\\1\\27\\1\\32\\1\\1\\1\\31\\1\\24\\1\\33\\2\\1\\1\\40\\2\\1\"+\n+    \"\\11\\0\\2\\3\\1\\0\\2\\3\\22\\0\\1\\3\\1\\13\\1\\55\\1\\40\\1\\4\"+\n+    \"\\1\\0\\1\\23\\1\\56\\5\\0\\1\\10\\1\\7\\1\\60\\12\\2\\1\\11\\1\\26\"+\n+    \"\\1\\12\\1\\61\\1\\22\\1\\57\\1\\0\\1\\17\\1\\52\\1\\15\\1\\16\\1\\46\"+\n+    \"\\1\\42\\2\\1\\1\\54\\2\\1\\1\\53\\1\\50\\1\\1\\1\\43\\1\\45\\2\\1\"+\n+    \"\\1\\47\\1\\20\\1\\51\\3\\1\\1\\44\\1\\1\\1\\14\\1\\0\\1\\21\\1\\0\"+\n+    \"\\1\\7\\1\\0\\1\\27\\1\\36\\4\\42\\1\\24\\4\\1\\1\\24\\1\\37\\1\\35\"+\n+    \"\\1\\31\\1\\30\\1\\33\\1\\1\\1\\32\\1\\25\\1\\34\\2\\1\\1\\41\\2\\1\"+\n     \"\\1\\5\\1\\0\\1\\6\\54\\0\\1\\1\\12\\0\\1\\1\\4\\0\\1\\1\\5\\0\"+\n     \"\\27\\1\\1\\0\\37\\1\\1\\0\\u013f\\1\\31\\0\\162\\1\\4\\0\\14\\1\\16\\0\"+\n     \"\\5\\1\\11\\0\\1\\1\\213\\0\\1\\1\\13\\0\\1\\1\\1\\0\\3\\1\\1\\0\"+\n@@ -112,20 +112,18 @@\n   private static final int [] ZZ_ACTION \u003d zzUnpackAction();\n \n   private static final String ZZ_ACTION_PACKED_0 \u003d\n-    \"\\1\\1\\3\\0\\1\\2\\3\\0\\2\\3\\2\\0\\1\\1\\1\\4\"+\n-    \"\\1\\1\\1\\5\\2\\6\\1\\7\\1\\6\\1\\10\\1\\6\\1\\11\"+\n-    \"\\1\\6\\1\\12\\1\\2\\1\\13\\1\\14\\3\\15\\1\\16\\1\\17\"+\n-    \"\\1\\20\\3\\3\\1\\13\\1\\21\\3\\3\\1\\6\\1\\22\\2\\12\"+\n-    \"\\2\\6\\4\\1\\1\\0\\1\\23\\1\\24\\7\\0\\1\\25\\1\\26\"+\n-    \"\\2\\0\\2\\3\\1\\0\\4\\3\\1\\0\\1\\27\\1\\0\\2\\12\"+\n-    \"\\1\\0\\1\\3\\3\\0\\1\\1\\1\\30\\3\\0\\1\\31\\10\\0\"+\n-    \"\\1\\32\\1\\33\\4\\3\\2\\12\\1\\34\\1\\30\\1\\35\\2\\0\"+\n-    \"\\1\\36\\2\\0\\1\\35\\1\\3\\1\\35\\1\\3\\2\\12\\2\\0\"+\n-    \"\\2\\3\\2\\12\\2\\0\\2\\3\\1\\37\\1\\40\\2\\0\\2\\3\"+\n-    \"\\2\\0\\2\\3\\1\\41\\1\\42\\2\\41\";\n+    \"\\1\\1\\3\\0\\1\\2\\7\\0\\1\\1\\1\\3\\1\\1\\1\\4\"+\n+    \"\\2\\5\\1\\6\\1\\5\\1\\7\\1\\5\\1\\10\\1\\5\\1\\11\"+\n+    \"\\1\\2\\1\\12\\1\\13\\3\\14\\1\\15\\1\\16\\1\\17\\3\\20\"+\n+    \"\\1\\12\\1\\21\\1\\20\\1\\5\\1\\22\\2\\11\\2\\5\\4\\1\"+\n+    \"\\1\\0\\1\\23\\1\\24\\10\\0\\1\\25\\1\\0\\1\\26\\7\\0\"+\n+    \"\\1\\27\\1\\0\\2\\11\\4\\0\\1\\1\\1\\30\\4\\0\\1\\31\"+\n+    \"\\7\\0\\1\\6\\1\\10\\1\\11\\1\\0\\1\\32\\1\\13\\1\\33\"+\n+    \"\\2\\11\\1\\34\\1\\30\\1\\35\\3\\0\\1\\36\\2\\0\\2\\11\"+\n+    \"\\2\\0\\2\\11\\2\\0\\1\\37\\1\\40\\4\\0\\1\\41\\1\\42\";\n \n   private static int [] zzUnpackAction() {\n-    int [] result \u003d new int[143];\n+    int [] result \u003d new int[127];\n     int offset \u003d 0;\n     offset \u003d zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);\n     return result;\n@@ -150,27 +148,25 @@\n   private static final int [] ZZ_ROWMAP \u003d zzUnpackRowMap();\n \n   private static final String ZZ_ROWMAP_PACKED_0 \u003d\n-    \"\\0\\0\\0\\61\\0\\142\\0\\223\\0\\304\\0\\365\\0\\u0126\\0\\u0157\"+\n-    \"\\0\\u0188\\0\\u01b9\\0\\u01ea\\0\\u021b\\0\\u024c\\0\\u027d\\0\\u02ae\\0\\u02df\"+\n-    \"\\0\\u0310\\0\\u0341\\0\\u0372\\0\\u03a3\\0\\u0341\\0\\u03d4\\0\\u0405\\0\\u0436\"+\n-    \"\\0\\u0467\\0\\u0498\\0\\u04c9\\0\\u04fa\\0\\u0341\\0\\u03a3\\0\\u0310\\0\\u0341\"+\n-    \"\\0\\u0341\\0\\u0341\\0\\u052b\\0\\u055c\\0\\u058d\\0\\u0310\\0\\u0341\\0\\u05be\"+\n-    \"\\0\\u05ef\\0\\u0620\\0\\u0651\\0\\u0341\\0\\u0682\\0\\u06b3\\0\\u06e4\\0\\u0715\"+\n-    \"\\0\\u0341\\0\\u0746\\0\\u0777\\0\\u07a8\\0\\u07d9\\0\\u0341\\0\\u0341\\0\\u080a\"+\n-    \"\\0\\u083b\\0\\u086c\\0\\u089d\\0\\u08ce\\0\\u08ff\\0\\u0930\\0\\u0341\\0\\u0341\"+\n-    \"\\0\\u0961\\0\\u0992\\0\\u09c3\\0\\u09f4\\0\\u0a25\\0\\u0a56\\0\\u0a87\\0\\u0ab8\"+\n-    \"\\0\\u0ae9\\0\\u0651\\0\\u0341\\0\\u0b1a\\0\\u0b4b\\0\\u0b7c\\0\\u06e4\\0\\u0341\"+\n-    \"\\0\\u0715\\0\\u0bad\\0\\u0bde\\0\\u0c0f\\0\\u024c\\0\\u0c40\\0\\u0c71\\0\\u0ca2\"+\n-    \"\\0\\u0341\\0\\u0cd3\\0\\u0d04\\0\\u0d35\\0\\u0d66\\0\\u0d97\\0\\u0dc8\\0\\u0df9\"+\n-    \"\\0\\u0e2a\\0\\u0341\\0\\u0341\\0\\u0e5b\\0\\u0e8c\\0\\u0ebd\\0\\u0eee\\0\\u0f1f\"+\n-    \"\\0\\u0f50\\0\\u0341\\0\\u0341\\0\\u0341\\0\\u0f81\\0\\u0fb2\\0\\u0341\\0\\u0fe3\"+\n-    \"\\0\\u1014\\0\\u052b\\0\\u1045\\0\\u05be\\0\\u1076\\0\\u10a7\\0\\u10d8\\0\\u1109\"+\n-    \"\\0\\u113a\\0\\u116b\\0\\u119c\\0\\u11cd\\0\\u11fe\\0\\u122f\\0\\u1260\\0\\u1291\"+\n-    \"\\0\\u12c2\\0\\u0467\\0\\u0467\\0\\u12f3\\0\\u1324\\0\\u1355\\0\\u1386\\0\\u13b7\"+\n-    \"\\0\\u13e8\\0\\u1419\\0\\u144a\\0\\u0341\\0\\u0341\\0\\u052b\\0\\u05be\";\n+    \"\\0\\0\\0\\62\\0\\144\\0\\226\\0\\310\\0\\372\\0\\u012c\\0\\u015e\"+\n+    \"\\0\\u0190\\0\\u01c2\\0\\u01f4\\0\\u0226\\0\\u0258\\0\\u028a\\0\\u02bc\\0\\u02ee\"+\n+    \"\\0\\u0320\\0\\u0352\\0\\u0384\\0\\u03b6\\0\\u0352\\0\\u03e8\\0\\u041a\\0\\u044c\"+\n+    \"\\0\\u047e\\0\\u04b0\\0\\u04e2\\0\\u0514\\0\\u0352\\0\\u03b6\\0\\u0320\\0\\u0352\"+\n+    \"\\0\\u0352\\0\\u0352\\0\\u0352\\0\\u0546\\0\\u03b6\\0\\u0320\\0\\u0352\\0\\u0578\"+\n+    \"\\0\\u05aa\\0\\u0352\\0\\u05dc\\0\\u060e\\0\\u0640\\0\\u0672\\0\\u0352\\0\\u06a4\"+\n+    \"\\0\\u06d6\\0\\u0708\\0\\u073a\\0\\u0352\\0\\u0352\\0\\u076c\\0\\u079e\\0\\u07d0\"+\n+    \"\\0\\u0802\\0\\u0834\\0\\u0866\\0\\u0898\\0\\u08ca\\0\\u0352\\0\\u08fc\\0\\u0352\"+\n+    \"\\0\\u092e\\0\\u0960\\0\\u0992\\0\\u09c4\\0\\u09f6\\0\\u0a28\\0\\u05aa\\0\\u0352\"+\n+    \"\\0\\u0a5a\\0\\u0a8c\\0\\u0abe\\0\\u0640\\0\\u0672\\0\\u0af0\\0\\u0b22\\0\\u0b54\"+\n+    \"\\0\\u0258\\0\\u0b86\\0\\u0bb8\\0\\u0bea\\0\\u0c1c\\0\\u0352\\0\\u0c4e\\0\\u0c80\"+\n+    \"\\0\\u0cb2\\0\\u0ce4\\0\\u0d16\\0\\u0d48\\0\\u0d7a\\0\\u0dac\\0\\u0dde\\0\\u0e10\"+\n+    \"\\0\\u0e42\\0\\u0352\\0\\u0e74\\0\\u0352\\0\\u0ea6\\0\\u0ed8\\0\\u0352\\0\\u0352\"+\n+    \"\\0\\u0352\\0\\u0f0a\\0\\u0f3c\\0\\u0f6e\\0\\u0352\\0\\u0fa0\\0\\u0fd2\\0\\u1004\"+\n+    \"\\0\\u1036\\0\\u1068\\0\\u109a\\0\\u10cc\\0\\u10fe\\0\\u1130\\0\\u1162\\0\\u047e\"+\n+    \"\\0\\u047e\\0\\u1194\\0\\u11c6\\0\\u11f8\\0\\u122a\\0\\u0352\\0\\u0352\";\n \n   private static int [] zzUnpackRowMap() {\n-    int [] result \u003d new int[143];\n+    int [] result \u003d new int[127];\n     int offset \u003d 0;\n     offset \u003d zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);\n     return result;\n@@ -193,120 +189,111 @@\n   private static final int [] ZZ_TRANS \u003d zzUnpackTrans();\n \n   private static final String ZZ_TRANS_PACKED_0 \u003d\n-    \"\\3\\15\\1\\16\\1\\17\\4\\15\\1\\20\\10\\15\\1\\21\\36\\15\"+\n-    \"\\1\\22\\1\\23\\1\\22\\1\\16\\5\\22\\1\\24\\2\\22\\4\\23\"+\n+    \"\\3\\15\\1\\16\\1\\17\\5\\15\\1\\20\\10\\15\\1\\21\\36\\15\"+\n+    \"\\1\\22\\1\\23\\1\\22\\1\\16\\6\\22\\1\\24\\2\\22\\4\\23\"+\n     \"\\1\\22\\1\\25\\1\\21\\2\\23\\1\\22\\11\\23\\1\\22\\14\\23\"+\n-    \"\\3\\22\\1\\26\\2\\22\\1\\27\\7\\22\\1\\24\\2\\22\\4\\27\"+\n+    \"\\3\\22\\1\\26\\2\\22\\1\\27\\10\\22\\1\\24\\2\\22\\4\\27\"+\n     \"\\2\\22\\1\\21\\2\\27\\1\\22\\11\\27\\1\\22\\14\\27\\2\\22\"+\n-    \"\\1\\30\\3\\22\\1\\31\\1\\22\\1\\16\\5\\22\\1\\24\\2\\22\"+\n+    \"\\1\\30\\3\\22\\1\\31\\1\\22\\1\\16\\6\\22\\1\\24\\2\\22\"+\n     \"\\4\\31\\1\\22\\1\\25\\1\\21\\2\\31\\1\\22\\11\\31\\1\\22\"+\n-    \"\\14\\31\\5\\22\\10\\32\\1\\33\\50\\32\\1\\22\\1\\34\\1\\22\"+\n-    \"\\1\\16\\5\\22\\1\\24\\2\\22\\4\\34\\2\\22\\1\\21\\2\\34\"+\n-    \"\\1\\22\\11\\34\\1\\22\\14\\34\\5\\22\\3\\35\\1\\16\\5\\35\"+\n+    \"\\14\\31\\5\\22\\10\\32\\1\\33\\51\\32\\1\\22\\1\\34\\1\\22\"+\n+    \"\\1\\16\\6\\22\\1\\24\\2\\22\\4\\34\\2\\22\\1\\21\\2\\34\"+\n+    \"\\1\\22\\11\\34\\1\\22\\14\\34\\5\\22\\3\\35\\1\\16\\6\\35\"+\n     \"\\1\\36\\10\\35\\1\\37\\31\\35\\1\\40\\1\\41\\2\\35\\1\\42\"+\n-    \"\\11\\22\\1\\24\\10\\22\\1\\21\\36\\22\\4\\43\\1\\44\\4\\43\"+\n-    \"\\1\\45\\10\\43\\1\\46\\31\\43\\1\\47\\4\\43\\4\\50\\1\\51\"+\n-    \"\\4\\50\\1\\52\\10\\50\\1\\46\\32\\50\\1\\47\\3\\50\\1\\22\"+\n-    \"\\1\\31\\1\\22\\1\\16\\5\\22\\1\\24\\1\\22\\1\\53\\4\\31\"+\n-    \"\\1\\22\\1\\54\\1\\21\\2\\31\\1\\22\\11\\31\\1\\22\\4\\31\"+\n-    \"\\1\\55\\1\\31\\1\\56\\5\\31\\1\\57\\1\\60\\3\\22\\20\\61\"+\n-    \"\\1\\62\\40\\61\\3\\15\\1\\0\\1\\63\\4\\15\\1\\0\\10\\15\"+\n-    \"\\1\\0\\36\\15\\3\\0\\1\\16\\55\\0\\4\\15\\1\\63\\1\\64\"+\n-    \"\\3\\15\\1\\0\\10\\15\\1\\0\\36\\15\\12\\0\\1\\65\\43\\0\"+\n-    \"\\1\\66\\1\\67\\2\\0\\1\\70\\12\\0\\4\\70\\3\\0\\1\\71\"+\n-    \"\\1\\70\\1\\0\\1\\72\\3\\70\\1\\73\\1\\70\\1\\74\\2\\70\"+\n-    \"\\1\\75\\14\\70\\67\\0\\2\\23\\4\\0\\2\\23\\3\\0\\4\\23\"+\n-    \"\\3\\0\\2\\23\\1\\0\\11\\23\\1\\0\\14\\23\\17\\0\\1\\76\"+\n-    \"\\67\\0\\1\\77\\40\\0\\2\\27\\4\\0\\2\\27\\3\\0\\4\\27\"+\n-    \"\\3\\0\\2\\27\\1\\0\\11\\27\\1\\0\\14\\27\\26\\0\\1\\100\"+\n-    \"\\40\\0\\2\\31\\4\\0\\2\\31\\3\\0\\4\\31\\3\\0\\2\\31\"+\n-    \"\\1\\0\\11\\31\\1\\0\\14\\31\\5\\0\\10\\32\\1\\101\\60\\32\"+\n-    \"\\1\\102\\50\\32\\1\\0\\2\\34\\4\\0\\2\\34\\3\\0\\4\\34\"+\n-    \"\\3\\0\\2\\34\\1\\0\\11\\34\\1\\0\\14\\34\\5\\0\\4\\43\"+\n-    \"\\1\\0\\15\\43\\1\\0\\31\\43\\1\\0\\4\\43\\4\\103\\1\\104\"+\n-    \"\\1\\105\\14\\103\\1\\0\\31\\103\\1\\0\\4\\103\\4\\43\\1\\0\"+\n-    \"\\5\\43\\1\\106\\7\\43\\1\\0\\31\\43\\1\\0\\4\\43\\4\\50\"+\n-    \"\\1\\0\\15\\50\\1\\0\\32\\50\\1\\0\\3\\50\\4\\107\\1\\110\"+\n-    \"\\1\\105\\14\\107\\1\\0\\32\\107\\1\\0\\3\\107\\4\\50\\1\\0\"+\n-    \"\\5\\50\\1\\111\\7\\50\\1\\0\\32\\50\\1\\0\\3\\50\\20\\112\"+\n-    \"\\1\\113\\33\\112\\1\\114\\4\\112\\1\\0\\2\\31\\4\\0\\2\\31\"+\n+    \"\\12\\22\\1\\24\\10\\22\\1\\21\\36\\22\\4\\43\\1\\44\\5\\43\"+\n+    \"\\1\\45\\10\\43\\1\\46\\31\\43\\1\\47\\10\\43\\1\\50\\5\\43\"+\n+    \"\\1\\45\\10\\43\\1\\46\\32\\43\\1\\47\\3\\43\\1\\22\\1\\31\"+\n+    \"\\1\\22\\1\\16\\6\\22\\1\\24\\1\\22\\1\\51\\4\\31\\1\\22\"+\n+    \"\\1\\52\\1\\21\\2\\31\\1\\22\\11\\31\\1\\22\\4\\31\\1\\53\"+\n+    \"\\1\\31\\1\\54\\5\\31\\1\\55\\1\\56\\3\\22\\21\\57\\1\\60\"+\n+    \"\\40\\57\\3\\15\\1\\0\\1\\61\\5\\15\\1\\0\\10\\15\\1\\0\"+\n+    \"\\36\\15\\3\\0\\1\\16\\56\\0\\4\\15\\1\\61\\1\\62\\4\\15\"+\n+    \"\\1\\0\\10\\15\\1\\0\\36\\15\\13\\0\\1\\63\\43\\0\\1\\64\"+\n+    \"\\1\\65\\2\\0\\1\\66\\13\\0\\4\\66\\3\\0\\1\\67\\1\\66\"+\n+    \"\\1\\0\\1\\70\\3\\66\\1\\71\\1\\66\\1\\72\\2\\66\\1\\73\"+\n+    \"\\14\\66\\70\\0\\2\\23\\4\\0\\2\\23\\1\\74\\3\\0\\4\\23\"+\n+    \"\\3\\0\\2\\23\\1\\0\\11\\23\\1\\0\\14\\23\\20\\0\\1\\75\"+\n+    \"\\70\\0\\1\\76\\40\\0\\2\\27\\4\\0\\2\\27\\1\\77\\3\\0\"+\n+    \"\\4\\27\\3\\0\\2\\27\\1\\0\\11\\27\\1\\0\\14\\27\\27\\0\"+\n+    \"\\1\\100\\40\\0\\2\\31\\4\\0\\2\\31\\1\\101\\3\\0\\4\\31\"+\n+    \"\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\14\\31\\5\\0\\10\\32\"+\n+    \"\\1\\102\\61\\32\\1\\103\\51\\32\\1\\0\\2\\34\\4\\0\\2\\34\"+\n+    \"\\1\\104\\3\\0\\4\\34\\3\\0\\2\\34\\1\\0\\11\\34\\1\\0\"+\n+    \"\\14\\34\\12\\0\\1\\105\\61\\0\\1\\106\\54\\0\\21\\107\\1\\110\"+\n+    \"\\33\\107\\1\\111\\4\\107\\1\\0\\2\\31\\4\\0\\2\\31\\1\\101\"+\n     \"\\3\\0\\4\\31\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\10\\31\"+\n-    \"\\1\\115\\3\\31\\6\\0\\2\\31\\4\\0\\2\\31\\3\\0\\4\\31\"+\n-    \"\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\3\\31\\1\\116\\10\\31\"+\n-    \"\\5\\0\\54\\117\\1\\120\\4\\117\\55\\121\\1\\120\\3\\121\\20\\0\"+\n-    \"\\1\\122\\40\\0\\4\\15\\1\\63\\4\\15\\1\\0\\10\\15\\1\\0\"+\n-    \"\\36\\15\\3\\64\\1\\123\\1\\124\\1\\64\\1\\125\\2\\64\\1\\123\"+\n-    \"\\10\\64\\1\\123\\36\\64\\10\\0\\1\\126\\2\\0\\1\\127\\1\\0\"+\n-    \"\\1\\130\\44\\0\\2\\70\\4\\0\\2\\70\\3\\0\\4\\70\\3\\0\"+\n-    \"\\2\\70\\1\\131\\11\\70\\1\\0\\14\\70\\6\\0\\2\\70\\4\\0\"+\n-    \"\\2\\70\\3\\0\\4\\70\\3\\0\\1\\70\\1\\132\\1\\131\\11\\70\"+\n-    \"\\1\\0\\14\\70\\6\\0\\2\\70\\4\\0\\2\\70\\3\\0\\4\\70\"+\n-    \"\\3\\0\\2\\70\\1\\131\\1\\70\\1\\133\\6\\70\\1\\134\\1\\0\"+\n-    \"\\14\\70\\6\\0\\2\\70\\4\\0\\2\\70\\3\\0\\4\\70\\3\\0\"+\n-    \"\\2\\70\\1\\131\\5\\70\\1\\135\\3\\70\\1\\0\\14\\70\\6\\0\"+\n-    \"\\2\\70\\4\\0\\2\\70\\3\\0\\4\\70\\3\\0\\2\\70\\1\\131\"+\n-    \"\\7\\70\\1\\136\\1\\70\\1\\0\\14\\70\\7\\0\\1\\137\\35\\0\"+\n-    \"\\1\\140\\30\\0\\1\\126\\2\\0\\1\\127\\45\\0\\10\\32\\1\\141\"+\n-    \"\\71\\32\\1\\142\\37\\32\\4\\0\\1\\104\\54\\0\\4\\103\\1\\104\"+\n-    \"\\1\\0\\14\\103\\1\\0\\31\\103\\1\\0\\4\\103\\6\\105\\1\\143\"+\n-    \"\\52\\105\\4\\43\\1\\0\\3\\43\\1\\144\\2\\43\\1\\145\\6\\43\"+\n-    \"\\1\\0\\31\\43\\1\\0\\4\\43\\4\\0\\1\\110\\54\\0\\4\\107\"+\n-    \"\\1\\110\\1\\0\\14\\107\\1\\0\\32\\107\\1\\0\\3\\107\\4\\50\"+\n-    \"\\1\\0\\3\\50\\1\\146\\2\\50\\1\\147\\6\\50\\1\\0\\32\\50\"+\n-    \"\\1\\0\\3\\50\\54\\114\\1\\112\\4\\114\\1\\0\\2\\31\\4\\0\"+\n-    \"\\2\\31\\3\\0\\4\\31\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\"+\n-    \"\\11\\31\\1\\150\\2\\31\\6\\0\\2\\31\\4\\0\\2\\31\\3\\0\"+\n-    \"\\4\\31\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\6\\31\\1\\151\"+\n-    \"\\5\\31\\26\\0\\1\\152\\37\\0\\6\\123\\1\\153\\52\\123\\4\\64\"+\n-    \"\\1\\124\\1\\64\\1\\125\\2\\64\\1\\123\\10\\64\\1\\123\\36\\64\"+\n-    \"\\10\\0\\1\\154\\64\\0\\1\\155\\106\\0\\1\\156\\17\\0\\2\\70\"+\n-    \"\\4\\0\\2\\70\\3\\0\\4\\70\\3\\0\\2\\70\\1\\157\\11\\70\"+\n-    \"\\1\\0\\14\\70\\6\\0\\2\\70\\4\\0\\2\\70\\3\\0\\4\\70\"+\n-    \"\\3\\0\\2\\70\\1\\131\\2\\70\\1\\160\\6\\70\\1\\0\\14\\70\"+\n-    \"\\6\\0\\2\\70\\4\\0\\2\\70\\3\\0\\4\\70\\3\\0\\2\\70\"+\n-    \"\\1\\131\\1\\70\\1\\132\\7\\70\\1\\0\\14\\70\\6\\0\\2\\70\"+\n-    \"\\4\\0\\2\\70\\3\\0\\4\\70\\3\\0\\2\\70\\1\\131\\2\\70\"+\n-    \"\\1\\71\\6\\70\\1\\0\\14\\70\\6\\0\\2\\70\\4\\0\\2\\70\"+\n-    \"\\3\\0\\4\\70\\3\\0\\2\\70\\1\\131\\3\\70\\1\\134\\5\\70\"+\n-    \"\\1\\0\\14\\70\\7\\0\\1\\137\\22\\0\\1\\157\\35\\0\\1\\161\"+\n-    \"\\11\\0\\3\\161\\7\\0\\1\\161\\6\\0\\1\\161\\3\\0\\1\\161\"+\n-    \"\\3\\0\\1\\161\\3\\0\\1\\161\\7\\0\\21\\32\\1\\0\\37\\32\"+\n-    \"\\4\\43\\1\\0\\3\\43\\1\\162\\11\\43\\1\\0\\31\\43\\1\\0\"+\n-    \"\\10\\43\\1\\0\\7\\43\\1\\163\\5\\43\\1\\0\\31\\43\\1\\0\"+\n-    \"\\4\\43\\4\\50\\1\\0\\3\\50\\1\\164\\11\\50\\1\\0\\32\\50\"+\n-    \"\\1\\0\\7\\50\\1\\0\\7\\50\\1\\165\\5\\50\\1\\0\\32\\50\"+\n-    \"\\1\\0\\3\\50\\1\\0\\2\\31\\4\\0\\2\\31\\3\\0\\4\\31\"+\n-    \"\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\12\\31\\1\\166\\1\\31\"+\n-    \"\\6\\0\\2\\31\\4\\0\\2\\31\\3\\0\\3\\31\\1\\167\\3\\0\"+\n-    \"\\2\\31\\1\\0\\11\\31\\1\\0\\14\\31\\22\\0\\1\\170\\57\\0\"+\n-    \"\\1\\171\\45\\0\\2\\70\\4\\0\\2\\70\\3\\0\\4\\70\\3\\0\"+\n-    \"\\2\\70\\1\\131\\3\\70\\1\\132\\5\\70\\1\\0\\14\\70\\7\\0\"+\n-    \"\\1\\161\\11\\0\\3\\161\\6\\0\\1\\157\\1\\161\\6\\0\\1\\161\"+\n-    \"\\3\\0\\1\\161\\3\\0\\1\\161\\3\\0\\1\\161\\7\\0\\4\\43\"+\n-    \"\\1\\0\\10\\43\\1\\172\\4\\43\\1\\0\\31\\43\\1\\0\\4\\43\"+\n-    \"\\4\\50\\1\\0\\10\\50\\1\\173\\4\\50\\1\\0\\32\\50\\1\\0\"+\n-    \"\\3\\50\\1\\0\\2\\31\\4\\0\\2\\31\\3\\0\\4\\31\\3\\0\"+\n-    \"\\2\\31\\1\\0\\11\\31\\1\\0\\13\\31\\1\\174\\6\\0\\2\\31\"+\n-    \"\\4\\0\\2\\31\\3\\0\\4\\31\\3\\0\\2\\31\\1\\0\\11\\31\"+\n-    \"\\1\\0\\5\\31\\1\\175\\6\\31\\23\\0\\1\\176\\61\\0\\1\\177\"+\n-    \"\\41\\0\\4\\43\\1\\0\\11\\43\\1\\200\\3\\43\\1\\0\\31\\43\"+\n-    \"\\1\\0\\4\\43\\4\\50\\1\\0\\11\\50\\1\\201\\3\\50\\1\\0\"+\n-    \"\\32\\50\\1\\0\\3\\50\\1\\0\\2\\31\\4\\0\\2\\31\\3\\0\"+\n-    \"\\1\\202\\3\\31\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\14\\31\"+\n-    \"\\6\\0\\2\\31\\4\\0\\2\\31\\3\\0\\4\\31\\3\\0\\2\\31\"+\n-    \"\\1\\0\\11\\31\\1\\0\\7\\31\\1\\203\\4\\31\\24\\0\\1\\204\"+\n-    \"\\104\\0\\1\\205\\15\\0\\4\\43\\1\\0\\12\\43\\1\\206\\2\\43\"+\n-    \"\\1\\0\\31\\43\\1\\0\\4\\43\\4\\50\\1\\0\\12\\50\\1\\207\"+\n-    \"\\2\\50\\1\\0\\32\\50\\1\\0\\3\\50\\16\\0\\1\\210\\106\\0\"+\n-    \"\\1\\211\\14\\0\\4\\43\\1\\0\\11\\43\\1\\212\\3\\43\\1\\0\"+\n-    \"\\31\\43\\1\\0\\4\\43\\4\\50\\1\\0\\11\\50\\1\\213\\3\\50\"+\n-    \"\\1\\0\\32\\50\\1\\0\\3\\50\\13\\0\\1\\214\\112\\0\\1\\215\"+\n-    \"\\13\\0\\4\\43\\1\\0\\6\\43\\1\\216\\6\\43\\1\\0\\31\\43\"+\n-    \"\\1\\0\\4\\43\\4\\50\\1\\0\\6\\50\\1\\217\\6\\50\\1\\0\"+\n-    \"\\32\\50\\1\\0\\3\\50\";\n+    \"\\1\\112\\3\\31\\6\\0\\2\\31\\4\\0\\2\\31\\1\\101\\3\\0\"+\n+    \"\\4\\31\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\3\\31\\1\\113\"+\n+    \"\\10\\31\\5\\0\\55\\114\\1\\43\\4\\114\\56\\115\\1\\43\\3\\115\"+\n+    \"\\21\\0\\1\\116\\40\\0\\4\\15\\1\\61\\5\\15\\1\\0\\10\\15\"+\n+    \"\\1\\0\\36\\15\\3\\62\\1\\117\\1\\120\\1\\62\\1\\121\\3\\62\"+\n+    \"\\1\\117\\10\\62\\1\\117\\36\\62\\10\\0\\1\\122\\3\\0\\1\\123\"+\n+    \"\\1\\0\\1\\124\\44\\0\\2\\66\\4\\0\\2\\66\\1\\125\\3\\0\"+\n+    \"\\4\\66\\3\\0\\2\\66\\1\\126\\11\\66\\1\\0\\14\\66\\6\\0\"+\n+    \"\\2\\66\\4\\0\\2\\66\\1\\125\\3\\0\\4\\66\\3\\0\\1\\66\"+\n+    \"\\1\\127\\1\\126\\11\\66\\1\\0\\14\\66\\6\\0\\2\\66\\4\\0\"+\n+    \"\\2\\66\\1\\125\\3\\0\\4\\66\\3\\0\\2\\66\\1\\126\\1\\66\"+\n+    \"\\1\\130\\6\\66\\1\\131\\1\\0\\14\\66\\6\\0\\2\\66\\4\\0\"+\n+    \"\\2\\66\\1\\125\\3\\0\\4\\66\\3\\0\\2\\66\\1\\126\\5\\66\"+\n+    \"\\1\\132\\3\\66\\1\\0\\14\\66\\6\\0\\2\\66\\4\\0\\2\\66\"+\n+    \"\\1\\125\\3\\0\\4\\66\\3\\0\\2\\66\\1\\126\\7\\66\\1\\133\"+\n+    \"\\1\\66\\1\\0\\14\\66\\7\\0\\1\\134\\36\\0\\1\\135\\21\\0\"+\n+    \"\\1\\136\\13\\0\\4\\136\\3\\0\\2\\136\\1\\0\\11\\136\\1\\0\"+\n+    \"\\14\\136\\15\\0\\1\\122\\3\\0\\1\\123\\46\\0\\1\\137\\13\\0\"+\n+    \"\\4\\137\\3\\0\\2\\137\\1\\0\\11\\137\\1\\0\\14\\137\\6\\0\"+\n+    \"\\1\\140\\13\\0\\4\\140\\3\\0\\2\\140\\1\\0\\11\\140\\1\\0\"+\n+    \"\\14\\140\\5\\0\\10\\32\\1\\141\\73\\32\\1\\142\\37\\32\\1\\0\"+\n+    \"\\1\\143\\13\\0\\4\\143\\3\\0\\2\\143\\1\\0\\11\\143\\1\\0\"+\n+    \"\\14\\143\\5\\0\\6\\105\\1\\144\\46\\105\\1\\0\\4\\105\\6\\106\"+\n+    \"\\1\\144\\47\\106\\1\\0\\3\\106\\55\\111\\1\\107\\4\\111\\1\\0\"+\n+    \"\\2\\31\\4\\0\\2\\31\\1\\101\\3\\0\\4\\31\\3\\0\\2\\31\"+\n+    \"\\1\\0\\11\\31\\1\\0\\11\\31\\1\\145\\2\\31\\6\\0\\2\\31\"+\n+    \"\\4\\0\\2\\31\\1\\101\\3\\0\\4\\31\\3\\0\\2\\31\\1\\0\"+\n+    \"\\11\\31\\1\\0\\6\\31\\1\\146\\5\\31\\27\\0\\1\\147\\37\\0\"+\n+    \"\\6\\117\\1\\150\\53\\117\\4\\62\\1\\120\\1\\62\\1\\121\\3\\62\"+\n+    \"\\1\\117\\10\\62\\1\\117\\36\\62\\10\\0\\1\\151\\66\\0\\1\\152\"+\n+    \"\\107\\0\\1\\153\\17\\0\\1\\154\\13\\0\\4\\154\\3\\0\\2\\154\"+\n+    \"\\1\\0\\11\\154\\1\\0\\14\\154\\6\\0\\2\\66\\4\\0\\2\\66\"+\n+    \"\\1\\125\\3\\0\\4\\66\\3\\0\\2\\66\\1\\155\\11\\66\\1\\0\"+\n+    \"\\14\\66\\6\\0\\2\\66\\4\\0\\2\\66\\1\\125\\3\\0\\4\\66\"+\n+    \"\\3\\0\\2\\66\\1\\126\\2\\66\\1\\156\\6\\66\\1\\0\\14\\66\"+\n+    \"\\6\\0\\2\\66\\4\\0\\2\\66\\1\\125\\3\\0\\4\\66\\3\\0\"+\n+    \"\\2\\66\\1\\126\\1\\66\\1\\127\\7\\66\\1\\0\\14\\66\\6\\0\"+\n+    \"\\2\\66\\4\\0\\2\\66\\1\\125\\3\\0\\4\\66\\3\\0\\2\\66\"+\n+    \"\\1\\126\\2\\66\\1\\67\\6\\66\\1\\0\\14\\66\\6\\0\\2\\66\"+\n+    \"\\4\\0\\2\\66\\1\\125\\3\\0\\4\\66\\3\\0\\2\\66\\1\\126\"+\n+    \"\\3\\66\\1\\131\\5\\66\\1\\0\\14\\66\\7\\0\\1\\134\\23\\0\"+\n+    \"\\1\\155\\35\\0\\1\\157\\12\\0\\3\\157\\7\\0\\1\\157\\6\\0\"+\n+    \"\\1\\157\\3\\0\\1\\157\\3\\0\\1\\157\\3\\0\\1\\157\\10\\0\"+\n+    \"\\2\\136\\4\\0\\2\\136\\4\\0\\4\\136\\3\\0\\2\\136\\1\\0\"+\n+    \"\\11\\136\\1\\0\\14\\136\\6\\0\\2\\137\\4\\0\\2\\137\\4\\0\"+\n+    \"\\4\\137\\3\\0\\2\\137\\1\\0\\11\\137\\1\\0\\14\\137\\6\\0\"+\n+    \"\\2\\140\\4\\0\\2\\140\\4\\0\\4\\140\\3\\0\\2\\140\\1\\0\"+\n+    \"\\11\\140\\1\\0\\14\\140\\5\\0\\22\\32\\1\\0\\37\\32\\1\\0\"+\n+    \"\\2\\143\\4\\0\\2\\143\\4\\0\\4\\143\\3\\0\\2\\143\\1\\0\"+\n+    \"\\11\\143\\1\\0\\14\\143\\6\\0\\2\\31\\4\\0\\2\\31\\1\\101\"+\n+    \"\\3\\0\\4\\31\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\12\\31\"+\n+    \"\\1\\160\\1\\31\\6\\0\\2\\31\\4\\0\\2\\31\\1\\101\\3\\0\"+\n+    \"\\3\\31\\1\\161\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\\14\\31\"+\n+    \"\\23\\0\\1\\162\\60\\0\\1\\163\\45\\0\\2\\154\\4\\0\\2\\154\"+\n+    \"\\4\\0\\4\\154\\3\\0\\2\\154\\1\\126\\11\\154\\1\\0\\14\\154\"+\n+    \"\\6\\0\\2\\66\\4\\0\\2\\66\\1\\125\\3\\0\\4\\66\\3\\0\"+\n+    \"\\2\\66\\1\\126\\3\\66\\1\\127\\5\\66\\1\\0\\14\\66\\7\\0\"+\n+    \"\\1\\157\\12\\0\\3\\157\\6\\0\\1\\155\\1\\157\\6\\0\\1\\157\"+\n+    \"\\3\\0\\1\\157\\3\\0\\1\\157\\3\\0\\1\\157\\10\\0\\2\\31\"+\n+    \"\\4\\0\\2\\31\\1\\101\\3\\0\\4\\31\\3\\0\\2\\31\\1\\0\"+\n+    \"\\11\\31\\1\\0\\13\\31\\1\\164\\6\\0\\2\\31\\4\\0\\2\\31\"+\n+    \"\\1\\101\\3\\0\\4\\31\\3\\0\\2\\31\\1\\0\\11\\31\\1\\0\"+\n+    \"\\5\\31\\1\\165\\6\\31\\24\\0\\1\\166\\62\\0\\1\\167\\42\\0\"+\n+    \"\\2\\31\\4\\0\\2\\31\\1\\101\\3\\0\\1\\170\\3\\31\\3\\0\"+\n+    \"\\2\\31\\1\\0\\11\\31\\1\\0\\14\\31\\6\\0\\2\\31\\4\\0\"+\n+    \"\\2\\31\\1\\101\\3\\0\\4\\31\\3\\0\\2\\31\\1\\0\\11\\31\"+\n+    \"\\1\\0\\7\\31\\1\\171\\4\\31\\25\\0\\1\\172\\105\\0\\1\\173\"+\n+    \"\\34\\0\\1\\174\\107\\0\\1\\175\\30\\0\\1\\176\\113\\0\\1\\177\"+\n+    \"\\13\\0\";\n \n   private static int [] zzUnpackTrans() {\n-    int [] result \u003d new int[5243];\n+    int [] result \u003d new int[4700];\n     int offset \u003d 0;\n     offset \u003d zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);\n     return result;\n@@ -347,17 +334,16 @@\n   private static final int [] ZZ_ATTRIBUTE \u003d zzUnpackAttribute();\n \n   private static final String ZZ_ATTRIBUTE_PACKED_0 \u003d\n-    \"\\1\\1\\3\\0\\1\\1\\3\\0\\2\\1\\2\\0\\5\\1\\1\\11\"+\n-    \"\\2\\1\\1\\11\\7\\1\\1\\11\\2\\1\\3\\11\\4\\1\\1\\11\"+\n-    \"\\4\\1\\1\\11\\4\\1\\1\\11\\3\\1\\1\\0\\2\\11\\7\\0\"+\n-    \"\\2\\11\\2\\0\\2\\1\\1\\0\\4\\1\\1\\0\\1\\11\\1\\0\"+\n-    \"\\2\\1\\1\\0\\1\\11\\3\\0\\2\\1\\3\\0\\1\\11\\10\\0\"+\n-    \"\\2\\11\\6\\1\\3\\11\\2\\0\\1\\11\\2\\0\\6\\1\\2\\0\"+\n-    \"\\4\\1\\2\\0\\4\\1\\2\\0\\2\\1\\2\\0\\2\\1\\2\\11\"+\n-    \"\\2\\1\";\n+    \"\\1\\1\\3\\0\\1\\1\\7\\0\\5\\1\\1\\11\\2\\1\\1\\11\"+\n+    \"\\7\\1\\1\\11\\2\\1\\4\\11\\3\\1\\1\\11\\2\\1\\1\\11\"+\n+    \"\\4\\1\\1\\11\\3\\1\\1\\0\\2\\11\\10\\0\\1\\11\\1\\0\"+\n+    \"\\1\\11\\7\\0\\1\\11\\1\\0\\2\\1\\4\\0\\2\\1\\4\\0\"+\n+    \"\\1\\11\\7\\0\\3\\1\\1\\0\\1\\11\\1\\1\\1\\11\\2\\1\"+\n+    \"\\3\\11\\3\\0\\1\\11\\2\\0\\2\\1\\2\\0\\2\\1\\2\\0\"+\n+    \"\\2\\1\\4\\0\\2\\11\";\n \n   private static int [] zzUnpackAttribute() {\n-    int [] result \u003d new int[143];\n+    int [] result \u003d new int[127];\n     int offset \u003d 0;\n     offset \u003d zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);\n     return result;\n@@ -681,11 +667,11 @@\n       zzMarkedPos \u003d zzMarkedPosL;\n \n       switch (zzAction \u003c 0 ? zzAction : ZZ_ACTION[zzAction]) {\n-        case 3: \n+        case 16: \n           { return XmlTokenType.XML_ATTRIBUTE_VALUE_TOKEN;\n           }\n         case 35: break;\n-        case 11: \n+        case 10: \n           { return XmlTokenType.XML_BAD_CHARACTER;\n           }\n         case 36: break;\n@@ -697,7 +683,7 @@\n           { return elTokenType2;\n           }\n         case 38: break;\n-        case 15: \n+        case 14: \n           { yybegin(ATTR_VALUE_SQ); return XmlTokenType.XML_ATTRIBUTE_VALUE_START_DELIMITER;\n           }\n         case 39: break;\n@@ -713,7 +699,7 @@\n           { return XmlTokenType.XML_CHAR_ENTITY_REF;\n           }\n         case 42: break;\n-        case 5: \n+        case 4: \n           { yybegin(TAG); return XmlTokenType.XML_START_TAG_START;\n           }\n         case 43: break;\n@@ -721,14 +707,14 @@\n           { yybegin(END_TAG); return XmlTokenType.XML_END_TAG_START;\n           }\n         case 44: break;\n-        case 6: \n+        case 5: \n           { if(yystate() \u003d\u003d YYINITIAL){\n         return XmlTokenType.XML_BAD_CHARACTER;\n       }\n       else yybegin(popState()); yypushback(yylength());\n           }\n         case 45: break;\n-        case 7: \n+        case 6: \n           { yybegin(ATTR_LIST); pushState(TAG); return XmlTokenType.XML_NAME;\n           }\n         case 46: break;\n@@ -756,7 +742,7 @@\n           { return XmlTokenType.XML_COMMENT_CHARACTERS;\n           }\n         case 52: break;\n-        case 9: \n+        case 8: \n           { yybegin(ATTR_LIST); pushState(PROCESSING_INSTRUCTION); return XmlTokenType.XML_NAME;\n           }\n         case 53: break;\n@@ -764,23 +750,23 @@\n           { yybegin(YYINITIAL); return XmlTokenType.XML_DOCTYPE_END;\n           }\n         case 54: break;\n-        case 14: \n+        case 13: \n           { yybegin(ATTR_VALUE_DQ); return XmlTokenType.XML_ATTRIBUTE_VALUE_START_DELIMITER;\n           }\n         case 55: break;\n-        case 16: \n+        case 15: \n           { return XmlTokenType.XML_EQ;\n           }\n         case 56: break;\n-        case 13: \n+        case 12: \n           { yybegin(ATTR_LIST); yypushback(yylength());\n           }\n         case 57: break;\n-        case 10: \n+        case 9: \n           { return XmlTokenType.XML_NAME;\n           }\n         case 58: break;\n-        case 8: \n+        case 7: \n           { yybegin(YYINITIAL); return XmlTokenType.XML_TAG_END;\n           }\n         case 59: break;\n@@ -792,7 +778,7 @@\n           { return XmlElementType.XML_MARKUP;\n           }\n         case 61: break;\n-        case 12: \n+        case 11: \n           { yybegin(ATTR); return XmlTokenType.XML_NAME;\n           }\n         case 62: break;\n@@ -812,7 +798,7 @@\n           { yybegin(PROCESSING_INSTRUCTION); return XmlTokenType.XML_PI_START;\n           }\n         case 66: break;\n-        case 4: \n+        case 3: \n           { return XmlTokenType.XML_WHITE_SPACE;\n           }\n         case 67: break;\n@@ -821,7 +807,7 @@\n           }\n         case 68: break;\n         default:\n-          if (zzInput \u003d\u003d YYEOF \u0026\u0026 zzStartRead \u003c\u003d zzCurrentPos) {\n+          if (zzInput \u003d\u003d YYEOF \u0026\u0026 zzStartRead \u003d\u003d zzCurrentPos) {\n             zzAtEOF \u003d true;\n             zzDoEOF();\n             return null;\n",
  "projectName": "JetBrains.intellij-community",
  "bugLineNum": 824,
  "bugNodeStartChar": 27623,
  "bugNodeLength": 27,
  "fixLineNum": 824,
  "fixNodeStartChar": 27623,
  "fixNodeLength": 27,
  "sourceBeforeFix": "zzStartRead \u003c\u003d zzCurrentPos",
  "sourceAfterFix": "zzStartRead \u003d\u003d zzCurrentPos"
},
{
  "bugType": "CHANGE_MODIFIER",
  "fixCommitSHA1": "c7dacca00828e586ce4496d83a25a4d60a6fb60f",
  "fixCommitParentSHA1": "90fc43b33de1439ae7d92b12c3e09038aa878f50",
  "bugFilePath": "graphics/java/android/graphics/PorterDuff.java",
  "fixPatch": "diff --git a/graphics/java/android/graphics/PorterDuff.java b/graphics/java/android/graphics/PorterDuff.java\nindex 2bbbff3..d7d3049 100644\n--- a/graphics/java/android/graphics/PorterDuff.java\n+++ b/graphics/java/android/graphics/PorterDuff.java\n@@ -16,46 +16,345 @@\n \n package android.graphics;\n \n+/**\n+ * \u003cp\u003eThis class contains the list of alpha compositing and blending modes\n+ * that can be passed to {@link PorterDuffXfermode}, a specialized implementation\n+ * of {@link Paint}\u0027s {@link Paint#setXfermode(Xfermode) transfer mode}.\n+ * All the available modes can be found in the {@link Mode} enum.\u003c/p\u003e\n+ */\n public class PorterDuff {\n+    /**\n+     * {@usesMathJax}\n+     *\n+     * \u003ch3\u003ePorter-Duff\u003c/h3\u003e\n+     *\n+     * \u003cp\u003eThe name of the parent class is an homage to the work of Thomas Porter and\n+     * Tom Duff, presented in their seminal 1984 paper titled \"Compositing Digital Images\".\n+     * In this paper, the authors describe 12 compositing operators that govern how to\n+     * compute the color resulting of the composition of a source (the graphics object\n+     * to render) with a destination (the content of the render target).\u003c/p\u003e\n+     *\n+     * \u003cp\u003e\"Compositing Digital Images\" was published in \u003cem\u003eComputer Graphics\u003c/em\u003e\n+     * Volume 18, Number 3 dated July 1984.\u003c/p\u003e\n+     *\n+     * \u003cp\u003eBecause the work of Porter and Duff focuses solely on the effects of the alpha\n+     * channel of the source and destination, the 12 operators described in the original\n+     * paper are called alpha compositing modes here.\u003c/p\u003e\n+     *\n+     * \u003cp\u003eFor convenience, this class also provides several blending modes, which similarly\n+     * define the result of compositing a source and a destination but without being\n+     * constrained to the alpha channel. These blending modes are not defined by Porter\n+     * and Duff but have been included in this class for convenience purposes.\u003c/p\u003e\n+     *\n+     * \u003ch3\u003eDiagrams\u003c/h3\u003e\n+     *\n+     * \u003cp\u003eAll the example diagrams presented below use the same source and destination\n+     * images:\u003c/p\u003e\n+     *\n+     * \u003ctable summary\u003d\"Source and Destination\" style\u003d\"background-color: transparent;\"\u003e\n+     *     \u003ctr\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC.png\" /\u003e\n+     *             \u003cfigcaption\u003eSource image\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST.png\" /\u003e\n+     *             \u003cfigcaption\u003eDestination image\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *     \u003c/tr\u003e\n+     * \u003c/table\u003e\n+     *\n+     * \u003cp\u003eThe order of drawing operations used to generate each diagram is shown in the\n+     * following code snippet:\u003c/p\u003e\n+     *\n+     * \u003cpre class\u003d\"prettyprint\"\u003e\n+     * Paint paint \u003d new Paint();\n+     * canvas.drawBitmap(destinationImage, 0, 0, paint);\n+     *\n+     * PorterDuff.Mode mode \u003d // choose a mode\n+     * paint.setXfermode(new PorterDuffXfermode(mode));\n+     *\n+     * canvas.drawBitmap(sourceImage, 0, 0, paint);\n+     * \u003c/pre\u003e\n \n-    // these value must match their native equivalents. See SkXfermode.h\n+     *\n+     * \u003ch3\u003eAlpha compositing modes\u003c/h3\u003e\n+     *\n+     * \u003ctable summary\u003d\"Alpha compositing modes\" style\u003d\"background-color: transparent;\"\u003e\n+     *     \u003ctr\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #SRC Source}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC_OVER.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #SRC_OVER Source Over}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC_IN.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #SRC_IN Source In}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC_ATOP.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #SRC_ATOP Source Atop}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *     \u003c/tr\u003e\n+     *     \u003ctr\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #DST Destination}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST_OVER.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #DST_OVER Destination Over}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST_IN.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #DST_IN Destination In}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST_ATOP.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #DST_ATOP Destination Atop}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *     \u003c/tr\u003e\n+     *     \u003ctr\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_CLEAR.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #CLEAR Clear}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC_OUT.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #SRC_OUT Source Out}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST_OUT.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #DST_OUT Destination Out}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_XOR.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #XOR Exclusive Or}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *     \u003c/tr\u003e\n+     * \u003c/table\u003e\n+     *\n+     * \u003ch3\u003eBlending modes\u003c/h3\u003e\n+     *\n+     * \u003ctable summary\u003d\"Blending modes\" style\u003d\"background-color: transparent;\"\u003e\n+     *     \u003ctr\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DARKEN.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #DARKEN Darken}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_LIGHTEN.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #LIGHTEN Lighten}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_MULTIPLY.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #MULTIPLY Multiply}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *     \u003c/tr\u003e\n+     *     \u003ctr\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SCREEN.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #SCREEN Screen}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *         \u003ctd style\u003d\"border: none; text-align: center;\"\u003e\n+     *             \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_OVERLAY.png\" /\u003e\n+     *             \u003cfigcaption\u003e{@link #OVERLAY Overlay}\u003c/figcaption\u003e\n+     *         \u003c/td\u003e\n+     *     \u003c/tr\u003e\n+     * \u003c/table\u003e\n+     *\n+     * \u003ch3\u003eCompositing equations\u003c/h3\u003e\n+     *\n+     * \u003cp\u003eThe documentation of each individual alpha compositing or blending mode below\n+     * provides the exact equation used to compute alpha and color value of the result\n+     * of the composition of a source and destination.\u003c/p\u003e\n+     *\n+     * \u003cp\u003eThe result (or output) alpha value is noted \\(\\alpha_{out}\\). The result (or output)\n+     * color value is noted \\(C_{out}\\).\u003c/p\u003e\n+     */\n     public enum Mode {\n-        /** [0, 0] */\n+        // these value must match their native equivalents. See SkXfermode.h\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_CLEAR.png\" /\u003e\n+         *     \u003cfigcaption\u003eDestination pixels covered by the source are cleared to 0.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d 0\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d 0\\)\u003c/p\u003e\n+         */\n         CLEAR       (0),\n-        /** [Sa, Sc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC.png\" /\u003e\n+         *     \u003cfigcaption\u003eThe source pixels replace the destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d C_{src}\\)\u003c/p\u003e\n+         */\n         SRC         (1),\n-        /** [Da, Dc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST.png\" /\u003e\n+         *     \u003cfigcaption\u003eThe source pixels are discarded, leaving the destination intact.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d C_{dst}\\)\u003c/p\u003e\n+         */\n         DST         (2),\n-        /** [Sa + (1 - Sa)*Da, Rc \u003d Sc + (1 - Sa)*Dc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC_OVER.png\" /\u003e\n+         *     \u003cfigcaption\u003eThe source pixels are drawn over the destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src} + (1 - \\alpha_{src}) * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d C_{src} + (1 - \\alpha_{src}) * C_{dst}\\)\u003c/p\u003e\n+         */\n         SRC_OVER    (3),\n-        /** [Sa + (1 - Sa)*Da, Rc \u003d Dc + (1 - Da)*Sc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST_OVER.png\" /\u003e\n+         *     \u003cfigcaption\u003eThe source pixels are drawn behind the destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{dst} + (1 - \\alpha_{dst}) * \\alpha_{src}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d C_{dst} + (1 - \\alpha_{dst}) * C_{src}\\)\u003c/p\u003e\n+         */\n         DST_OVER    (4),\n-        /** [Sa * Da, Sc * Da] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC_IN.png\" /\u003e\n+         *     \u003cfigcaption\u003eKeeps the source pixels that cover the destination pixels,\n+         *     discards the remaining source and destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src} * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d C_{src} * \\alpha_{dst}\\)\u003c/p\u003e\n+         */\n         SRC_IN      (5),\n-        /** [Sa * Da, Sa * Dc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST_IN.png\" /\u003e\n+         *     \u003cfigcaption\u003eKeeps the destination pixels that cover source pixels,\n+         *     discards the remaining source and destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src} * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d C_{dst} * \\alpha_{src}\\)\u003c/p\u003e\n+         */\n         DST_IN      (6),\n-        /** [Sa * (1 - Da), Sc * (1 - Da)] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC_OUT.png\" /\u003e\n+         *     \u003cfigcaption\u003eKeeps the source pixels that do not cover destination pixels.\n+         *     Discards source pixels that cover destination pixels. Discards all\n+         *     destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d (1 - \\alpha_{dst}) * \\alpha_{src}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d (1 - \\alpha_{dst}) * C_{src}\\)\u003c/p\u003e\n+         */\n         SRC_OUT     (7),\n-        /** [Da * (1 - Sa), Dc * (1 - Sa)] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST_OUT.png\" /\u003e\n+         *     \u003cfigcaption\u003eKeeps the destination pixels that are not covered by source pixels.\n+         *     Discards destination pixels that are covered by source pixels. Discards all\n+         *     source pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d (1 - \\alpha_{src}) * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d (1 - \\alpha_{src}) * C_{dst}\\)\u003c/p\u003e\n+         */\n         DST_OUT     (8),\n-        /** [Da, Sc * Da + (1 - Sa) * Dc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SRC_ATOP.png\" /\u003e\n+         *     \u003cfigcaption\u003eDiscards the source pixels that do not cover destination pixels.\n+         *     Draws remaining source pixels over destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d \\alpha_{dst} * C_{src} + (1 - \\alpha_{src}) * C_{dst}\\)\u003c/p\u003e\n+         */\n         SRC_ATOP    (9),\n-        /** [Sa, Sa * Dc + Sc * (1 - Da)] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DST_ATOP.png\" /\u003e\n+         *     \u003cfigcaption\u003eDiscards the destination pixels that are not covered by source pixels.\n+         *     Draws remaining destination pixels over source pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d \\alpha_{src} * C_{dst} + (1 - \\alpha_{dst}) * C_{src}\\)\u003c/p\u003e\n+         */\n         DST_ATOP    (10),\n-        /** [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_XOR.png\" /\u003e\n+         *     \u003cfigcaption\u003eDiscards the source and destination pixels where source pixels\n+         *     cover destination pixels. Draws remaining source pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d (1 - \\alpha_{dst}) * \\alpha_{src} + (1 - \\alpha_{src}) * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d (1 - \\alpha_{dst}) * C_{src} + (1 - \\alpha_{src}) * C_{dst}\\)\u003c/p\u003e\n+         */\n         XOR         (11),\n-        /** [Sa + Da - Sa*Da,\n-             Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_DARKEN.png\" /\u003e\n+         *     \u003cfigcaption\u003eRetains the smallest component of the source and\n+         *     destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src} + \\alpha_{dst} - \\alpha_{src} * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d (1 - \\alpha_{dst}) * C_{src} + (1 - \\alpha_{src}) * C_{dst} + min(C_{src}, C_{dst})\\)\u003c/p\u003e\n+         */\n         DARKEN      (16),\n-        /** [Sa + Da - Sa*Da,\n-             Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_LIGHTEN.png\" /\u003e\n+         *     \u003cfigcaption\u003eRetains the largest component of the source and\n+         *     destination pixel.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src} + \\alpha_{dst} - \\alpha_{src} * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d (1 - \\alpha_{dst}) * C_{src} + (1 - \\alpha_{src}) * C_{dst} + max(C_{src}, C_{dst})\\)\u003c/p\u003e\n+         */\n         LIGHTEN     (17),\n-        /** [Sa * Da, Sc * Dc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_MULTIPLY.png\" /\u003e\n+         *     \u003cfigcaption\u003eMultiplies the source and destination pixels.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src} * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d C_{src} * C_{dst}\\)\u003c/p\u003e\n+         */\n         MULTIPLY    (13),\n-        /** [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_SCREEN.png\" /\u003e\n+         *     \u003cfigcaption\u003eAdds the source and destination pixels, then subtracts the\n+         *     source pixels multiplied by the destination.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src} + \\alpha_{dst} - \\alpha_{src} * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d C_{src} + C_{dst} - C_{src} * C_{dst}\\)\u003c/p\u003e\n+         */\n         SCREEN      (14),\n-        /** Saturate(S + D) */\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_ADD.png\" /\u003e\n+         *     \u003cfigcaption\u003eAdds the source pixels to the destination pixels and saturates\n+         *     the result.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d max(0, min(\\alpha_{src} + \\alpha_{dst}, 1))\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(C_{out} \u003d max(0, min(C_{src} + C_{dst}, 1))\\)\u003c/p\u003e\n+         */\n         ADD         (12),\n+        /**\n+         * \u003cp\u003e\n+         *     \u003cimg src\u003d\"{@docRoot}reference/android/images/graphics/composite_OVERLAY.png\" /\u003e\n+         *     \u003cfigcaption\u003eMultiplies or screens the source and destination depending on the\n+         *     destination color.\u003c/figcaption\u003e\n+         * \u003c/p\u003e\n+         * \u003cp\u003e\\(\\alpha_{out} \u003d \\alpha_{src} + \\alpha_{dst} - \\alpha_{src} * \\alpha_{dst}\\)\u003c/p\u003e\n+         * \u003cp\u003e\\(\\begin{equation}\n+         * C_{out} \u003d \\begin{cases} 2 * C_{src} * C_{dst} \u0026 2 * C_{dst} \\lt \\alpha_{dst} \\\\\n+         * \\alpha_{src} * \\alpha_{dst} - 2 (\\alpha_{dst} - C_{src}) (\\alpha_{src} - C_{dst}) \u0026 otherwise \\end{cases}\n+         * \\end{equation}\\)\u003c/p\u003e\n+         */\n         OVERLAY     (15);\n \n         Mode(int nativeInt) {\n@@ -71,14 +370,14 @@\n     /**\n      * @hide\n      */\n-    public static final int modeToInt(Mode mode) {\n+    public static int modeToInt(Mode mode) {\n         return mode.nativeInt;\n     }\n \n     /**\n      * @hide\n      */\n-    public static final Mode intToMode(int val) {\n+    public static Mode intToMode(int val) {\n         switch (val) {\n             default:\n             case  0: return Mode.CLEAR;\n",
  "projectName": "android.platform_frameworks_base",
  "bugLineNum": 71,
  "bugNodeStartChar": 2196,
  "bugNodeLength": 112,
  "fixLineNum": 71,
  "fixNodeStartChar": 2196,
  "fixNodeLength": 106,
  "sourceBeforeFix": "25",
  "sourceAfterFix": "9"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.