Background

I recently finished my first CORBA project using LoadRunner 8.0, and this is a quick brain-dump of some of my impressions. The official documentation does not contain all the information that I needed to know, and I found it hard to track down any people who had worked with the LoadRunner CORBA protocol before, so these notes are largely comprised of information that I wish I had known before I started.

If you want to do performance testing of a Java client-server application using CORBA, LoadRunner seems to be the only viable option. CORBA is not supported by Rational and, while Compuware’s QALoad technically supports CORBA, it forces you to work at the Windows sockets level. Note that as the LoadRunner CORBA recording engine hooks into classes as they are loaded into the JVM, it is not able to record non-Java applications which use CORBA.

New single protocol script

How much Java do you need to know?

LoadRunner CORBA scripts must be written in Java. The level of Java knowledge required is significantly higher than the level of understanding of C required for scripting Web Vusers.

In order to work independently, you should be able to navigate through Javadoc pages and be comfortable with concepts from sections 1, 2, 4, 5, and 6 from the Sun Certified Programmer for Java 2 Platform 1.4 certification.

If the project has not generated Javadocs for their projects, you will need to be able to navigate through and understand the application source code. Fortunately I did not have to do this as it would have made my job significantly harder.

General information about LoadRunner and CORBA

The recording engine for CORBA is shared between all the Java Vuser types – CORBA, Enterprise Java Beans (EJB), Jacada, Java Vuser (although you don’t record with this type of Vuser), and RMI-Java. It is not possible to create a dual protocol script using any of these protocols. None of these protocols are covered in any Mercury certification exams or training materials.

LoadRunner allows you to define “custom hooks”, which tell the recording engine which classes and method calls to include in the recorded script. This was not necessary for my project, but could be used if the developers or application server vendor decide to extend the CORBA protocol or add non-CORBA calls. Further information can be found in the Support Knowledgebase in Hooking “General” Java API calls with LoadRunner.

Bugs and Workarounds

I experienced several problems when trying to record my application with LoadRunner. Fortunately Mercury has top-notch support, and their R&D team was able to create a patch that fixed my problem.

Several problems were also able to be fixed by the development team from the project I was working on.

LoadRunner experienced errors during recording when trying to access classes that were only located on the server (someone had defined a remote method that used a non-remote class). Copying the jar file to the client and adding it to the recording classpath fixed this problem.

LoadRunner also seemed to be trying to query private member variables during recording. Rather than change the access modifiers for all private member variables in the application, the java.policy file was modified to disable this part of the security model.

grant {
    permission java.lang.reflect.ReflectPermission “suppressAccessChecks”;
};

A LoadRunner class file was decompiled (using Jad), and modified to call setAccessible(true) before getDeclaredFields() was called, fixing the problem.

If the recording option “Unfolded Serialized Objects” is enabled and the “Limit Object Size (byte)” property is set to a large number, you may get a “constant string too long” error when compiling your script.

C:\Scripts\string_too_long\Actions.java:1831: constant string too long
    _string4 = “com.myloadtest.loadrunner.corbaexample.StringTooLongClass __CURRENT_OBJECT = {” +
1 error

This is a limitation of the Sun Java compiler. The work-around is to break the string up into smaller chunks using the += operator.

Some test cases where a large number of search results were returned to the client caused a stack overflow error at runtime. The work-around for this was to increase the default stack size, using the -Xss option in the “Additional VM Parameters” runtime setting.

Some unfolded serialised objects that had been parameterised also caused stack overflow errors (while compiling). The work-around for this was to separate the parameterised line from the original string and then concatenate the strings using the += operator.

Recording

The application that I was working with was invoked by running a small exe file which displayed a splash screen, and than ran a batch file to start the application. The batch file contained all the command line parameters and classpath information that was necessary to run the application. My first step was to add this information to the Java Environment Settings under Recording Options. Note that jar files must be added individually to the classpath, rather than just specifying their directory.

While working through my LoadRunner recording problems with Mercury R&D, a lot of debugging information was being written to stdout by LoadRunner and the application. Unfortunately, the cmd window can only store the last 9999 lines, so useful information was being lost. A neat workaround for this problem was to pipe the output to a text file.

Windows CMD window properties

Pipe output to a file

When recording, I think that it is also important to enable Unfold Serialized Objects and increase the Object Size Limit to a large value. The reasons for doing this are discussed in the Correlation section of this document.

Recording Options - unfold serialized objects

Playback

The LoadRunner Runtime Settings take on the same Java Environment Settings used in the Recording Settings.

To log on as multiple users from the same workstation, each Vuser must be run as a process. I think that this is because the CallbackHandler interface isn’t designed to be aware of threads. My scripts used a customised version of the application’s CallbackHandler class as the developers added a setUserId() method so that each of my virtual users could use a unique username.

Running each virtual user in a process rather than a thread consumes more resources on the load generators. Each of my Vusers used about 26MB of memory (I used an initial heap size of 10MB and an initial stack size of 5MB), so CORBA Vusers are by far the most resource hungry of all the Vuser types I have used so far.

When attempting to run your virtual users from a remote workstation, make sure that the libraries in the classpath are on the workstation or you will get a compilation error.

Compilation process failed

This is obvious when you think about it but this behaviour differs from every other type of Vuser. As far as I know, all other (non-Java) Vuser scripts are totally self-contained, unless you make a call to an external file such as a DLL.

A virtual user will just stop with an error when an exception is thrown by the application and not is caught by your script. This happens even if the “Continue on error” Runtime Setting is enabled. A single exception will register as multiple errors in the LoadRunner Controller – I am not sure why this happens. It may be due to the number of lines that the stack trace occupies.

Scripting

There is no tree view for LoadRunner CORBA Vuser scripts; all work must be done in the script view. A script is composed of an Actions class, with an init, action, and end section. Any object reference variables recorded by LoadRunner are added as fields to the Actions class. This makes it easy to move sections of code between the three methods without having to worry about variable scope.

/*
* LoadRunner Java script. (Build: 739)
*
* Script Description:
*
*/

import lrapi.lr;

public class Actions
{
  public int init() {
    return 0;
  }//end of init

  public int action() {
    return 0;
  }//end of action

  public int end() {
    return 0;
  }//end of end
}

Debugging of scripts would be made easier if Vugen had a feature that made it possible to step through your code and place watches and breakpoints but, as with C-based Vuser types, you can debug your script in a real IDE if you need to.

Sometimes when a runtime exception is thrown and the vuser stops, LoadRunner displays the stacktrace but cannot determine the line number where the exception was thrown. It is possible to work it out from the method that is shown in the stack trace, but (especially when there are multiple calls to the method in the script) it is easier to narrow it down by sprinkling your script with print statements like System.out.println() or lr.output_mesage().

When declaring new object reference variables, LoadRunner sometimes uses the type of the parent class or implemented interface. I think that it only does this because it is reading the method signature, so if a method says that it returns a Collection (which is an interface), then that is what appears in the recorded script. This is only a problem if you need to add a call to a method that is only present in the child class.

SuperClass c = new SubClass();
c.methodFromSubClass(); // This gives a compile time error “cannot resolve symbol”.
((SubClass) c).methodFromSubClass(); // It is necessary to cast, to avoid the compile time error.

It will make your life easier if you change the font used by the Virtual User Generator to something a little smaller (like 8 point) so that you can see more of your code.

Coding style

Some of my recorded scripts were more than 12000 lines long due to the large unfolded serialised objects in the script. To aid navigation around the script, I gave each test step a unique identifier in a comment, so that I could easily jump between steps using Find.

I found that removing the indentation from any code that I added or modified helped to me to quickly scan through a script to find my changes. I found this especially helpful when modifying large unfolded objects.

Any object references that I created always had a fully qualified class name.
Eg.

com.myloadtest.loadrunner.corbaexample.DemoClass dc = new com.myloadtest.loadrunner.corbaexample.DemoClass();

Instead of…

DemoClass dc = new DemoClass();

While this meant that any code I created was more verbose, it made it much easier to cut and paste between scripts without having to worry about having to import the correct packages at the top of the script.

This would be impractical and not very elegant if LoadRunner scripts weren’t designed to be throwaway code.

Correlation

Correlation is by far the most time consuming part of scripting CORBA Vusers. Some correlation is handled for you automatically, but the difficult sections will not be. If anyone has been able to tweak the recording settings so that LoadRunner will correlate everything for them, please let me know.

Unlike other protocols, it is not possible to see any data that is returned by the server (even if you change the Runtime Settings to log the data returned by the server, or change the Recording Settings to “Record Return Value”); this means that you can only guess at what you are getting from the server based on the data that you are sending.

This is the reason I believe that enabling the “Unfold Serialized Objects” Recording Option is so crucial. Unfolding serialised objects means that each object that is sent to the server is shown in your script in a human-readable string format that can be parameterised. If this option is not enabled, objects to be sent to the server are stored in files in a non-readable format, and obviously can’t be manipulated as strings.

Here is a simple example of a recorded script from a hypothetical business card manager application, where a user searches for a business card (by the website address on the card), opens the card, modifies the contents and then saves the card.

_string = “com.myloadtest.loadrunner.corbaexample.CardSearchCriteria __CURRENT_OBJECT = {” +
  “java.lang.String cardTitle = ##” +
  “java.lang.String cardName = ##” +
  “java.lang.String cardCompany = ##” +
  “java.lang.String cardEmail = ##” +
  “java.lang.String cardPhoneNumber = ##” +
  “java.lang.String cardWebsite = #www.myloadtest.com#” +
“}”;

_cardsearchcriteria = (com.myloadtest.loadrunner.corbaexample.CardSearchCriteria) lr.deserialize(_string,0); // RMIComponent

_list = _searchservice.searchExecute( (com.myloadtest.loadrunner.corbaexample.CardSearchCriteria) _cardsearchcriteria, 200);

_searchservice.getCardFullValue(“12357”, false);

_string2 = “com.myloadtest.loadrunner.corbaexample.CardFullValue __CURRENT_OBJECT = {” +
  “long m_CardId = #12357#” +
  “boolean m_IsClient = #false#” +
  “java.lang.String m_Title = #Mr.#” +
  “java.lang.String m_Name = #Stuart Moncrieff#” +
  “java.lang.String m_Company = #MyLoadTest#” +
  “java.lang.String m_Email = _NULL_” +
  “java.lang.String m_Phonenumber = _NULL_” +
  “java.lang.String m_Website = #www.myloadtest.com#” +
“}”;

_cardfullvalue = (com.myloadtest.loadrunner.corbaexample.CardFullValue) lr.deserialize(_string2,1); // RMIComponent
_cardservices.save( (com.myloadtest.loadrunner.corbaexample.CardFullValue) _cardfullvalue);

You can see that the contents of the cardsearchcritieria object first appears in string form in the script, with the user’s search term in one of the object’s fields. The real cardsearchcritieria object is then created by making a call to the LoadRunner method lr.deserialize().

The search is executed, and returns a Collection (a List) object containing business card objects that match the search criteria. As there is only one result, the application opens the card in full by calling the getCardFullValue() method with the card Id as the argument. It would be good practice to add code to handle the case where the list is empty (if _list.isEmpty() == true), and where the search returns multiple results.

The argument to the getCardFullValue() will be different for each search term used and is not entered by the user, so this value must be correlated. To get this value, it is necessary to add code to extract the first business card object from the List, extract the card Id from the object, and then use the card Id value in the getCardFullValue() method call.

When the user presses the edit button to allow modification of the card properties, there are no method calls recorded as this activity happens entirely on the client.

The modified business card is recorded in the script as _string2. The string form of the object is converted to a real object with another call to lr.deserialize(). The modified object is then saved. To verify that the script has worked correctly, a check could be added to verify that the save operation returns true.

Obviously the contents of _string2 will be different for each business card, and the values are hard-coded in the recorded version of the script. There are really only three options when it comes to updating these values.

  1. Extract each field value from the object returned by getCardFullValue() (in the same manner as the card id was extracted from _list), and add the values in string form to _string2.
  2. Extract each field value from the object returned by getCardFullValue(), and add the values to the _cardfullvalue object using the object’s setter methods.
  3. If the test case only calls for a change to a single property when editing the business card, it seems to be far too much work to have to correlate all the other fields individually. Simply comment out the _string2 step and the lr.deserialize() step, and modify this property in the CardFullValue returned from the getCardFullValue() method call.

In general, the correlation process is as follows.

  1. Record test case multiple times with different data.
  2. Use WinDiff to identify values being sent to the server that must be correlated (if you have not enabled “unfold serialized objects”, you won’t be able to see the content of the objects which are being sent to the server). Obviously ignore values that you have entered through the application’s interface; these will be parameterised but not correlated.
  3. Take an educated guess as to which method returns the value that must be correlated, and assign the value to a variable (if it is not already assigned).
  4. Confirm your guess by sending the contents of the variable to the Execution Log using System.out.println(). Note that System.out.println() calls the toString() method for the object. If the developers have not overridden this method, you will get something useless like “NameOfClass@hashcode”, in which case you are forced to look at the Javadocs or source code for clues as to whether it may contain the type of value you want. Reading the log should confirm whether you are looking at the correct variable.
    Rather than replaying the entire script to see if you have identified the correct method, a return statement can be placed directly after it. Putting the return statement in a conditional block (that evaluates to true every time) will silence any compiler complaints about unreachable code.
  5. Once you have found the object that contains the value you must correlate, you need to extract the value.
    It is possible (although not elegant) to call the toString() method for the object and extract the value using string functions.
    However, it is much safer to use the getter method that returns the value you want. Hopefully this can be found in the Javadocs.
    If it is not clear what class the object belongs to, you can use the getClass() method that every class inherits from java.lang.Object to determine where you should be looking in the Javadocs. This sometimes happens when a method returns a collection, and the developers are not diligent enough to note in the Javadocs what the collection actually contains. LoadRunner also has a tendency to declare objects using the object’s superclass. This might mean that you are looking in the wrong class when searching for a method to return the value you want.
    The value that you wish to extract may be contained within an object that is within the object (etcetera). It will be necessary to create a temporary object reference variable for each layer that you have to drill down to.
  6. Using the value for correlation is as simple as adding it to the method argument where it is to be used, inserting the value into the string that is the unfolded serialised object, or using the object’s setter method to update the value.

It is tempting to try to take a shortcut by guessing which sections must be correlated without going to the effort of recording the business process multiple times with different data and comparing the scripts with WinDiff. It is reasonable to do this with some other protocols, such as HTTP where it is usually obvious what needs to be altered, but it is not good practice to do this with CORBA scripts as they are vastly more difficult and it is not possible to see data returned by the server. Remember that just because the script plays back without error does not mean that it is doing the same thing that a real user does

Rescripting

Allow more time than you usually would for rescripting. LoadRunner CORBA scripts are very sensitive to code changes. You don’t have to just worry about new method calls being added, or the arguments to method calls changing, you also have to worry about any internal changes to objects that are sent to the server.

For example, if one of the developers decides to rename the size field to length in the superclass of MyArrayList, it will not break any of his code because it is only used internally by the object, but it will break your LoadRunner script, because you are, as far as the application is concerned, sending it a corrupt object.

_string2 = “com.myloadtest.loadrunner.corbaexample.MyArrayList __CURRENT_OBJECT = {” +
  “super = {” +
    “super = {” +
    “}” +
    “int modCount = #0#” +
    “int size = #0#” +
  “}” +
  “java.lang.Object elementData[] = {” +
  “}” +
“}”;

Writing to a file

It is often useful for virtual users to write data to a file. Note that the lr.output_message() and lr.log_mesage() methods do not work when logging is disabled or when the “send messages only when an error occurs” runtime setting is selected.

Writing to a file is a little more complicated than in C. Fortunately, this is one of those problems that are solved in 5 seconds with a Google search.

String outputString = “hello world”;
String fileName = “c:\output.txt”;

try {
  // Open file in “append” mode and write outputString to it.
  java.io.BufferedWriter out = new java.io.BufferedWriter(new java.io.FileWriter(fileName, true));

  out.write(outputString);
  out.newLine();
  out.close();
} catch (Exception e) {
  // fails silently if an exception occurs.
}

The only thing to be aware of is that this code isn’t technically safe for concurrent use. There is nothing stopping a virtual user from opening the file and writing a string to where it thinks the end of the file is, only for another vuser to have already written something to that position.

With any other language, you would normally prevent concurrency problems by

  1. Opening the file/obtaining a handle
  2. Locking the file
  3. Writing to the file
  4. Unlocking the file
  5. Closing the file

In Java, you could put your file writing routine in a synchronised method, but that is only useful for restricting access to a single thread at a time, rather than a process (remember that each vuser must have it’s own process if you are to have multiple logins).

You could either kludge a solution together yourself (like creating a temporary file called filename.lock and not opening another file for writing until the file is deleted), or be pragmatic and not worry about concurrency problems as they will be rare and the data you are writing to the file will probably not be crucial.

If you are lucky enough to be using Java 1.5, you may find something useful in java.util.concurrent.

Transaction timings and transaction status

Unfortunately, the following functions and methods have not been implemented in Java for LoadRunner 8.0 – lr_wasted_time(), lr_get_transaction_status(), lr_get_transaction_wasted_time(), lr.get_transaction_think_time(), lr.get_transaction_duration(). This is a little frustrating if you want to do something like: log all search terms that take longer than 10 seconds to execute, and record the time it takes to return a result.

Fortunately, this sort of problem is easy to solve with the Java API.

// Start time.
java.util.Calendar startTime = java.util.Calendar.getInstance();

// Perform search.
_list = _searchservices.searchExecute(_searchcriteria, 1000);

// Stop time
java.util.Calendar endTime = java.util.Calendar.getInstance();

// If search took longer than 10 seconds, log data used to a file.
long timeTaken = endTime.getTimeInMillis() – startTime.getTimeInMillis();
if (timeTaken > 10000) {
  f.writeToFile(_searchcriteria.toString() + “,” + timeTaken)
}

All of the timing and transaction status functionality that is missing can be easily kludged together with some custom code. It helps that the only types of errors that your script will generate are either user-defined or the result of exceptions which are unrecoverable anyway. This makes transaction status easy to determine.

Handling immutable Collections

Occasionally you might need to correlate a value using Java method calls on an object that cannot be modified. This may be an object that has private fields and no setter methods, or it may be an object that explicitly does not allow its setter methods to be called.

If you are making a very simple change, it may be possible to do this by just using the LoadRunner correlation functions but, if not, the solution is to create a new object of the same type (or which implements the same interface), copy any necessary properties from the old object, and give it any new properties necessary for the correlation to succeed.

The following is an example of an object which contains an UnmodifiableCollection, which I want to update.

// I want to add an additional Manager to the User object.
UnmodifiableCollection c = _user2.getManagers();

// Create a new Manager object with the desired properties.
Manager newManager = new Manager(1, “Frank”, 9);

// As I cannot change the Collection, I must create a new Collection and add the values that I want.
ArrayList a = new ArrayList();
a.add(newManager); // Add the newly created Manager object to the Collection.
a.addAll(c ); // Add the rest of the Manager objects to the Collection.

// Add the Collection of Managers back to the User object.
_user2.setManagers(a);

And finally…

There is very little information available anywhere else for the LoadRunner Java-based protocols. I hope that readers have found that this document provides useful supplementary information to the official Mercury documentation.

This document is also provided in Word format for easy printing. The code examples are easier to read in the Word version.

 

Published On: June 13, 2005Tags: ,

28 Comments

  1. Stuart Moncrieff June 15, 2005 at 11:26 am - Reply

    Update

    This article has just been linked to by Wilson Mar from his LoadRunner Information page.

  2. Christo July 26, 2005 at 10:34 pm - Reply

    This is a excellent document.

    Thanks a Lot

  3. Stuart Moncrieff September 27, 2005 at 8:28 am - Reply

    Something I didn’t add to this document was that I had a lot of problems getting recording to work successfully on a workstation that had QuickTest Pro installed with the Java addin. I am sure that it is possible to get it working, but if you are billing by the hour, it’s hard to justify if you have another workstation available.

  4. Adriana November 10, 2005 at 11:19 pm - Reply

    Excellent

    Thanks a lot

    Adriana

  5. Stuart Moncrieff January 24, 2006 at 3:26 pm - Reply

    The documentation that ships with LoadRunner 8.1 has been dramatically improved over documentation from previous versions.

    While it is still useful to read my guide (bearing in mind that some things have changed since it was written), it is no longer “essential reading” for someone doing an RMI or CORBA engagement for the first time.

  6. Stuart Moncrieff February 23, 2006 at 10:43 am - Reply

    If you have large unfolded serialized objects in your script, you may get stack overflow errors at compile time, not just runtime.

    This cannot be fixed by increasing the size of the JVM stack (using the -Xss flag) in the Runtime settings…obviously as it is happening at compile time rather than runtime.

    The work-around for this problem is the same as mentioned in the above article. Split the string up using the += operator.

    The system is out of resources.
    Consult the following stack trace for details.
    java.lang.StackOverflowError
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:965)
    at com.sun.tools.javac.v8.tree.Tree$Binary.accept(Tree.java:1014)
    at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java:256)
    at com.sun.tools.javac.v8.comp.Attr.attribExpr(Attr.java:279)
    at com.sun.tools.javac.v8.comp.Attr.visitBinary(Attr.java:96

  7. Stuart Moncrieff February 23, 2006 at 10:52 am - Reply

    I just need to point out again how great JAD (the Java decompiler) is.

    If you do not have source code and do not have Javadocs, then decompiling the class files will at least give you the uncommented source code so that you can see what the methods, return values and method arguments are for each class.

  8. Stuart Moncrieff February 23, 2006 at 10:56 am - Reply

    I am not sure what the overhead of working with really big strings is, but I suspect that it is large.

    The performance overhead of creating the unfolded serialized objects, and then calling lr.deserialize() on them can be reduced by putting this code in the init() section of your script, so that it is only done once, and not on every iteration.

  9. Stuart Moncrieff March 7, 2006 at 8:47 am - Reply

    I take back what I said in this paragraph…

    Debugging of scripts would be made easier if Vugen had a feature that made it possible to step through your code and place watches and breakpoints but, as with C-based Vuser types, you can debug your script in a real IDE if you need to.

    There are problems when trying to use LoadRunner classes outside of LoadRunner.

  10. Stuart Moncrieff March 13, 2006 at 3:30 pm - Reply

    Another nice feature in LoadRunner 8.1 that was not present in 8.0 is that you can now choose where to send the output that would normally be written to the console window.

    In Recording Options, under Debug Options, set Printouts Redirections to “file”.

    This makes my neat workaround (reproduced below) redundant…

    “While working through my LoadRunner recording problems with Mercury R&D, a lot of debugging information was being written to stdout by LoadRunner and the application. Unfortunately, the cmd window can only store the last 9999 lines, so useful information was being lost. A neat workaround for this problem was to pipe the output to a text file.”

  11. Aszad June 19, 2006 at 2:17 am - Reply

    The document is really very helpful. I have got a problem with a very large code(RMI) and accoding to your suggestion the strings should be broken using =+ operator or else the line of parameterization should be taken out as different string. Can you please give some example.

    Thanks a lot again for this great document.

  12. Rohini Krishnan September 14, 2006 at 6:22 pm - Reply

    Hi,

    That was an excellent document.
    Now, I am using the Rmi-Java to record a desktop application. I have problems in serializing.
    My script has
    _string2 = “com.commonUtils.datamodel.CommonUtilsVO __CURRENT_OBJECT = {” +
    “int agentId = #0#” +
    “double amount = #0.0#” +
    “int branchId = #0#” +
    “int cardTypeId = #0#” +

    I am able to successfully compile the script. During playback, I get the following error and the record is not saved..
    System.out: lr.modifyByte(case I) : Invalid number conversion while modifying byte array Notify:
    System.out: lr.modifyByte(case D) : Invalid number conversion while modifying byte array Notify:
    System.out: lr.modifyByte(case J) : Invalid number conversion while modifying byte array Notify:
    Error: System.err: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
    java.rmi.RemoteException: ; nested exception is:
    com.transaction.exceptions.CoverNoteException: com.transaction.exceptions.CoverNoteException: java.sql.SQLException: ORA-12899: value too large for column “TEST_SQA”.”EIS_MST_VEHICLE”.”VCH_ENGINE_NO” (actual: 16, maximum: 15)
    ORA-06512: at “TEST_SQA.PKG_COVER”, line 2605
    ORA-06512: at “KURNIA_SQA.PKG_COVERNOTE”, line 1476
    ORA-06512: at line 1Error: System.err: at com.sun.corba.se.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:161) Error
    Error: System.err:at javax.rmi.CORBA.Util.mapSystemException(Util.java:67) Error
    System.err: at com.transaction.ejb._TransactionsEJB_Stub.saveCoverHdr(_TransactionsEJB_Stub.java:2437)
    ORA-12899: value too large for column
    I have approached the Mercury support and am still waiting their response. This is absolutely urgent.
    Can you please provide me a solution to this problem.
    Also, is there a way to parameretize with ‘Serialized option’ unchecked..

    Thanks,
    Rohini.

  13. Rohini Krishnan October 10, 2006 at 1:51 pm - Reply

    Hi Stuart,

    I have a query on parameterizing date fields in Java. The following is the piece of code where I am substituting the date captured in long format.

    import java.util.Date;

    Date curTime = new Date();
    long cur_time = curTime.getTime();

    “java.util.Date expiryDate = {” +
    “super = {” +
    “long fastTime = ~~” +
    “sun.util.calendar.BaseCalendar$Date cdate = _NULL_” +
    “}” +
    “}” +
    During play back, the system displays the following error:
    Error: System.out: lr.modifyByte(case J) : Invalid long conversion while modifying byte array. Value is exception is java.lang.NumberFormatException: For input string: “”Notify.

    Can you help me out in providing a solution to this.

    Thanks,
    Rohini.

  14. Subuhi October 11, 2006 at 6:47 am - Reply

    Great Ariticle. I am working with Java RMI and Java Vuser protocol and came across your article. Very useful.

    Thanks

  15. Rohini Krishnan October 25, 2006 at 10:48 pm - Reply

    Hi,

    Please find below a scenario:
    Script 1 – Executes users from 1to10
    Transaction 1 – Time taken to click the Submit button

    Script 2 – Executes users from 11 to 20
    Transaction 2 – Time taken to click the Submit button
    Both the scripts were executed as part of the same scenario.

    Now, the Average Response time taken for:
    Transaction 1 – 2 seconds
    Transaction 2 – 2.5 seconds

    Question: Can we say that the average response time for the ‘Submit’ transaction for 20 Users is 4.5 Seconds (2 + 2.5)?
    Please respond ASAP.

    Thanks,
    Rohini.

  16. Stuart Moncrieff October 26, 2006 at 10:00 am - Reply

    I am guessing that the difference in response time between the two scripts is probably due to random variations, and that the numbers would be about the same if you had used a larger sample size (more users or more transactions).

    If you can say with confidence that the two groups of users are identical and that the transaction step in the business process that you are measuring is the same, then there is no real reason not to combine the two figures.

    However, in your case, an average is going to be obtained by adding the two averages and dividing by 2.

    Cheers,
    Stuart.

  17. Stuart Moncrieff October 11, 2006 at 1:04 am - Reply

    I think that you may need to include a little bit more of your script if anyone is going to diagnose your problem.

    Cheers,
    Stuart.

  18. Siman May 25, 2007 at 1:16 am - Reply

    Staurt~
    I find your article very useful for starters in corba-java protocol in Loadrunner.I’m still having issues setting up the loadrunner to record the java application i’m working on.I could able to invoke the application thro’ LR but events are not getting recorded.I did setup the classpath in the system and also when i click the RUN in VUgen it just goes thro’ without any errors but can’t able to record any.Any advise or docs that i can follow.

    Thanks in advance
    Siman

  19. suneel August 18, 2007 at 9:44 am - Reply

    hey…u,

    could you please give me brief/detail about RMI scripting, if possible provide the script and the procedure/process , i mean at what situation we go for RMI scripting, generally what type of applications.

    how to use the load runner to write or record the RMI scripting.

    Advanced Thanks!

    Suneel

  20. Madhu Dande March 7, 2008 at 7:57 am - Reply

    Thanks for your help!!!!

    Regards,
    Madhu

  21. sandeep May 27, 2008 at 6:49 pm - Reply

    how to load test desktop application with multiple protocols from loadrunner

  22. testadven July 16, 2008 at 11:29 pm - Reply

    Could somebody help us to provide guidance on java RMI scripting using Vugen

  23. testadven July 16, 2008 at 11:32 pm - Reply

    thanks you so much for sharing on complexity Corba in simpler way

  24. Shruti August 5, 2008 at 3:05 pm - Reply

    Hi Staurt,
    The doc is an informative written piece.
    Well wat i have to say is, wrt correlation, can we use the random() func and replace the array length with the original value.
    Eg: Random r=new Random();
    int Source=r.nextInt(_string_array3.length);
    But my question is will this work for every correlation, in case if you have tried it??
    And usually to correlate we will have to find the values in the response or in the submitted requests. BUT as mentioned in the doc, the values cannot be found anywhere.
    So to find the values, can we use the ones that are in the recording log for reference??
    Please advice.

    Cheers,
    Shruti

  25. Szymon Gabaja August 5, 2008 at 7:22 pm - Reply

    Stuart,
    This maybe simple but I cannot find a solution nowhere. I’m trying to record a simplest possible Java app, but when I start the window comes up with an error “The procedure entry point (…) could not be located in the dynamic link library jenvutils.dll” and after clicking ok next one “jdkhook.dll was unable to load dynamically cjhook_rec.dll. Error: The specified procedure could not be found.” Have you ever encourtered any issue like that? Do you know what maybe causing the problem? Do you think it’s a LoadRunner isssue or rather something with my Java or Win? Thanks in advance for any help. Cheers, Szymon

  26. Erik Ritters August 12, 2008 at 4:34 am - Reply

    Dear Stuart,

    We are new to using Load Runner and are currently trying to use LR 8.1 to test performance of an Oracle Applications installation. We’ve recorded a login scenario with some navigation but receive the following errors during play back of the recorded session:

    I have created a login and logout script with some parameters. I’m just checking how to resolve the transaction_id-issue.

    When rerunning an application oriented transaction I’m getting the error:

    “You are trying to access a page that is no longer active.
    – The referring page may have come from a previous session. Please select Home to proceed.

  27. Meenatchi Nanjundan December 19, 2008 at 1:31 am - Reply

    Hello Stuart,

    I have recently begun working on a Java-CORBA application. Your document has been extremely useful in getting things started since I have virtually nil JAVA programming experience and am using the help of the Developer. I have recorded a couple of scripts and the developer added in the Callbacks and we were able to get them running.

    With some of the screens I am getting the following type of errors:
    ————————————————————————————————-
    _keyvalue1 = new CA.KeyValue(); // IDLStruct
    _keyvalue2 = new CA.KeyValue(); // IDLStruct
    _keyvalue3 = new CA.KeyValue(); // IDLStruct
    _keyvalue4 = new CA.KeyValue(); // IDLStruct
    _keyvalue5 = new CA.KeyValue(); // IDLStruct
    _keyvalue6 = new CA.KeyValue(); // IDLStruct
    _keyvalue_array1 = new CA.KeyValue[] {_keyvalue1, _keyvalue2, _keyvalue3, _keyvalue4, _keyvalue5, _keyvalue6}; // IDLSequence
    _string2 = _dataelementmanager1.getDataElementsByCriteria(“e121212|1x|1218093449”, “CORPORATE ACTION”, “CA”, (CA.KeyValue[])_keyvalue_array1);
    ————————————————————————————————-
    The Java process takes up 99% of my CPU when recording this.

    I have posted this issue with HP. Wanted to know if you had any suggestions.

    Thanks very much for this very informative blog.

  28. Ramkumar.M January 29, 2009 at 3:30 pm - Reply

    Excellent

    Thanks for your useful information

    Cheers

    Ramkumar

Leave A Comment