{"push_id":696331552,"size":185,"distinct_size":178,"ref":"refs/heads/master","head":"9b9819e5ae45fee54b93a84a3dce54b817446f37","before":"6df49c669c3364326830d6156f4ef95221b60c24","commits":[{"sha":"15942c6ccf400ba4c810910652b7f113ca3d7a61","author":{"email":"ab8704f889d947199a58a1a1f1102d30fb4be1a3@microsoft.com","name":"Daniel Paoliello"},"message":"Fix Issue #2569 DirectiveTriviaSyntax.GetRelatedDirectives assumes there can only be one #elif\nModified DirectiveTriviaSyntax.cs such that #elif can be a related directive to another #elif. This also required putting the call to Get[Next|Previous]PossiblyRelatedDirective above the check and return otherwise it ends up in an infinite loop (returning the same #elif every time).","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/15942c6ccf400ba4c810910652b7f113ca3d7a61"},{"sha":"5870bc7f48e31f83e59c7cb4d00fbe0c43a1658c","author":{"email":"1c08efb9b3965701be9d700d9a6f481f1ffec3ea@teamcampbell.org","name":"Dustin Campbell"},"message":"Code Model: Fix issue with parented code model objects corrupting their parents\n\nThis is a fairly involved issue that can manifest in a number of ways.\nCurrently, the only known scenario where this is exposed within VS is\nthe \"Convert to Web Application\" command but there are certainly others\nand customers using Code Model could easily run into it.\n\nThe scenario is essentially this:\n\n* In Code Model, grab and hold a reference to a code model object for\nsome container element.\n* Access a certain type of child element parented by that container. In\nparticular, a property accessor, an event accessor, an attribute, an\nattribute argument, a VB Inherits statement, a VB Implements statement,\nor using directive/Imports statement.\n* Try to access a property on the container reference in step 1.\n* Exception gets thrown!\n\nUnderstanding why this happens will require understanding a few of the\nsystem concepts underlying Code Model.\n\nFirst, Code Model elements tend to have long lifetimes that live through\nfile edits and even renames. For example, one could grab a reference to\nan ```EnvDTE.CodeClass``` and hold onto it. As the user makes edits to\nthe file containing that class the class element should continute to be\nvalid (until the user makes an edit that breaks it). Since their\nlifetimes can be potentially long, Code Model elements hold onto \"node\nkeys\" rather than the SyntaxTree nodes, which they use to get back to\ntheir underlying node in the source file.\n\nNode keys have a very simple format. Essentially, they are the \"name\" of\nthe node (qualified syntactically) along with an ordinal which allows\nthere to be multiple nodes with the same name. Consider the following\ncode:\n\n```C#\nnamespace N\n{\npartial class C\n{\nvoid M() { }\n}\n\npartial class C\n{\n}\n}\n```\n\nIn the code above, there are four potential Code Model elements with the\nfollowing node keys:\n\n* N, 1\n* N.C, 1\n* N.C.M, 1\n* N.C, 2\n\nSecond, some Code Model elements don't actually have node keys. These\nare objects that are parented by other code model objects. For example,\nparameters are parented within a method or propery, property accessors\nare parented within a property, etc. These \"keyless\" objects can be a\nbit tricky because they need to hold a reference to their parent object.\n\nThird, each FileCodeModel maintains a cache of Code Model elements using\ntheir node keys. Whenever a Code Model element is going to be created\nfor a particular node key, the FileCodeModel first checks to see an\nelement already exists. If so, it returns the cached element instead.\n\nWith that background, here's what's happening:\n\nIn several cases, creating a parented keyless Code Model element was\nskipping the lookup in the FileCodeModel's cache when creating it's\nparent. So, if an element represent the parent already existed in the\ncache, a second Code Model element would be created for the same node.\nThis gets ugly because the process creating a Code Model element causes\nit to be added to the FileCodeModel's cache. So, there is an attempt to\nadd the newly created Code Model element when there's already one\npresent in the cache with the same node key.\n\nIdeally, this situation would have thrown an exception. However, when\nthere's a collision, there's a code path in the FileCodeModel's cache\nthat tries to find a free slot in the cache by changing the original of\nthe element's node key. This code is super-suspicious and is, quite\nhonestly, probably wrong. However, removing it is a risky at this point.\nSo, I'll look at cleaning this up in the master branch.\n\nFor now, I've audited all of the places where a parented keyless Code\nModel element constructs its parent and ensures that it goes through the\nFileCodeModel's lookup.","distinct":false,"url":"https://api.github.com/repos/chachik/roslyn/commits/5870bc7f48e31f83e59c7cb4d00fbe0c43a1658c"},{"sha":"bc01b649554fc580b2ed9ea4564f6ca0fe3ca72e","author":{"email":"1c08efb9b3965701be9d700d9a6f481f1ffec3ea@teamcampbell.org","name":"Dustin Campbell"},"message":"Don't pretty-list away line continuation characters in VB 9 or earlier\n\n**Customer scenario**: VB customer has legacy project targeting an\nearlier version of the language. If they use Visual Studio 2015, we\nshouldn't remove their line continuation characters and break their\nprogram.\n\nThe scenario this fix directly solves was filed on Microsoft Connect\n[here](https://connect.microsoft.com/VisualStudio/feedback/details/1035813/connect-vb-14-compiler-removes-line-continuations-even-when-web-config-specifies-vb-8-as-compiler).\nEssentially, this was filed by a customer who has a VB Web Site which\nspecifically targets Visual Basic 8.0 for legacy reasons and can't use\nVisual Studio 2015 with the project.\n\n**Description of fix**: Don't run the Remove Unnecessary Imports code\ncleaner if the LanguageVersion is VB 9 or earlier. This addresses the\ncustomer-reported scenario because the VB Web Site project system will\nset the language version to VB 9 if the target framework is less than\n4.0.\n\n**Testing done**: Unit tests added. Manually verified customer scenario.","distinct":false,"url":"https://api.github.com/repos/chachik/roslyn/commits/bc01b649554fc580b2ed9ea4564f6ca0fe3ca72e"},{"sha":"fcd4ea019e51e53eea65672f0a30f987ca94e317","author":{"email":"3dbaf49fdc06995d9a2693b1bc5df1dd3cd06d81@microsoft.com","name":"Jonathon Marolf"},"message":"Correctly detect option strict on/off when determining if cast is redundant\n\nFixes #3161 and Fixes #3163\n\nUser Scenario:\nUser has code with narrowing conversion with an explicit cast.  We will\noffer to remove the cast even though this will cause the code to not\ncompile.\n\nFix Description:\nWe previously never consulted optionstrict to determine if a\nuser-defined narrowing cast was necessary.  The fix in CastAnalyzer.vb\nwill check if the conversion is narrowing, if option strict is on, or if\nwe generate a warning on implicit narrowing conversions.  We also offer\nto add a cast if an implicit conversion warning is given.\n\nTesting:  Added regression tests + existing tests","distinct":false,"url":"https://api.github.com/repos/chachik/roslyn/commits/fcd4ea019e51e53eea65672f0a30f987ca94e317"},{"sha":"bca5a252eca37af63ead3d16f14e85df9344e22c","author":{"email":"3dbaf49fdc06995d9a2693b1bc5df1dd3cd06d81@microsoft.com","name":"Jonathon Marolf"},"message":"Responding to PR Feedback\n\nResponding to peer review feedback. Updated to never consider user\ndefined narrowing conversions unnecessary.","distinct":false,"url":"https://api.github.com/repos/chachik/roslyn/commits/bca5a252eca37af63ead3d16f14e85df9344e22c"},{"sha":"bc001a3c2f138bf82821af7c20a0cadba6ab33ab","author":{"email":"2e3866a8665624d49704002e1d54a8e5eb2c5c0e@microsoft.com","name":"Andy Gocke"},"message":"Update NuGet package creation to no longer place NuGets in Shipping/NonShipping","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/bc001a3c2f138bf82821af7c20a0cadba6ab33ab"},{"sha":"444c7a4a711fe4fe64ae5fa82d929b80845b78fd","author":{"email":"185b1a1edad77ee419171d9ad9f79baac69d3965@microsoft.com","name":"Josh Stevens"},"message":"Don't create OptionKeys with language names if the option isn't per-language","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/444c7a4a711fe4fe64ae5fa82d929b80845b78fd"},{"sha":"a52c30a794e6215a52ea265878124e22c0c3e279","author":{"email":"d97d4d5d0d076089f05fc8b01eb2978b7c6d57d9@microsoft.com","name":"Jason Malinowski"},"message":"Re-create the ViewModel each time Tools > Options is opened\n\nWithout this change the ViewModel only loads settings the first time,\nso if they change outside the dialog (think importing/exporting\nsettings, or cross-machine setting sync) the dialog won't be updated\nand will show stale state.","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/a52c30a794e6215a52ea265878124e22c0c3e279"},{"sha":"51d81c7db9cd9ac72d73b3630fc95904bb0698cf","author":{"email":"d97d4d5d0d076089f05fc8b01eb2978b7c6d57d9@microsoft.com","name":"Jason Malinowski"},"message":"Only set the option state and preview if the radio button is checked\n\nWhen a radio button is changed, two IsChecked events fire -- first\nIsChecked = true for the new selection, and then IsChecked = false for\nthe old selection. Since the ViewModel would update the preview\nregardless, the preview shown (and the options saved!) would be the\nthing that was selected before the thing you clicked.","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/51d81c7db9cd9ac72d73b3630fc95904bb0698cf"},{"sha":"c5124265b670c1ffb0a86f3096160a97f17539e9","author":{"email":"d730d825a7ed112a6b950b3a94d1011b757d272e@microsoft.com","name":"Cyrus Najmabadi"},"message":"Don't try to get IVsLanguageBlocks in a language that doesn't support SyntaxTrees.","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/c5124265b670c1ffb0a86f3096160a97f17539e9"},{"sha":"638efcf937419eb183ad66f3564eed703af1ddca","author":{"email":"d50a4528250c5e7ab89d3b057cfa34db7ebf58d4@gafter.com","name":"Neal Gafter"},"message":"Public API checker should ignore protected members on uninheritable types\nFixes #3287","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/638efcf937419eb183ad66f3564eed703af1ddca"},{"sha":"25f1cf01ff57310dd30ee2ac5e799439dd7296c6","author":{"email":"1c08efb9b3965701be9d700d9a6f481f1ffec3ea@teamcampbell.org","name":"Dustin Campbell"},"message":"Merge pull request #3294 from DustinCampbell/vb-line-continuation-fix\n\nDon't pretty-list away line continuation characters in VB 9 or earlier","distinct":false,"url":"https://api.github.com/repos/chachik/roslyn/commits/25f1cf01ff57310dd30ee2ac5e799439dd7296c6"},{"sha":"0d2070925af7d85a238105f3d9bb389c82bb0bd7","author":{"email":"1c08efb9b3965701be9d700d9a6f481f1ffec3ea@teamcampbell.org","name":"Dustin Campbell"},"message":"Merge pull request #3286 from DustinCampbell/fix-codemodel-858153\n\nCode Model: Fix issue with parented code model objects corrupting their parents","distinct":false,"url":"https://api.github.com/repos/chachik/roslyn/commits/0d2070925af7d85a238105f3d9bb389c82bb0bd7"},{"sha":"8648e6c5f1ad5101eb0a04f3706ebcea748f02e5","author":{"email":"3dbaf49fdc06995d9a2693b1bc5df1dd3cd06d81@users.noreply.github.com","name":"Jonathon Marolf"},"message":"Merge pull request #3274 from jmarolf/VBSimplifierBug\n\nCorrectly detect option strict on/off when determining if cast is red…","distinct":false,"url":"https://api.github.com/repos/chachik/roslyn/commits/8648e6c5f1ad5101eb0a04f3706ebcea748f02e5"},{"sha":"718d819552aaea52c08fdf274ee37e1739623680","author":{"email":"1c08efb9b3965701be9d700d9a6f481f1ffec3ea@teamcampbell.org","name":"Dustin Campbell"},"message":"Code Model: Clean up PartialTypeCollection, making it more resilient","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/718d819552aaea52c08fdf274ee37e1739623680"},{"sha":"9749eb07a86c78c03e0c41adb441124454415098","author":{"email":"1c08efb9b3965701be9d700d9a6f481f1ffec3ea@teamcampbell.org","name":"Dustin Campbell"},"message":"Clean up OverloadsCollection to be more resilient like PartialTypeCollection","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/9749eb07a86c78c03e0c41adb441124454415098"},{"sha":"879a8b644e9d0517158caa9614d8f274826736ae","author":{"email":"b2723955eacd5886ab06a1d0aaaa3d75e70b4963@microsoft.com","name":"Matt Warren"},"message":"Keep parameter attributes on same line","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/879a8b644e9d0517158caa9614d8f274826736ae"},{"sha":"d7adc68e99ccbba500bd5029633ad1d31e77661e","author":{"email":"29df79e2ce35367208af80a4448c3b0037f57e52@microsoft.com","name":"Tomas Matousek"},"message":"EnC: Handle anonymous types and delegates hoisted to closure or state machine","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/d7adc68e99ccbba500bd5029633ad1d31e77661e"},{"sha":"cf60d461ec36eb6d5357d47cd6d58d6064295caa","author":{"email":"b2723955eacd5886ab06a1d0aaaa3d75e70b4963@microsoft.com","name":"Matt Warren"},"message":"Add eol parameter for NormalizeSyntax API","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/cf60d461ec36eb6d5357d47cd6d58d6064295caa"},{"sha":"3b47a2f9755f2bc19b083679c2b5546f1a1e93d7","author":{"email":"29df79e2ce35367208af80a4448c3b0037f57e52@microsoft.com","name":"Tomas Matousek"},"message":"Public API cleanup: replace fields with properties","distinct":true,"url":"https://api.github.com/repos/chachik/roslyn/commits/3b47a2f9755f2bc19b083679c2b5546f1a1e93d7"}]}