Skip to content

Commit 2300b0f

Browse files
committed
Link java sources into native fragments to compile them there in the IDE
For each native SWT fragment link the source-folders containing the java classes used in that native fragment into said fragment's Eclipse project. This allows to compile the java classes within the fragment project already in the development workspace and consequently to develop and test the code in the workspace using the same structure as the built artifacts. If desired, the code of multiple/all fragments can be checked-out and compiled at the same time, just by opening all desired fragment projects. The sources still reside within the org.eclipse.swt main/host bundle but are not compiled there anymore in the dev-workspace. This allows to share common code while defining it only once at a central location. Also move the shared preferences into the 'binaries/.setting' folder and link it as '.settings' folder in each native fragment. This allows to share the same settings in all fragment projects, while defining them only once, just like the code. Previously within the IDE workspace, the SWT java-sources for a platform have been compiled within the org.eclipse.swt project using a .classpath file specially crafted for each supported window-system/platform. Therefore when checking out the SWT sources in the IDE one had to rename the '.classpath_${ws}' template for the desired platform to '.classpath' to use it locally. With this change this renaming is not necessary anymore. Furthermore ignore all 'Restrictions' type API problem, since SWT does only reference its own internal classes. Because SWT does not have external dependencies internals of other bundles cannot be referenced. Ignoring these kind of problems avoids the need to add filters to suppress them. Furthermore this change allows PDE API-Tools to remove the built-in special handling of the org.eclipse.swt setup because now the API baseline check within the IDE can happen simply in the fragment as it exists in the baseline.
1 parent 6e665a6 commit 2300b0f

File tree

34 files changed

+746
-729
lines changed

34 files changed

+746
-729
lines changed

bundles/org.eclipse.swt/.classpath_cocoa_x86_64 renamed to binaries/.classpath_cocoa

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,7 @@
88
<classpathentry kind="src" path="Eclipse SWT/emulated/expand"/>
99
<classpathentry kind="src" path="Eclipse SWT/emulated/tooltip"/>
1010
<classpathentry kind="src" path="Eclipse SWT PI/common"/>
11-
<classpathentry kind="src" path="Eclipse SWT PI/cocoa">
12-
<attributes>
13-
<attribute value="org.eclipse.swt.cocoa.macosx.x86_64" name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY"/>
14-
</attributes>
15-
</classpathentry>
11+
<classpathentry kind="src" path="Eclipse SWT PI/cocoa"/>
1612
<classpathentry kind="src" path="Eclipse SWT Accessibility/common"/>
1713
<classpathentry kind="src" path="Eclipse SWT Accessibility/cocoa"/>
1814
<classpathentry kind="src" path="Eclipse SWT AWT/common"/>
@@ -29,6 +25,5 @@
2925
<classpathentry kind="src" path="Eclipse SWT WebKit/cocoa"/>
3026
<classpathentry kind="src" path="Eclipse SWT OpenGL/cocoa"/>
3127
<classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
32-
<classpathentry kind="src" output="bin_build" path="build-scripts"/>
3328
<classpathentry kind="output" path="bin"/>
3429
</classpath>

bundles/org.eclipse.swt/.classpath_gtk renamed to binaries/.classpath_gtk

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,9 @@
55
<classpathentry kind="src" path="Eclipse SWT/cairo"/>
66
<classpathentry kind="src" path="Eclipse SWT/emulated/bidi"/>
77
<classpathentry kind="src" path="Eclipse SWT/emulated/coolbar"/>
8-
<classpathentry kind="src" path="Eclipse SWT/emulated/taskbar"/>
8+
<classpathentry kind="src" path="Eclipse SWT/emulated/taskbar"/>
99
<classpathentry kind="src" path="Eclipse SWT/common"/>
10-
<classpathentry kind="src" path="Eclipse SWT PI/gtk">
11-
<attributes>
12-
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="org.eclipse.swt.gtk.linux.x86_64"/>
13-
</attributes>
14-
</classpathentry>
10+
<classpathentry kind="src" path="Eclipse SWT PI/gtk"/>
1511
<classpathentry kind="src" path="Eclipse SWT PI/cairo"/>
1612
<classpathentry kind="src" path="Eclipse SWT PI/common"/>
1713
<classpathentry kind="src" path="Eclipse SWT Accessibility/gtk"/>
@@ -31,6 +27,5 @@
3127
<classpathentry kind="src" path="Eclipse SWT OpenGL/glx"/>
3228
<classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
3329
<classpathentry kind="src" path="Eclipse SWT WebKit/gtk"/>
34-
<classpathentry kind="src" output="bin_build" path="build-scripts"/>
3530
<classpathentry kind="output" path="bin"/>
3631
</classpath>

bundles/org.eclipse.swt/.classpath_win32 renamed to binaries/.classpath_win32

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,7 @@
44
<classpathentry kind="src" path="Eclipse SWT/win32"/>
55
<classpathentry kind="src" path="Eclipse SWT/common"/>
66
<classpathentry kind="src" path="Eclipse SWT PI/common"/>
7-
<classpathentry kind="src" path="Eclipse SWT PI/win32">
8-
<attributes>
9-
<attribute value="org.eclipse.swt.win32.win32.x86_64" name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY"/>
10-
</attributes>
11-
</classpathentry>
7+
<classpathentry kind="src" path="Eclipse SWT PI/win32"/>
128
<classpathentry kind="src" path="Eclipse SWT OLE Win32/win32"/>
139
<classpathentry kind="src" path="Eclipse SWT Accessibility/win32"/>
1410
<classpathentry kind="src" path="Eclipse SWT Accessibility/common"/>
@@ -25,6 +21,5 @@
2521
<classpathentry kind="src" path="Eclipse SWT Browser/win32"/>
2622
<classpathentry kind="src" path="Eclipse SWT OpenGL/win32"/>
2723
<classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
28-
<classpathentry kind="src" output="bin_build" path="build-scripts"/>
2924
<classpathentry kind="output" path="bin"/>
3025
</classpath>
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled
3+
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
4+
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
5+
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
6+
org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
7+
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
8+
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
9+
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
10+
org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
11+
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
12+
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
13+
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
14+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
15+
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
16+
org.eclipse.jdt.core.compiler.compliance=17
17+
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
18+
org.eclipse.jdt.core.compiler.debug.localVariable=generate
19+
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
20+
org.eclipse.jdt.core.compiler.doc.comment.support=enabled
21+
org.eclipse.jdt.core.compiler.problem.APILeak=warning
22+
org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
23+
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
24+
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
25+
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
26+
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
27+
org.eclipse.jdt.core.compiler.problem.deadCode=warning
28+
org.eclipse.jdt.core.compiler.problem.deprecation=warning
29+
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
30+
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
31+
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
32+
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
33+
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
34+
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
35+
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
36+
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
37+
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
38+
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
39+
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
40+
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
41+
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
42+
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
43+
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
44+
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
45+
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
46+
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
47+
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
48+
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
49+
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
50+
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
51+
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
52+
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
53+
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
54+
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
55+
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
56+
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
57+
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
58+
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
59+
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
60+
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
61+
org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
62+
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
63+
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
64+
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
65+
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
66+
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
67+
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
68+
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
69+
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
70+
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
71+
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
72+
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
73+
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
74+
org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
75+
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
76+
org.eclipse.jdt.core.compiler.problem.nullReference=warning
77+
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
78+
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
79+
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
80+
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
81+
org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
82+
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
83+
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
84+
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
85+
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
86+
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
87+
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
88+
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
89+
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
90+
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
91+
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
92+
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
93+
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
94+
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
95+
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
96+
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
97+
org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
98+
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
99+
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
100+
org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
101+
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
102+
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
103+
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
104+
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
105+
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
106+
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
107+
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
108+
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
109+
org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
110+
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
111+
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
112+
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
113+
org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
114+
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
115+
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
116+
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
117+
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
118+
org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
119+
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
120+
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
121+
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
122+
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
123+
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
124+
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
125+
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
126+
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
127+
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
128+
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
129+
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
130+
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
131+
org.eclipse.jdt.core.compiler.release=enabled
132+
org.eclipse.jdt.core.compiler.source=17

bundles/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs renamed to binaries/.settings/org.eclipse.pde.api.tools.prefs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
4646
FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
4747
FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
4848
FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
49-
ILLEGAL_EXTEND=Error
50-
ILLEGAL_IMPLEMENT=Error
51-
ILLEGAL_INSTANTIATE=Error
52-
ILLEGAL_OVERRIDE=Error
53-
ILLEGAL_REFERENCE=Error
49+
ILLEGAL_EXTEND=Ignore
50+
ILLEGAL_IMPLEMENT=Ignore
51+
ILLEGAL_INSTANTIATE=Ignore
52+
ILLEGAL_OVERRIDE=Ignore
53+
ILLEGAL_REFERENCE=Ignore
5454
INTERFACE_ELEMENT_TYPE_ADDED_DEFAULT_METHOD=Error
5555
INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
5656
INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error

binaries/org.eclipse.swt.cocoa.macosx.aarch64/.project

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
<projects>
66
</projects>
77
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
813
<buildCommand>
914
<name>org.eclipse.pde.ManifestBuilder</name>
1015
<arguments>
@@ -22,7 +27,86 @@
2227
</buildCommand>
2328
</buildSpec>
2429
<natures>
30+
<nature>org.eclipse.jdt.core.javanature</nature>
2531
<nature>org.eclipse.pde.PluginNature</nature>
2632
<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
2733
</natures>
34+
<linkedResources>
35+
<link>
36+
<name>.classpath</name>
37+
<type>1</type>
38+
<locationURI>PARENT-1-PROJECT_LOC/.classpath_cocoa</locationURI>
39+
</link>
40+
<link>
41+
<name>.settings</name>
42+
<type>2</type>
43+
<locationURI>PARENT-1-PROJECT_LOC/.settings</locationURI>
44+
</link>
45+
<link>
46+
<name>Eclipse SWT</name>
47+
<type>2</type>
48+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT</locationURI>
49+
</link>
50+
<link>
51+
<name>Eclipse SWT Accessibility</name>
52+
<type>2</type>
53+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20Accessibility</locationURI>
54+
</link>
55+
<link>
56+
<name>Eclipse SWT AWT</name>
57+
<type>2</type>
58+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20AWT</locationURI>
59+
</link>
60+
<link>
61+
<name>Eclipse SWT Browser</name>
62+
<type>2</type>
63+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20Browser</locationURI>
64+
</link>
65+
<link>
66+
<name>Eclipse SWT Custom Widgets</name>
67+
<type>2</type>
68+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20Custom%20Widgets</locationURI>
69+
</link>
70+
<link>
71+
<name>Eclipse SWT Drag and Drop</name>
72+
<type>2</type>
73+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20Drag%20and%20Drop</locationURI>
74+
</link>
75+
<link>
76+
<name>Eclipse SWT OLE Win32</name>
77+
<type>2</type>
78+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20OLE%20Win32</locationURI>
79+
</link>
80+
<link>
81+
<name>Eclipse SWT OpenGL</name>
82+
<type>2</type>
83+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20OpenGL</locationURI>
84+
</link>
85+
<link>
86+
<name>Eclipse SWT PI</name>
87+
<type>2</type>
88+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20PI</locationURI>
89+
</link>
90+
<link>
91+
<name>Eclipse SWT Printing</name>
92+
<type>2</type>
93+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20Printing</locationURI>
94+
</link>
95+
<link>
96+
<name>Eclipse SWT Program</name>
97+
<type>2</type>
98+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20Program</locationURI>
99+
</link>
100+
<link>
101+
<name>Eclipse SWT WebKit</name>
102+
<type>2</type>
103+
<locationURI>SWT_HOST_PLUGIN/Eclipse%20SWT%20WebKit</locationURI>
104+
</link>
105+
</linkedResources>
106+
<variableList>
107+
<variable>
108+
<name>SWT_HOST_PLUGIN</name>
109+
<value>$%7BPARENT-2-PROJECT_LOC%7D/bundles/org.eclipse.swt</value>
110+
</variable>
111+
</variableList>
28112
</projectDescription>

0 commit comments

Comments
 (0)