Browse Source

CSharpParser: when parsing part of a compilation unit, detach the resulting nodes from the dummy compilation.

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
dd07a77ce8
  1. 32
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs

32
ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs

@ -3733,8 +3733,13 @@ namespace ICSharpCode.NRefactory.CSharp @@ -3733,8 +3733,13 @@ namespace ICSharpCode.NRefactory.CSharp
if (cu == null)
return Enumerable.Empty<EntityDeclaration> ();
var td = cu.Children.FirstOrDefault () as TypeDeclaration;
if (td != null)
return td.Members;
if (td != null) {
var members = td.Members.ToArray();
// detach members from parent
foreach (var m in members)
m.Remove();
return members;
}
return Enumerable.Empty<EntityDeclaration> ();
}
@ -3743,8 +3748,13 @@ namespace ICSharpCode.NRefactory.CSharp @@ -3743,8 +3748,13 @@ namespace ICSharpCode.NRefactory.CSharp
string code = "void M() { " + Environment.NewLine + reader.ReadToEnd () + "}";
var members = ParseTypeMembers (new StringReader (code), lineModifier - 1);
var method = members.FirstOrDefault () as MethodDeclaration;
if (method != null && method.Body != null)
return method.Body.Statements;
if (method != null && method.Body != null) {
var statements = method.Body.Statements.ToArray();
// detach statements from parent
foreach (var st in statements)
st.Remove();
return statements;
}
return Enumerable.Empty<Statement> ();
}
@ -3753,8 +3763,11 @@ namespace ICSharpCode.NRefactory.CSharp @@ -3753,8 +3763,11 @@ namespace ICSharpCode.NRefactory.CSharp
string code = reader.ReadToEnd () + " a;";
var members = ParseTypeMembers (new StringReader (code));
var field = members.FirstOrDefault () as FieldDeclaration;
if (field != null)
return field.ReturnType;
if (field != null) {
AstType type = field.ReturnType;
type.Remove();
return type;
}
return AstType.Null;
}
@ -3763,8 +3776,11 @@ namespace ICSharpCode.NRefactory.CSharp @@ -3763,8 +3776,11 @@ namespace ICSharpCode.NRefactory.CSharp
var es = ParseStatements (new StringReader ("tmp = " + Environment.NewLine + reader.ReadToEnd () + ";"), -1).FirstOrDefault () as ExpressionStatement;
if (es != null) {
AssignmentExpression ae = es.Expression as AssignmentExpression;
if (ae != null)
return ae.Right;
if (ae != null) {
Expression expr = ae.Right;
expr.Remove();
return expr;
}
}
return Expression.Null;
}

Loading…
Cancel
Save