Skip to content

Commit

Permalink
Composable type support and bug fixes (#652)
Browse files Browse the repository at this point in the history
* Generate WinMD for types which extend composable types.

* Add WinUI to test app to allow to build.

* Fix headers.

* Add WinUI test app to test composable types.

* Add missed targets

* Move away from creating a CCW instance, but rather use it for generating vtable only.

* Fix static classes, classes without default constructor, consume composable types in XAML, and add IManagedActivationFactory.

* Fix diagnostics to handle static classes which aren't sealed.

* Added comment and indenting changes.

* Add new to remove warning.

* Fix build.

* PR feedback.

* PR feedback.

* PR feedback.
  • Loading branch information
manodasanW committed Jan 9, 2021
1 parent 21e070e commit 67aef89
Show file tree
Hide file tree
Showing 47 changed files with 1,366 additions and 198 deletions.
8 changes: 8 additions & 0 deletions nuget/Microsoft.Windows.CsWinRT.targets
Expand Up @@ -115,8 +115,16 @@ $(CsWinRTFilters)
<CompilerVisibleProperty Include="CsWinRTKeepGeneratedSources" />
<CompilerVisibleProperty Include="CsWinRTWindowsMetadata" />
<CompilerVisibleProperty Include="CsWinRTGenerateProjection" />
<CompilerVisibleProperty Include="CsWinRTAuthoringInputs" />
</ItemGroup>

<!-- Note this runs before the msbuild editor config file is generated because that is what is used to pass properties to the source generator. -->
<Target Name="CsWinRTSetAuthoringWinMDs" BeforeTargets="GenerateMSBuildEditorConfigFile;GenerateMSBuildEditorConfigFileCore" DependsOnTargets="CsWinRTRemoveWinMDReferences" Condition="$(CsWinRTEnabled)">
<PropertyGroup>
<CsWinRTAuthoringInputs>$(CsWinRTAuthoringInputs) @(CsWinRTInputs->'"%(FullPath)"', ' ') @(CsWinRTAuthoringWinMDs->'"%(FullPath)"', ' ')</CsWinRTAuthoringInputs>
</PropertyGroup>
</Target>

<Import Project="$(MSBuildThisFileDirectory)Microsoft.Windows.CsWinRT.Prerelease.targets" Condition="Exists('$(MSBuildThisFileDirectory)Microsoft.Windows.CsWinRT.Prerelease.targets')"/>

</Project>
Expand Up @@ -29,7 +29,11 @@
<activatableClass
name="AuthoringSample.DisposableClass"
threadingModel="both"
xmlns="urn:schemas-microsoft-com:winrt.v1" />
xmlns="urn:schemas-microsoft-com:winrt.v1" />
<activatableClass
name="AuthoringSample.StaticClass"
threadingModel="both"
xmlns="urn:schemas-microsoft-com:winrt.v1" />
<activatableClass
name="AuthoringSample.TestClass"
threadingModel="both"
Expand Down
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\packages\Microsoft.WinUI.3.0.0-preview3.201113.0\build\native\Microsoft.WinUI.props" Condition="Exists('..\..\packages\Microsoft.WinUI.3.0.0-preview3.201113.0\build\native\Microsoft.WinUI.props')" />
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.201113.7\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.201113.7\build\native\Microsoft.Windows.CppWinRT.props')" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
Expand Down Expand Up @@ -28,6 +29,7 @@
<CharacterSet>Unicode</CharacterSet>
<_WinMDPlatform>$(Platform)</_WinMDPlatform>
<_WinMDPlatform Condition="'$(Platform)' == 'Win32'">x86</_WinMDPlatform>
<EnablePriGenTooling>false</EnablePriGenTooling>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
Expand All @@ -46,6 +48,7 @@
</ItemGroup>
<ItemGroup>
<None Include="Directory.Build.targets" />
<None Include="DoNotImport_MsAppxPackageTargets.targets" />
<None Include="packages.config" />
<None Include="WinRT.Host.runtimeconfig.json">
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
Expand All @@ -56,6 +59,9 @@
<ProjectReference Include="..\..\Projections\Windows\Windows.csproj">
<Project>{ffa9a78b-f53f-43ee-af87-24a80f4c330a}</Project>
</ProjectReference>
<ProjectReference Include="..\..\Projections\WinUI\WinUI.csproj">
<Project>{0a991d5f-bfee-4d2f-9aad-6ad06470a5df}</Project>
</ProjectReference>
<ProjectReference Include="..\WinRT.Host.Shim\WinRT.Host.Shim.csproj">
<Project>{0bb8f82d-874e-45aa-bca3-20ce0562164a}</Project>
</ProjectReference>
Expand All @@ -82,6 +88,8 @@
<ImportGroup Label="ExtensionTargets">
<Import Project="..\..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1.3\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.targets" Condition="Exists('..\..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1.3\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.targets')" />
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.201113.7\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.201113.7\build\native\Microsoft.Windows.CppWinRT.targets')" />
<Import Project="..\..\packages\Microsoft.WinUI.3.0.0-preview3.201113.0\build\native\Microsoft.WinUI.targets" Condition="Exists('..\..\packages\Microsoft.WinUI.3.0.0-preview3.201113.0\build\native\Microsoft.WinUI.targets')" />
<Import Project="..\..\packages\Microsoft.VCRTForwarders.140.1.0.7\build\native\Microsoft.VCRTForwarders.140.targets" Condition="Exists('..\..\packages\Microsoft.VCRTForwarders.140.1.0.7\build\native\Microsoft.VCRTForwarders.140.targets')" />
</ImportGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
Expand Down Expand Up @@ -152,5 +160,8 @@
<Error Condition="!Exists('..\..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1.3\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1.3\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.targets'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.201113.7\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.201113.7\build\native\Microsoft.Windows.CppWinRT.props'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.201113.7\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.201113.7\build\native\Microsoft.Windows.CppWinRT.targets'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.WinUI.3.0.0-preview3.201113.0\build\native\Microsoft.WinUI.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.WinUI.3.0.0-preview3.201113.0\build\native\Microsoft.WinUI.props'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.WinUI.3.0.0-preview3.201113.0\build\native\Microsoft.WinUI.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.WinUI.3.0.0-preview3.201113.0\build\native\Microsoft.WinUI.targets'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.VCRTForwarders.140.1.0.7\build\native\Microsoft.VCRTForwarders.140.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.VCRTForwarders.140.1.0.7\build\native\Microsoft.VCRTForwarders.140.targets'))" />
</Target>
</Project>
@@ -1,38 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="test.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="Directory.Build.targets" />
<None Include="WinRT.Host.runtimeconfig.json" />
</ItemGroup>
<ItemGroup>
<Manifest Include="AuthoringConsumptionTest.exe.manifest" />
</ItemGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="test.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="Directory.Build.targets" />
<None Include="WinRT.Host.runtimeconfig.json" />
<None Include="DoNotImport_MsAppxPackageTargets.targets" />
</ItemGroup>
<ItemGroup>
<Manifest Include="AuthoringConsumptionTest.exe.manifest" />
</ItemGroup>
</Project>
@@ -1,6 +1,7 @@
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<PropertyGroup>
<MsAppxPackageTargets>$(MSBuildProjectDirectory)/DoNotImport_MsAppxPackageTargets.targets</MsAppxPackageTargets>
<PrepareForRunDependsOn>CopyTestAssets;$(PrepareForRunDependsOn)</PrepareForRunDependsOn>
</PropertyGroup>

Expand Down
@@ -0,0 +1,5 @@
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<!-- Workaround: not every project that references the WinUI nuget wants to build a PRI file -->

</Project>
4 changes: 3 additions & 1 deletion src/Authoring/AuthoringConsumptionTest/packages.config
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn" version="1.8.1.3" targetFramework="native" />
<package id="Microsoft.VCRTForwarders.140" version="1.0.7" targetFramework="native" />
<package id="Microsoft.Windows.CppWinRT" version="2.0.201113.7" targetFramework="native" />
<package id="Microsoft.WinUI" version="3.0.0-preview3.201113.0" targetFramework="native" />
</packages>
14 changes: 14 additions & 0 deletions src/Authoring/AuthoringConsumptionTest/pch.h
@@ -1,6 +1,20 @@
#pragma once

// Undefine GetCurrentTime macro to prevent
// conflict with Storyboard::GetCurrentTime
#undef GetCurrentTime

#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h>

#pragma push_macro("X86")
#pragma push_macro("X64")
#undef X86
#undef X64
#include "winrt/Windows.System.h"
#pragma pop_macro("X64")
#pragma pop_macro("X86")

#include <winrt/AuthoringSample.h>

#include "gtest/gtest.h"
2 changes: 2 additions & 0 deletions src/Authoring/AuthoringConsumptionTest/test.cpp
Expand Up @@ -8,6 +8,8 @@ TEST(AuthoringTest, Statics)
{
EXPECT_EQ(TestClass::GetDefaultFactor(), 1);
EXPECT_EQ(TestClass::GetDefaultNumber(), 2);
EXPECT_EQ(StaticClass::GetNumber(), 4);
EXPECT_EQ(StaticClass::GetNumber(2), 2);
}

TEST(AuthoringTest, FunctionCalls)
Expand Down
15 changes: 13 additions & 2 deletions src/Authoring/AuthoringSample/AuthoringSample.csproj
Expand Up @@ -13,8 +13,19 @@
<!-- <CsWinRTKeepGeneratedSources>true</CsWinRTKeepGeneratedSources> -->
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\Projections\Windows\Windows.csproj" />
<ItemGroup>
<CsWinRTAuthoringWinMDs Include="$(NuGetPackageRoot)\microsoft.winui\3.0.0-preview3.201113.0\lib\uap10.0\Microsoft.ApplicationModel.Resources.winmd" />
<CsWinRTAuthoringWinMDs Include="$(NuGetPackageRoot)\microsoft.winui\3.0.0-preview3.201113.0\lib\uap10.0\Microsoft.Foundation.winmd" />
<CsWinRTAuthoringWinMDs Include="$(NuGetPackageRoot)\microsoft.winui\3.0.0-preview3.201113.0\lib\uap10.0\Microsoft.Graphics.winmd" />
<CsWinRTAuthoringWinMDs Include="$(NuGetPackageRoot)\microsoft.winui\3.0.0-preview3.201113.0\lib\uap10.0\Microsoft.System.winmd" />
<CsWinRTAuthoringWinMDs Include="$(NuGetPackageRoot)\microsoft.winui\3.0.0-preview3.201113.0\lib\uap10.0\Microsoft.UI.Text.winmd" />
<CsWinRTAuthoringWinMDs Include="$(NuGetPackageRoot)\microsoft.winui\3.0.0-preview3.201113.0\lib\uap10.0\Microsoft.UI.winmd" />
<CsWinRTAuthoringWinMDs Include="$(NuGetPackageRoot)\microsoft.winui\3.0.0-preview3.201113.0\lib\uap10.0\Microsoft.Web.WebView2.Core.winmd" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\Projections\Windows\Windows.csproj" />
<ProjectReference Include="..\..\Projections\WinUI\WinUI.csproj" />
<ProjectReference Include="..\WinRT.SourceGenerator\WinRT.SourceGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\..\cswinrt\cswinrt.vcxproj" />
<ProjectReference Include="..\..\WinRT.Runtime\WinRT.Runtime.csproj" />
Expand Down

0 comments on commit 67aef89

Please sign in to comment.