Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Intellij Community
Commits
77e3a064
Commit
77e3a064
authored
6 years ago
by
Anton Makeev
1
Browse files
Options
Download
Email Patches
Plain Diff
FUS-310 Improve File Type usage/editing statistics with file type schema: safer reported values
parent
e68a51cf
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeUsageCounterCollector.java
+42
-9
...llectors/fus/fileTypes/FileTypeUsageCounterCollector.java
platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeUsageSchemaDescriptor.java
+5
-6
...llectors/fus/fileTypes/FileTypeUsageSchemaDescriptor.java
platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml
+1
-1
...atform-resources/src/META-INF/PlatformExtensionPoints.xml
plugins/gradle/java/resources/META-INF/gradle-groovy-integration.xml
+1
-1
...dle/java/resources/META-INF/gradle-groovy-integration.xml
plugins/gradle/java/src/config/GradleScriptTypeDetector.java
+2
-4
plugins/gradle/java/src/config/GradleScriptTypeDetector.java
plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/groovy/MavenGroovyScriptTypeDetector.java
+2
-4
...a/maven/plugins/groovy/MavenGroovyScriptTypeDetector.java
plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenFileTypeFactory.java
+2
-4
.../org/jetbrains/idea/maven/utils/MavenFileTypeFactory.java
plugins/maven/src/main/resources/META-INF/groovy-support.xml
+1
-1
plugins/maven/src/main/resources/META-INF/groovy-support.xml
plugins/maven/src/main/resources/META-INF/plugin.xml
+1
-1
plugins/maven/src/main/resources/META-INF/plugin.xml
with
57 additions
and
31 deletions
+57
-31
platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeUsageCounterCollector.java
+
42
-
9
View file @
77e3a064
...
...
@@ -4,15 +4,21 @@ package com.intellij.internal.statistic.collectors.fus.fileTypes;
import
com.intellij.internal.statistic.eventLog.FeatureUsageData
;
import
com.intellij.internal.statistic.service.fus.collectors.FUCounterUsageLogger
;
import
com.intellij.internal.statistic.utils.StatisticsUtilKt
;
import
com.intellij.openapi.diagnostic.Logger
;
import
com.intellij.openapi.extensions.AbstractExtensionPointBean
;
import
com.intellij.openapi.extensions.ExtensionPointName
;
import
com.intellij.openapi.fileTypes.FileType
;
import
com.intellij.openapi.project.Project
;
import
com.intellij.openapi.util.LazyInstance
;
import
com.intellij.openapi.vfs.VirtualFile
;
import
com.intellij.util.KeyedLazyInstanceEP
;
import
com.intellij.util.KeyedLazyInstance
;
import
com.intellij.util.xmlb.annotations.Attribute
;
import
org.jetbrains.annotations.NotNull
;
public
class
FileTypeUsageCounterCollector
{
private
static
final
ExtensionPointName
<
KeyedLazyInstanceEP
<
FileTypeUsageSchemaDescriptor
>>
EP
=
private
static
final
Logger
LOG
=
Logger
.
getInstance
(
"#"
+
FileTypeUsageCounterCollector
.
class
.
getPackage
().
getName
());
private
static
final
ExtensionPointName
<
FileTypeUsageSchemaDescriptorEP
<
FileTypeUsageSchemaDescriptor
>>
EP
=
ExtensionPointName
.
create
(
"com.intellij.fileTypeUsageSchemaDescriptor"
);
public
static
void
triggerEdit
(
@NotNull
Project
project
,
@NotNull
VirtualFile
file
)
{
...
...
@@ -29,15 +35,15 @@ public class FileTypeUsageCounterCollector {
final
FeatureUsageData
data
=
new
FeatureUsageData
().
addData
(
"type"
,
type
);
FileType
fileType
=
file
.
getFileType
();
for
(
KeyedLazyInstance
EP
<
FileTypeUsageSchemaDescriptor
>
ext
:
EP
.
getExtensionList
())
{
for
(
FileTypeUsageSchemaDescriptor
EP
<
FileTypeUsageSchemaDescriptor
>
ext
:
EP
.
getExtensionList
())
{
FileTypeUsageSchemaDescriptor
instance
=
ext
.
getInstance
();
if
(
ext
.
schema
==
null
)
{
LOG
.
warn
(
"Extension "
+
ext
.
implementationClass
+
" should define a 'schema' attribute"
);
continue
;
}
String
schema
=
instance
.
describeSchema
(
file
);
if
(
schema
!=
null
)
{
if
(!
StatisticsUtilKt
.
getPluginType
(
instance
.
getClass
()).
isDevelopedByJetBrains
())
{
schema
=
"third.party"
;
}
data
.
addData
(
"schema"
,
schema
);
if
(
instance
.
describes
(
file
))
{
data
.
addData
(
"schema"
,
StatisticsUtilKt
.
getPluginType
(
instance
.
getClass
()).
isSafeToReport
()
?
ext
.
schema
:
"third.party"
);
break
;
}
}
...
...
@@ -45,4 +51,31 @@ public class FileTypeUsageCounterCollector {
final
String
id
=
FileTypeUsagesCollector
.
toReportedId
(
fileType
,
data
);
FUCounterUsageLogger
.
getInstance
().
logEvent
(
project
,
"file.types.usage"
,
id
,
data
);
}
public
static
class
FileTypeUsageSchemaDescriptorEP
<
T
>
extends
AbstractExtensionPointBean
implements
KeyedLazyInstance
<
T
>
{
// these must be public for scrambling compatibility
@Attribute
(
"schema"
)
public
String
schema
;
@Attribute
(
"implementationClass"
)
public
String
implementationClass
;
private
final
LazyInstance
<
T
>
myHandler
=
new
LazyInstance
<
T
>()
{
@Override
protected
Class
<
T
>
getInstanceClass
()
throws
ClassNotFoundException
{
return
findClass
(
implementationClass
);
}
};
@NotNull
@Override
public
T
getInstance
()
{
return
myHandler
.
getValue
();
}
@Override
public
String
getKey
()
{
return
schema
;
}
}
}
This diff is collapsed.
Click to expand it.
platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeUsageSchemaDescriptor.java
+
5
-
6
View file @
77e3a064
...
...
@@ -3,14 +3,13 @@ package com.intellij.internal.statistic.collectors.fus.fileTypes;
import
com.intellij.openapi.vfs.VirtualFile
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
public
interface
FileTypeUsageSchemaDescriptor
{
/**
* Used to categorise file types usage statistics.
* If the file has some generic file type (e.g. XML), this method allow specifying the 'schema' more precisely,
* e.g `Maven` or `Spring`.
* Is used to categorise file types usage statistics.
* If a file has some generic file type (e.g. XML), this method allow specifying its 'schema' more precisely, e.g `Maven` or `Spring`.
*
* @return true if the given file has the schema name, given in the `schema` attribute of the `FileTypeUsageSchemaDescriptor` extension.
*/
@Nullable
String
describeSchema
(
@NotNull
VirtualFile
file
);
boolean
describes
(
@NotNull
VirtualFile
file
);
}
This diff is collapsed.
Click to expand it.
platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml
+
1
-
1
View file @
77e3a064
...
...
@@ -48,7 +48,7 @@
interface=
"com.intellij.openapi.fileTypes.FileTypeFactory"
/>
<extensionPoint
name=
"fileTypeUsageSchemaDescriptor"
beanClass=
"com.intellij.
util.KeyedLazyInstance
EP"
>
beanClass=
"com.intellij.
internal.statistic.collectors.fus.fileTypes.FileTypeUsageCounterCollector$FileTypeUsageSchemaDescriptor
EP"
>
<with
attribute=
"implementationClass"
implements=
"com.intellij.internal.statistic.collectors.fus.fileTypes.FileTypeUsageSchemaDescriptor"
/>
</extensionPoint>
...
...
This diff is collapsed.
Click to expand it.
plugins/gradle/java/resources/META-INF/gradle-groovy-integration.xml
+
1
-
1
View file @
77e3a064
...
...
@@ -50,7 +50,7 @@
<runLineMarkerContributor
language=
"Groovy"
id=
"gradleGroovyRunLineMarkerProvider"
implementationClass=
"org.jetbrains.plugins.gradle.execution.GradleGroovyRunLineMarkerProvider"
/>
<fileTypeUsageSchemaDescriptor
implementationClass=
"org.jetbrains.plugins.gradle.config.GradleScriptTypeDetector"
/>
<fileTypeUsageSchemaDescriptor
schema=
"Gradle"
implementationClass=
"org.jetbrains.plugins.gradle.config.GradleScriptTypeDetector"
/>
</extensions>
<extensions
defaultExtensionNs=
"org.intellij.groovy"
>
...
...
This diff is collapsed.
Click to expand it.
plugins/gradle/java/src/config/GradleScriptTypeDetector.java
+
2
-
4
View file @
77e3a064
...
...
@@ -18,7 +18,6 @@ package org.jetbrains.plugins.gradle.config;
import
com.intellij.internal.statistic.collectors.fus.fileTypes.FileTypeUsageSchemaDescriptor
;
import
com.intellij.openapi.vfs.VirtualFile
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.plugins.gradle.util.GradleConstants
;
import
org.jetbrains.plugins.groovy.GroovyFileType
;
import
org.jetbrains.plugins.groovy.extensions.GroovyScriptTypeDetector
;
...
...
@@ -37,11 +36,10 @@ public class GradleScriptTypeDetector extends GroovyScriptTypeDetector implement
return
GradleConstants
.
EXTENSION
.
equals
(
script
.
getViewProvider
().
getVirtualFile
().
getExtension
());
}
@Nullable
@Override
public
String
describe
Schema
(
@NotNull
VirtualFile
file
)
{
public
boolean
describe
s
(
@NotNull
VirtualFile
file
)
{
String
name
=
file
.
getName
();
return
file
.
getFileType
()
==
GroovyFileType
.
GROOVY_FILE_TYPE
&&
(
name
.
equals
(
GradleConstants
.
DEFAULT_SCRIPT_NAME
)
||
name
.
equals
(
GradleConstants
.
SETTINGS_FILE_NAME
))
?
"Gradle"
:
null
;
(
name
.
equals
(
GradleConstants
.
DEFAULT_SCRIPT_NAME
)
||
name
.
equals
(
GradleConstants
.
SETTINGS_FILE_NAME
));
}
}
This diff is collapsed.
Click to expand it.
plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/groovy/MavenGroovyScriptTypeDetector.java
+
2
-
4
View file @
77e3a064
...
...
@@ -18,7 +18,6 @@ package org.jetbrains.idea.maven.plugins.groovy;
import
com.intellij.internal.statistic.collectors.fus.fileTypes.FileTypeUsageSchemaDescriptor
;
import
com.intellij.openapi.vfs.VirtualFile
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.plugins.groovy.GroovyFileType
;
import
org.jetbrains.plugins.groovy.extensions.GroovyScriptTypeDetector
;
import
org.jetbrains.plugins.groovy.lang.psi.GroovyFile
;
...
...
@@ -36,10 +35,9 @@ public class MavenGroovyScriptTypeDetector extends GroovyScriptTypeDetector impl
return
isMavenGroovyScript
(
script
.
getViewProvider
().
getVirtualFile
());
}
@Nullable
@Override
public
String
describe
Schema
(
@NotNull
VirtualFile
file
)
{
return
isMavenGroovyScript
(
file
)
?
"Maven Groovy"
:
null
;
public
boolean
describe
s
(
@NotNull
VirtualFile
file
)
{
return
isMavenGroovyScript
(
file
);
}
private
static
boolean
isMavenGroovyScript
(
@NotNull
VirtualFile
file
)
{
...
...
This diff is collapsed.
Click to expand it.
plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenFileTypeFactory.java
+
2
-
4
View file @
77e3a064
...
...
@@ -23,7 +23,6 @@ import com.intellij.openapi.fileTypes.FileTypeFactory;
import
com.intellij.openapi.util.io.FileUtil
;
import
com.intellij.openapi.vfs.VirtualFile
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.idea.maven.model.MavenConstants
;
/**
...
...
@@ -36,9 +35,8 @@ public class MavenFileTypeFactory extends FileTypeFactory implements FileTypeUsa
consumer
.
consume
(
XmlFileType
.
INSTANCE
,
MavenConstants
.
POM_EXTENSION
);
}
@Nullable
@Override
public
String
describe
Schema
(
@NotNull
VirtualFile
file
)
{
return
file
.
getFileType
()
==
XmlFileType
.
INSTANCE
&&
FileUtil
.
namesEqual
(
file
.
getName
(),
MavenConstants
.
POM_XML
)
?
"Maven"
:
null
;
public
boolean
describe
s
(
@NotNull
VirtualFile
file
)
{
return
file
.
getFileType
()
==
XmlFileType
.
INSTANCE
&&
FileUtil
.
namesEqual
(
file
.
getName
(),
MavenConstants
.
POM_XML
);
}
}
This diff is collapsed.
Click to expand it.
plugins/maven/src/main/resources/META-INF/groovy-support.xml
+
1
-
1
View file @
77e3a064
...
...
@@ -31,6 +31,6 @@
<completion.contributor
language=
"Groovy"
id=
"mavenGroovyPom"
order=
"last"
implementationClass=
"org.jetbrains.idea.maven.plugins.groovy.MavenGroovyPomCompletionContributor"
/>
<fileTypeUsageSchemaDescriptor
implementationClass=
"org.jetbrains.idea.maven.plugins.groovy.MavenGroovyScriptTypeDetector"
/>
<fileTypeUsageSchemaDescriptor
schema=
"Maven Groovy"
implementationClass=
"org.jetbrains.idea.maven.plugins.groovy.MavenGroovyScriptTypeDetector"
/>
</extensions>
</idea-plugin>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
plugins/maven/src/main/resources/META-INF/plugin.xml
+
1
-
1
View file @
77e3a064
...
...
@@ -41,7 +41,7 @@
<applicationInitializedListener
implementation=
"org.jetbrains.idea.maven.utils.MavenEnvironmentRegistrar"
/>
<customJavadocTagProvider
implementation=
"org.jetbrains.idea.maven.javadoc.MojoClassAnnotationTagProvider"
/>
<fileTypeFactory
implementation=
"org.jetbrains.idea.maven.utils.MavenFileTypeFactory"
/>
<fileTypeUsageSchemaDescriptor
implementationClass=
"org.jetbrains.idea.maven.utils.MavenFileTypeFactory"
/>
<fileTypeUsageSchemaDescriptor
schema=
"Maven"
implementationClass=
"org.jetbrains.idea.maven.utils.MavenFileTypeFactory"
/>
<projectImportProvider
implementation=
"org.jetbrains.idea.maven.wizards.MavenProjectImportProvider"
/>
<projectOpenProcessor
implementation=
"org.jetbrains.idea.maven.wizards.MavenProjectOpenProcessor"
/>
<projectImportBuilder
implementation=
"org.jetbrains.idea.maven.wizards.MavenProjectBuilder"
/>
...
...
This diff is collapsed.
Click to expand it.
小 白蛋
@baidan
mentioned in commit
a065ffdd
·
2 years ago
mentioned in commit
a065ffdd
mentioned in commit a065ffdd859429bb6e2345e90906d485e3d15853
Toggle commit list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment