我正在解析Java源文件以收集有关我的类的各种信息.因此我正在使用JavaParser,因为我找不到一个好的替代方案(好的建议有机会成为"答案")来解析源文件.
我已经设法从我的班级获得所有方法的注释.代码如下所示:
package de.mackaz;
import japa.parser.JavaParser;
import japa.parser.ParseException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import japa.parser.ast.CompilationUnit;
import japa.parser.ast.body.MethodDeclaration;
import japa.parser.ast.expr.AnnotationExpr;
import japa.parser.ast.expr.MarkerAnnotationExpr;
import japa.parser.ast.expr.MemberValuePair;
import japa.parser.ast.expr.NormalAnnotationExpr;
import japa.parser.ast.visitor.VoidVisitorAdapter;
import java.io.FileInputStream;
public class JavaSourceUtils {
public static void main(String[] args) throws Exception {
File f = new File("/home/mackaz/SourceFile.java");
inspectJavaFile(f);
}
public static void inspectJavaFile(File pFile)
throws FileNotFoundException, ParseException, IOException {
CompilationUnit cu;
FileInputStream in = new FileInputStream(pFile);
try {
cu = JavaParser.parse(in);
} finally {
in.close();
}
new MethodVisitor().visit(cu, …Run Code Online (Sandbox Code Playgroud) CA1023:索引器不应该是多维的
索引器(即索引属性)应使用单个索引.多维索引器可以显着降低库的可用性.如果设计需要多个索引,请重新考虑该类型是否表示逻辑数据存储.如果没有,请使用方法.
要修复违反此规则的行为,请将设计更改为使用单个整数或字符串索引,或使用方法而不是索引器.
这对我来说似乎很奇怪,为什么这会对任何事情产生重大影响?除了使多维索引更不直观之外?
Change the design to use a string?用它做什么?在另一端解析数字并失去强打字?
有人可以告诉我为什么多维索引器有问题吗?
我知道应该总是用两者编译-Wall并且-Wextra因为它们启用警告并帮助我们理解我们的错误,如果有的话.
我已经读过-Wextra不建议使用编译器标志,因为它太冗长了很多误报.
读这篇文章我很惊讶.所以我开始谷歌搜索它,但我没有得到任何答案,因为所有搜索结果显示" -Wextra旗帜做什么?".
所以,我的问题是
-Wextra旗帜会发出不必要的警告?-Wextra标志启用导致GCC发出这些类型警告的其他标志?我目前正在学习C++,因为我还在学习,我一直在犯错.
使用像C++一样宽松的语言,通常需要花费很长时间来弄清楚究竟出了什么问题 - 因为编译器让我可以侥幸逃脱.我意识到这种灵活性是C++的主要优势之一,但它使得学习基本语言变得困难.
是否有一些工具可用于分析我的代码并根据最佳实践或合理编码提出建议?最好是作为Eclipse插件或linux应用程序.
在我的应用程序中,我有一个启动同步过程的表单,出于多种原因,我希望一次只允许一个同步运行.所以我在我的表单中添加了一个静态bool字段,指示是否正在进行同步,并添加了一个锁定,如果尚未设置此字段,则将该字段设置为true,以便第一个线程可以启动同步,但是当它运行其他每个线程时将尝试启动它将终止.
我的代码是这样的:
internal partial class SynchronizationForm : Form
{
private static volatile bool workInProgress;
private void SynchronizationForm_Shown(object sender, EventArgs e)
{
lock (typeof(SynchronizationForm))
{
if (!workInProgress)
{
workInProgress = true;
}
else
{
this.Close();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用但是当我在我的项目上运行Code Analysis时,我收到以下警告消息:
CA2002:Microsoft.Reliability:'SynchronizationForm.SynchronizationForm_Shown(object,EventArgs)'锁定类型为'Type'的引用.将其替换为具有强身份的对象的锁定.
任何人都可以向我解释我的代码有什么问题,如何改进它以使警告消失.对象具有强烈的身份意味着什么?
在visual studio中,我可以在我的.NET项目上运行代码分析.我正在运行基本正确性并有85个警告.这有点多了.其中大多数都是外部代码.
如何禁用特定警告,以便我可以专注于更重要的警告?我尝试了以下但它无法识别代码分析警告.(我第一次尝试没有CA)
#pragma warning disable CA1820 CA1065 CA2100
Run Code Online (Sandbox Code Playgroud) 我正在维护/开发一个家庭作业测试平台.它主要是自动的.我现在需要添加的是代码分析.我需要检查特定结构的代码.
例如:
该文件是否
main.cpp包含user使用const方法 命名的类get_name()?
是否有一些工具可以让我做这些东西(理想的是可以编写脚本的东西).仅限Linux.
很长一段时间以来,我一直在想这个问题,但我似乎无法找到明确的答案.每当我使用该ToString()方法将整数转换为字符串,并运行代码分析时,我会收到以下警告:
CA1305:Microsoft.Globalization:因为'int.ToString()'的行为可能会根据当前用户的语言环境设置而有所不同,所以在'Class.Method()'中调用此调用,调用'int.ToString(IFormatProvider)' .如果'int.ToString(IFormatProvider)'的结果将显示给用户,请将'CultureInfo.CurrentCulture'指定为'IFormatProvider'参数.否则,如果结果将由软件存储和访问,例如将其保存到磁盘或数据库,请指定"CultureInfo.InvariantCulture".
这是众所周知的通用CA1305警告,只要您调用具有接受IFormatProvider参数的重载的方法,就会显示该警告.虽然在几乎所有情况下这都是一个非常正确的警告,但是在调用默认值ToString() 而没有任何格式或formatprovider的整数时,我想不出任何可能出错的地方.所以,如果有人知道任何可能出错的事情,请启发我.我猜测必须有一个很好的理由来IFormatProvider超载.
顺便说一句,我也总是用电话IFormatProvider超载,因为它似乎也有性能优势.如果有人对此有任何见解,请随时分享.
我试图在TFS的TEST安装中设置/覆盖一些设置,关于在构建过程中强制代码分析和相关设置(无论项目文件的设置是什么)
我们目前在TEST TFS安装中使用:
我们可以按预期编译样本.net 4.5项目(类库(DLL),Web应用程序等).这仅与覆盖相关的代码分析设置有关(希望如此).
场景1 - 在我们的开发人员机器上的示例应用程序中,当您选择项目设置时(右键单击 - >解决方案资源管理器中的属性),如果我打开"在构建时启用代码分析"并选择规则,请转到代码分析选项卡从下拉列表设置执行为exepcted,因此它将生成一些警告.<RunCodeAnalysis>false</RunCodeAnalysis>如果在记事本中打开,此技术会添加到*.csproj文件中.如果执行构建以编译示例项目/解决方案,则按预期执行代码分析.我不想在每个项目上都这样做,因为开发人员可以关闭它(虽然我希望有签到政策和/或私人/门禁签到以及强制这个).
场景2 - 我可以禁用"在构建时启用代码分析"复选框并在我们的TFSBuild.proj文件中强制进行代码分析(我们将使用默认的upgradetemplate.xaml作为我们的流程定义,因为我们将从我们的TFS 2008升级LIVE TFS安装):
<RunCodeAnalysis>Always</RunCodeAnalysis>
这是有效的,这就是我们将如何强制(仍然需要学习的经验:-))我们构建的代码分析.
然后在设置其他已分析的代码分析设置时出现问题.例如,应用/使用或将CA警告视为错误的默认规则集.通过在记事本中编辑*.csproj,可以在VS或所有设置中设置其中一些设置.如果我编辑*.csproj,那么这些值将按预期在构建中使用(以及在开发人员计算机上本地使用).这并不理想,因为我想在TFSBuild.proj中集中进行,而不必编辑每个项目文件.我相信我可以使用我的TFSbuild.proj文件中的设置:
<PropertyGroup>
<RunCodeAnalysis>Always</RunCodeAnalysis>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
但它们似乎没有用,或者我把它们放在错误的地方?如何正确修复/使用它们?
仅供参考我通过以下方式在TFSBuild.proj中构建我的解决方案:
<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
<ItemGroup>
<SolutionToBuild Include="/some folder/some solution.sln" />
<ConfigurationToBuild Include="Debug|Any CPU">
<FlavorToBuild>Debug</FlavorToBuild>
<PlatformToBuild>Any CPU</PlatformToBuild>
</ConfigurationToBuild>
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
在构建服务器上,我确实在c:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0\CodeAnalysis中找到了代码分析的目标文件的引用,但我不想更改构建服务器上的默认行为(虽然它确实有效但我这样做.必须将CodeAnalysisTreatWarningsAsErrors的条件评估为false.就像我的值不是从TFSBuild.proj中读取的,而是来自.csproj文件.
任何问题都可以提前询问和感谢
我需要分析kotlin文件代码,以检测关键字"data"和"?".
问题是我找不到像JavaParser这样的库.我不需要功能强大的工具,只需要返回行数.
任何的想法?